...

Source file src/github.com/twmb/franz-go/pkg/kbin/primitives_test.go

Documentation: github.com/twmb/franz-go/pkg/kbin

     1  package kbin
     2  
     3  import (
     4  	"bytes"
     5  	"encoding/binary"
     6  	"fmt"
     7  	"testing"
     8  	"testing/quick"
     9  )
    10  
    11  func TestVarint(t *testing.T) {
    12  	if err := quick.Check(func(x int32) bool {
    13  		var expPut [10]byte
    14  		n := binary.PutVarint(expPut[:], int64(x))
    15  
    16  		gotPut := AppendVarint(nil, x)
    17  		if !bytes.Equal(expPut[:n], gotPut) {
    18  			return false
    19  		}
    20  		if len(gotPut) != n {
    21  			return false
    22  		}
    23  		if VarintLen(x) != n {
    24  			return false
    25  		}
    26  
    27  		expRead, expN := binary.Varint(expPut[:n])
    28  		gotRead, gotN := Varint(gotPut)
    29  
    30  		if expN != gotN || expRead != int64(gotRead) {
    31  			return false
    32  		}
    33  
    34  		return true
    35  	}, nil); err != nil {
    36  		t.Error(err)
    37  	}
    38  }
    39  
    40  func TestUvarint(t *testing.T) {
    41  	if err := quick.Check(func(u uint32) bool {
    42  		var expPut [10]byte
    43  		n := binary.PutUvarint(expPut[:], uint64(u))
    44  
    45  		gotPut := AppendUvarint(nil, u)
    46  		if !bytes.Equal(expPut[:n], gotPut) {
    47  			return false
    48  		}
    49  
    50  		expRead, expN := binary.Uvarint(expPut[:n])
    51  		gotRead, gotN := Uvarint(gotPut)
    52  
    53  		if expN != gotN || expRead != uint64(gotRead) {
    54  			return false
    55  		}
    56  
    57  		return true
    58  	}, nil); err != nil {
    59  		t.Error(err)
    60  	}
    61  }
    62  
    63  func TestVarlong(t *testing.T) {
    64  	if err := quick.Check(func(x int64) bool {
    65  		var expPut [10]byte
    66  		n := binary.PutVarint(expPut[:], x)
    67  
    68  		gotPut := AppendVarlong(nil, x)
    69  		if !bytes.Equal(expPut[:n], gotPut) {
    70  			return false
    71  		}
    72  		if len(gotPut) != n {
    73  			return false
    74  		}
    75  		if VarlongLen(x) != n {
    76  			return false
    77  		}
    78  
    79  		expRead, expN := binary.Varint(expPut[:n])
    80  		gotRead, gotN := Varlong(gotPut)
    81  
    82  		if expN != gotN || expRead != gotRead {
    83  			return false
    84  		}
    85  
    86  		return true
    87  	}, nil); err != nil {
    88  		t.Error(err)
    89  	}
    90  }
    91  
    92  func BenchmarkUvarint(b *testing.B) {
    93  	for _, u := range []uint32{
    94  		0,         // len 1
    95  		128,       // len 2
    96  		16384,     // len 3
    97  		2097152,   // len 4
    98  		268435456, // len 5
    99  	} {
   100  		b.Run(fmt.Sprintf("uvarint_len_%d", UvarintLen(u)), func(b *testing.B) {
   101  			s := AppendUvarint(nil, u)
   102  			for i := 0; i < b.N; i++ {
   103  				Uvarint(s)
   104  			}
   105  		})
   106  	}
   107  }
   108  

View as plain text