arnaucube
arnaucube/hermez-nodePublic Self-hosted repository
hermez-node/common/utils_test.go
common/utils_test.goRaw
 1package common
 2
 3import (
 4	"encoding/hex"
 5	"testing"
 6
 7	"github.com/iden3/go-merkletree"
 8	"github.com/stretchr/testify/assert"
 9	"github.com/stretchr/testify/require"
10)
11
12func TestBJJFromStringWithChecksum(t *testing.T) {
13	s := "21b0a1688b37f77b1d1d5539ec3b826db5ac78b2513f574a04c50a7d4f8246d7"
14	pkComp, err := BJJFromStringWithChecksum(s)
15	assert.NoError(t, err)
16	sBytes, err := hex.DecodeString(s)
17	assert.NoError(t, err)
18	assert.Equal(t, hex.EncodeToString(SwapEndianness(sBytes)), pkComp.String())
19
20	pk, err := pkComp.Decompress()
21	assert.NoError(t, err)
22
23	// expected values computed with js implementation
24	assert.Equal(t,
25		"2492816973395423007340226948038371729989170225696553239457870892535792679622",
26		pk.X.String())
27	assert.Equal(t,
28		"15238403086306505038849621710779816852318505119327426213168494964113886299863",
29		pk.Y.String())
30}
31
32func TestRmEndingZeroes(t *testing.T) {
33	s0, err :=
34		merkletree.NewHashFromHex("0x0000000000000000000000000000000000000000000000000000000000000000")
35	require.NoError(t, err)
36	s1, err :=
37		merkletree.NewHashFromHex("0x0000000000000000000000000000000000000000000000000000000000000001")
38	require.NoError(t, err)
39	s2, err :=
40		merkletree.NewHashFromHex("0x0000000000000000000000000000000000000000000000000000000000000002")
41	require.NoError(t, err)
42
43	// expect cropped last zeroes
44	circomSiblings := []*merkletree.Hash{s0, s1, s0, s1, s1, s1, s2, s0, s0, s0, s0}
45	siblings := RmEndingZeroes(circomSiblings)
46	expected := []*merkletree.Hash{s0, s1, s0, s1, s1, s1, s2}
47	assert.Equal(t, expected, siblings)
48
49	// expect empty array when input is an empty array
50	siblings = RmEndingZeroes([]*merkletree.Hash{})
51	assert.Equal(t, []*merkletree.Hash{}, siblings)
52	// expect nil when input is nil
53	siblings = RmEndingZeroes(nil)
54	assert.Nil(t, siblings)
55
56	// cases when inputs are [x], [x,0], [0,x]
57	circomSiblings = []*merkletree.Hash{s1}
58	siblings = RmEndingZeroes(circomSiblings)
59	assert.Equal(t, []*merkletree.Hash{s1}, siblings)
60	circomSiblings = []*merkletree.Hash{s1, s0}
61	siblings = RmEndingZeroes(circomSiblings)
62	assert.Equal(t, []*merkletree.Hash{s1}, siblings)
63	circomSiblings = []*merkletree.Hash{s0, s1}
64	siblings = RmEndingZeroes(circomSiblings)
65	assert.Equal(t, []*merkletree.Hash{s0, s1}, siblings)
66
67	// expect empty array when input is all zeroes
68	circomSiblings = []*merkletree.Hash{s0}
69	siblings = RmEndingZeroes(circomSiblings)
70	assert.Equal(t, []*merkletree.Hash{}, siblings)
71	circomSiblings = []*merkletree.Hash{s0, s0}
72	siblings = RmEndingZeroes(circomSiblings)
73	assert.Equal(t, []*merkletree.Hash{}, siblings)
74	circomSiblings = []*merkletree.Hash{s0, s0, s0, s0, s0}
75	siblings = RmEndingZeroes(circomSiblings)
76	assert.Equal(t, []*merkletree.Hash{}, siblings)
77
78	// expect input equal to output when last element!=0
79	circomSiblings = []*merkletree.Hash{s0, s1, s0, s1, s1, s1, s2, s0, s0, s0, s0, s2}
80	siblings = RmEndingZeroes(circomSiblings)
81	assert.Equal(t, circomSiblings, siblings)
82}