byteio - littleendianreader_test.go
1 package byteio
2
3 import (
4 "strings"
5 "testing"
6 )
7
8 func TestReadLittleEndian(t *testing.T) {
9 const testData = "\x0d\x0c\x0b\x0a\x0d\x0c\x08\x07\x06\x05\x04\x03\x02\x01A"
10 r := LittleEndianReader{Reader: strings.NewReader(testData)}
11 if i, n, err := r.ReadUint32(); err != nil {
12 t.Errorf("test 1: unexpected error: %s", err)
13 } else if n != 4 {
14 t.Errorf("test 1: expecting to read 4 bytes, read %d", n)
15 } else if i != 168496141 {
16 t.Errorf("test 1: expecting 168496141, got %d", i)
17 }
18 if i, n, err := r.ReadUint16(); err != nil {
19 t.Errorf("test 2: unexpected error: %s", err)
20 } else if n != 2 {
21 t.Errorf("test 2: expecting to read 2 bytes, read %d", n)
22 } else if i != 3085 {
23 t.Errorf("test 2: expecting 3085, got %d", i)
24 }
25 if i, n, err := r.ReadUint64(); err != nil {
26 t.Errorf("test 3: unexpected error: %s", err)
27 } else if n != 8 {
28 t.Errorf("test 3: expecting to read 8 bytes, read %d", n)
29 } else if i != 72623859790382856 {
30 t.Errorf("test 3: expecting 72623859790382856 got %d", i)
31 }
32 if i, n, err := r.ReadUint8(); err != nil {
33 t.Errorf("test 4: unexpected error: %s", err)
34 } else if n != 1 {
35 t.Errorf("test 4: expecting to read 1 byte, read %d", n)
36 } else if i != 65 {
37 t.Errorf("test 4: expecting 65, got %d", i)
38 }
39 }
40
41 type neverending []byte
42
43 func (n neverending) Read(b []byte) (int, error) {
44 return copy(b, n), nil
45 }
46
47 func BenchmarkReadLittleEndianUint8(b *testing.B) {
48 r := LittleEndianReader{Reader: neverending{1}}
49 b.ResetTimer()
50 for i := 0; i < b.N; i++ {
51 _, _, _ = r.ReadUint8()
52 }
53 }
54
55 func BenchmarkReadLittleEndianInt8(b *testing.B) {
56 r := LittleEndianReader{Reader: neverending{1}}
57 b.ResetTimer()
58 for i := 0; i < b.N; i++ {
59 _, _, _ = r.ReadInt8()
60 }
61 }
62 func BenchmarkReadLittleEndianUint16(b *testing.B) {
63 r := LittleEndianReader{Reader: neverending{1, 1}}
64 b.ResetTimer()
65 for i := 0; i < b.N; i++ {
66 _, _, _ = r.ReadUint16()
67 }
68 }
69
70 func BenchmarkReadLittleEndianInt16(b *testing.B) {
71 r := LittleEndianReader{Reader: neverending{1, 1}}
72 b.ResetTimer()
73 for i := 0; i < b.N; i++ {
74 _, _, _ = r.ReadInt16()
75 }
76 }
77
78 func BenchmarkReadLittleEndianUint32(b *testing.B) {
79 r := LittleEndianReader{Reader: neverending{1, 1, 1, 1}}
80 b.ResetTimer()
81 for i := 0; i < b.N; i++ {
82 _, _, _ = r.ReadUint32()
83 }
84 }
85
86 func BenchmarkReadLittleEndianInt32(b *testing.B) {
87 r := LittleEndianReader{Reader: neverending{1, 1, 1, 1}}
88 b.ResetTimer()
89 for i := 0; i < b.N; i++ {
90 _, _, _ = r.ReadInt32()
91 }
92 }
93
94 func BenchmarkReadLittleEndianUint64(b *testing.B) {
95 r := LittleEndianReader{Reader: neverending{1, 1, 1, 1, 1, 1, 1, 1}}
96 b.ResetTimer()
97 for i := 0; i < b.N; i++ {
98 _, _, _ = r.ReadUint64()
99 }
100 }
101
102 func BenchmarkReadLittleEndianInt64(b *testing.B) {
103 r := LittleEndianReader{Reader: neverending{1, 1, 1, 1, 1, 1, 1, 1}}
104 b.ResetTimer()
105 for i := 0; i < b.N; i++ {
106 _, _, _ = r.ReadInt64()
107 }
108 }
109