ints_test.go raw

   1  package ints
   2  
   3  import (
   4  	"math"
   5  	"strconv"
   6  	"testing"
   7  
   8  	"next.orly.dev/pkg/lol/chk"
   9  
  10  	"lukechampine.com/frand"
  11  )
  12  
  13  func TestMarshalUnmarshal(t *testing.T) {
  14  	b := make([]byte, 0, 8)
  15  	var rem []byte
  16  	var n *T
  17  	var err error
  18  	for _ = range 10000000 {
  19  		n = New(uint64(frand.Intn(math.MaxInt64)))
  20  		b = n.Marshal(b)
  21  		m := New(0)
  22  		if rem, err = m.Unmarshal(b); chk.E(err) {
  23  			t.Fatal(err)
  24  		}
  25  		if n.N != m.N {
  26  			t.Fatalf("failed to convert to int64 at %d %s %d", n.N, b, m.N)
  27  		}
  28  		if len(rem) > 0 {
  29  			t.Fatalf("leftover bytes after converting back: '%s'", rem)
  30  		}
  31  		b = b[:0]
  32  	}
  33  }
  34  
  35  func BenchmarkByteStringToInt64(bb *testing.B) {
  36  	b := make([]byte, 0, 19)
  37  	var i int
  38  	const nTests = 10000000
  39  	testInts := make([]*T, nTests)
  40  	for i = range nTests {
  41  		testInts[i] = New(frand.Intn(math.MaxInt64))
  42  	}
  43  	bb.Run(
  44  		"Marshal", func(bb *testing.B) {
  45  			bb.ReportAllocs()
  46  			for i = 0; i < bb.N; i++ {
  47  				n := testInts[i%10000]
  48  				b = n.Marshal(b)
  49  				b = b[:0]
  50  			}
  51  		},
  52  	)
  53  	bb.Run(
  54  		"Itoa", func(bb *testing.B) {
  55  			bb.ReportAllocs()
  56  			var s string
  57  			for i = 0; i < bb.N; i++ {
  58  				n := testInts[i%10000]
  59  				s = strconv.Itoa(int(n.N))
  60  				_ = s
  61  			}
  62  		},
  63  	)
  64  	bb.Run(
  65  		"MarshalUnmarshal", func(bb *testing.B) {
  66  			bb.ReportAllocs()
  67  			m := New(0)
  68  			for i = 0; i < bb.N; i++ {
  69  				n := testInts[i%10000]
  70  				b = m.Marshal(b)
  71  				_, _ = n.Unmarshal(b)
  72  				b = b[:0]
  73  			}
  74  		},
  75  	)
  76  	bb.Run(
  77  		"ItoaAtoi", func(bb *testing.B) {
  78  			bb.ReportAllocs()
  79  			var s string
  80  			for i = 0; i < bb.N; i++ {
  81  				n := testInts[i%10000]
  82  				s = strconv.Itoa(int(n.N))
  83  				_, _ = strconv.Atoi(s)
  84  			}
  85  		},
  86  	)
  87  }
  88