e601166d9ec034c84805e18bfcc60256577152f8
[govpp.git] / vendor / github.com / lunixbochs / struc / custom_test.go
1 package struc
2
3 import (
4         "bytes"
5         "encoding/binary"
6         "io"
7         "strconv"
8         "testing"
9 )
10
11 type Int3 uint32
12
13 func (i *Int3) Pack(p []byte, opt *Options) (int, error) {
14         var tmp [4]byte
15         binary.BigEndian.PutUint32(tmp[:], uint32(*i))
16         copy(p, tmp[1:])
17         return 3, nil
18 }
19 func (i *Int3) Unpack(r io.Reader, length int, opt *Options) error {
20         var tmp [4]byte
21         if _, err := r.Read(tmp[1:]); err != nil {
22                 return err
23         }
24         *i = Int3(binary.BigEndian.Uint32(tmp[:]))
25         return nil
26 }
27 func (i *Int3) Size(opt *Options) int {
28         return 3
29 }
30 func (i *Int3) String() string {
31         return strconv.FormatUint(uint64(*i), 10)
32 }
33
34 func TestCustom(t *testing.T) {
35         var buf bytes.Buffer
36         var i Int3 = 3
37         if err := Pack(&buf, &i); err != nil {
38                 t.Fatal(err)
39         }
40         if !bytes.Equal(buf.Bytes(), []byte{0, 0, 3}) {
41                 t.Fatal("error packing custom int")
42         }
43         var i2 Int3
44         if err := Unpack(&buf, &i2); err != nil {
45                 t.Fatal(err)
46         }
47         if i2 != 3 {
48                 t.Fatal("error unpacking custom int")
49         }
50 }
51
52 type Int3Struct struct {
53         I Int3
54 }
55
56 func TestCustomStruct(t *testing.T) {
57         var buf bytes.Buffer
58         i := Int3Struct{3}
59         if err := Pack(&buf, &i); err != nil {
60                 t.Fatal(err)
61         }
62         if !bytes.Equal(buf.Bytes(), []byte{0, 0, 3}) {
63                 t.Fatal("error packing custom int struct")
64         }
65         var i2 Int3Struct
66         if err := Unpack(&buf, &i2); err != nil {
67                 t.Fatal(err)
68         }
69         if i2.I != 3 {
70                 t.Fatal("error unpacking custom int struct")
71         }
72 }
73
74 // TODO: slices of custom types don't work yet
75 /*
76 type Int3SliceStruct struct {
77         I [2]Int3
78 }
79
80 func TestCustomSliceStruct(t *testing.T) {
81         var buf bytes.Buffer
82         i := Int3SliceStruct{[2]Int3{3, 4}}
83         if err := Pack(&buf, &i); err != nil {
84                 t.Fatal(err)
85         }
86         if !bytes.Equal(buf.Bytes(), []byte{0, 0, 3}) {
87                 t.Fatal("error packing custom int struct")
88         }
89         var i2 Int3SliceStruct
90         if err := Unpack(&buf, &i2); err != nil {
91                 t.Fatal(err)
92         }
93         if i2.I[0] != 3 && i2.I[1] != 4 {
94                 t.Fatal("error unpacking custom int struct")
95         }
96 }
97 */