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  }