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