github.com/cnotch/ipchub@v1.1.0/utils/bits/reader_test.go (about) 1 // Copyright (c) 2019,CAOHONGJU All rights reserved. 2 // Use of this source code is governed by a MIT-style 3 // license that can be found in the LICENSE file. 4 5 package bits 6 7 import ( 8 "testing" 9 10 "github.com/stretchr/testify/assert" 11 ) 12 13 var bitsDatas = [][]byte{ 14 {0x46, 0x4c, 0x56, 0x01, 0x05, 0x00, 0x00, 0x00, 0x09}, 15 { 16 0x47, 0x40, 0x00, 0x10, 0x00, 17 0x00, 0xb0, 0x0d, 0x00, 0x01, 0xc1, 0x00, 0x00, 18 0x00, 0x01, 0xf0, 0x01, 19 0x2e, 0x70, 0x19, 0x05, 20 }, 21 } 22 23 func TestBitsReader_ReadBit(t *testing.T) { 24 r := NewReader(bitsDatas[0]) 25 gotRet := r.ReadBit() 26 wantRet := uint8(0) 27 assert.Equal(t, wantRet, gotRet) 28 29 gotRet = r.ReadBit() 30 wantRet = 1 31 assert.Equal(t, wantRet, gotRet) 32 33 r.Skip(3) 34 gotRet = r.ReadBit() 35 wantRet = 1 36 assert.Equal(t, wantRet, gotRet) 37 38 gotRet = r.ReadBit() 39 wantRet = 1 40 assert.Equal(t, wantRet, gotRet) 41 42 r.Skip(5) 43 gotRet = r.ReadBit() 44 wantRet = 1 45 assert.Equal(t, wantRet, gotRet) 46 47 gotRet = r.ReadBit() 48 wantRet = 1 49 assert.Equal(t, wantRet, gotRet) 50 51 gotRet = r.ReadBit() 52 wantRet = 0 53 assert.Equal(t, wantRet, gotRet) 54 55 gotRet = r.ReadUint8(8) 56 wantRet = 0x2b 57 assert.Equal(t, wantRet, gotRet) 58 59 } 60 61 func TestBitsReader_ReadUint16(t *testing.T) { 62 r := NewReader(bitsDatas[0]) 63 gotRet := r.ReadUint16(16) 64 wantRet := uint16(0x464c) 65 assert.Equal(t, wantRet, gotRet) 66 67 r.Skip(4) 68 gotRet = r.ReadUint16(16) 69 wantRet = uint16(0x6010) 70 assert.Equal(t, wantRet, gotRet) 71 72 r.Skip(1) 73 gotRet = r.ReadUint16(2) 74 wantRet = uint16(0x2) 75 assert.Equal(t, wantRet, gotRet) 76 } 77 78 func TestBitsReader_ReadUint32(t *testing.T) { 79 r := NewReader(bitsDatas[1]) 80 gotRet := r.ReadUint32(32) 81 wantRet := uint32(0x47400010) 82 assert.Equal(t, wantRet, gotRet) 83 84 r.Skip(4) 85 gotRet = r.ReadUint32(32) 86 wantRet = uint32(0x000b00d0) 87 assert.Equal(t, wantRet, gotRet) 88 89 r.Skip(8) 90 gotRet = r.ReadUint32(12) 91 wantRet = uint32(0x1c1) 92 assert.Equal(t, wantRet, gotRet) 93 } 94 95 func TestBitsReader_ReadUint64(t *testing.T) { 96 r := NewReader(bitsDatas[1]) 97 gotRet := r.ReadUint64(36) 98 wantRet := uint64(0x474000100) 99 assert.Equal(t, wantRet, gotRet) 100 101 gotRet = r.ReadUint64(32) 102 wantRet = uint64(0x000b00d0) 103 assert.Equal(t, wantRet, gotRet) 104 105 r.Skip(8) 106 gotRet = r.ReadUint64(12) 107 wantRet = uint64(0x1c1) 108 assert.Equal(t, wantRet, gotRet) 109 } 110 111 func BenchmarkReadBit(b *testing.B) { 112 r := NewReader(bitsDatas[1]) 113 b.ReportAllocs() 114 b.ResetTimer() 115 for i := 0; i < b.N; i++ { 116 r.offset = 2 117 ret := r.ReadBit() 118 _ = ret 119 } 120 } 121 122 func BenchmarkReadUint8(b *testing.B) { 123 r := NewReader(bitsDatas[1]) 124 b.ReportAllocs() 125 b.ResetTimer() 126 for i := 0; i < b.N; i++ { 127 r.offset = 2 128 ret := r.ReadUint8(7) 129 _ = ret 130 } 131 } 132 133 func BenchmarkReadUint16(b *testing.B) { 134 r := NewReader(bitsDatas[1]) 135 b.ReportAllocs() 136 b.ResetTimer() 137 for i := 0; i < b.N; i++ { 138 r.offset = 2 139 ret := r.ReadUint16(13) 140 _ = ret 141 } 142 } 143 144 func BenchmarkReadUint32(b *testing.B) { 145 r := NewReader(bitsDatas[1]) 146 b.ReportAllocs() 147 b.ResetTimer() 148 for i := 0; i < b.N; i++ { 149 r.offset = 2 150 ret := r.ReadUint32(29) 151 _ = ret 152 } 153 } 154 155 func BenchmarkReadUint64(b *testing.B) { 156 r := NewReader(bitsDatas[1]) 157 b.ReportAllocs() 158 b.ResetTimer() 159 for i := 0; i < b.N; i++ { 160 r.offset = 2 161 ret := r.ReadUint64(61) 162 _ = ret 163 } 164 }