func testByteOrder(t *testing.T, s *stream.Stream, in *byteorderSample) { s.SetSize(256) s.Seek(0, 0) data := s.Buf() whint := in.order.String() var m, n int m = in.order.PutUint8(data, byte(0x09)) n = in.order.PutUint32(data[m:], uint32(0x1310)) n += m L := len(in.output) if n != L { t.Fatalf("%s: outsize must %v, but got %v\n", whint, L, n) } for i, b := range in.output { if b != data[i] { t.Fatalf("%s: output[%d] must %2X, but got %2X\n", whint, i, b, data[i]) } } for _, read := range in.reads { s.Seek(0, 0) rhint := read.order.String() var b byte var i uint32 b, m = read.order.Uint8(data) i, n = read.order.Uint32(data[m:]) n += m if n != L { t.Errorf("%s: read by %s: final position must be %v, but got %v\n", whint, rhint, L, n) } else if b != read.b { t.Errorf("%s: read by %s: expect %.2X, but got %.2X\n", whint, rhint, read.b, b) } else if i != read.i { t.Errorf("%s: read by %s: expect %.8X, but got %.8X\n", whint, rhint, read.i, i) } } }
func testMarshal(t *testing.T, s *stream.Stream, in *marshalTestData) { var dummy = &datatype{} var n int var err error // println("*** encoding ***") s.SetSize(0) w := binutil.NewEncoder2(s, in.order, in.intNs) hint := w.String() n, err = w.Write(in.data) if err != nil { t.Errorf("encode(%s) error: %v\n", hint, err) } if n != in.outsize { t.Errorf("encode(%s) size must %v, but got %v\n", hint, in.outsize, n) } n = len(in.out) if n != in.outsize { t.Errorf("encode(%s) len(test) must %v, but got %v\n", hint, in.outsize, n) } b := s.Buf() n = len(b) if n != in.outsize { t.Errorf("encode(%s) len(dump) must %v, but got %v\n", hint, in.outsize, n) } for i, v := range in.out { if v != b[i] { t.Fatalf("marshal(%s) out[%v] must %2X, but got %2X\n", hint, i, v, b[i]) } } //* // println("*** decoding ***") s.Seek(0, 0) r := binutil.NewDecoder2(s, in.order, in.intNs) n, err = r.Read(dummy) if err != nil { t.Errorf("decode(%s) error: %v\n", hint, err) } if n != in.outsize { t.Errorf("decode(%s) size must %v, but got %v\n", hint, in.outsize, n) } if !DeepEqual(in.data, dummy) { t.Fatalf("decode(%s) DeepEqual false\n", hint) } //*/ }