kind_test.go raw

   1  package kind
   2  
   3  import (
   4  	"testing"
   5  
   6  	"next.orly.dev/pkg/lol/chk"
   7  
   8  	"lukechampine.com/frand"
   9  )
  10  
  11  func TestMarshalUnmarshal(t *testing.T) {
  12  	var err error
  13  	k := make([]*K, 1000000)
  14  	for i := range k {
  15  		k[i] = New(uint16(frand.Intn(65535)))
  16  	}
  17  	mk := make([][]byte, len(k))
  18  	for i := range mk {
  19  		mk[i] = make([]byte, 0, 5) // 16 bits max 65535 = 5 characters
  20  	}
  21  	for i := range k {
  22  		mk[i] = k[i].Marshal(mk[i])
  23  	}
  24  	k2 := make([]*K, len(k))
  25  	for i := range k2 {
  26  		k2[i] = New(0)
  27  	}
  28  	for i := range k2 {
  29  		var r []byte
  30  		if r, err = k2[i].Unmarshal(mk[i]); chk.E(err) {
  31  			t.Fatal(err)
  32  		}
  33  		if len(r) != 0 {
  34  			t.Fatalf("remainder after unmarshal: '%s'", r)
  35  		}
  36  	}
  37  }
  38