helpers_test.go raw

   1  package text
   2  
   3  import (
   4  	"testing"
   5  
   6  	"next.orly.dev/pkg/nostr/encoders/hex"
   7  	"next.orly.dev/pkg/nostr/utils"
   8  	"github.com/minio/sha256-simd"
   9  	"next.orly.dev/pkg/lol/chk"
  10  	"lukechampine.com/frand"
  11  )
  12  
  13  func TestUnmarshalHexArray(t *testing.T) {
  14  	var ha [][]byte
  15  	h := make([]byte, sha256.Size)
  16  	frand.Read(h)
  17  	var dst []byte
  18  	for _ = range 20 {
  19  		hh := sha256.Sum256(h)
  20  		h = hh[:]
  21  		ha = append(ha, h)
  22  	}
  23  	dst = append(dst, '[')
  24  	for i := range ha {
  25  		dst = AppendQuote(dst, ha[i], hex.EncAppend)
  26  		if i != len(ha)-1 {
  27  			dst = append(dst, ',')
  28  		}
  29  	}
  30  	dst = append(dst, ']')
  31  	var ha2 [][]byte
  32  	var rem []byte
  33  	var err error
  34  	if ha2, rem, err = UnmarshalHexArray(dst, sha256.Size); chk.E(err) {
  35  		t.Fatal(err)
  36  	}
  37  	if len(ha2) != len(ha) {
  38  		t.Fatalf(
  39  			"failed to unmarshal, got %d fields, expected %d", len(ha2),
  40  			len(ha),
  41  		)
  42  	}
  43  	if len(rem) > 0 {
  44  		t.Fatalf("failed to unmarshal, remnant afterwards '%s'", rem)
  45  	}
  46  	for i := range ha2 {
  47  		if !utils.FastEqual(ha[i], ha2[i]) {
  48  			t.Fatalf(
  49  				"failed to unmarshal at element %d; got %x, expected %x",
  50  				i, ha[i], ha2[i],
  51  			)
  52  		}
  53  	}
  54  }
  55