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, "2492816973395423007340226948038371729989170225696553239457870892535792679622", pk.X.String())
25	assert.Equal(t, "15238403086306505038849621710779816852318505119327426213168494964113886299863", pk.Y.String())
26}
27
28func TestRmEndingZeroes(t *testing.T) {
29	s0, err := merkletree.NewHashFromHex("0x0000000000000000000000000000000000000000000000000000000000000000")
30	require.NoError(t, err)
31	s1, err := merkletree.NewHashFromHex("0x0000000000000000000000000000000000000000000000000000000000000001")
32	require.NoError(t, err)
33	s2, err := merkletree.NewHashFromHex("0x0000000000000000000000000000000000000000000000000000000000000002")
34	require.NoError(t, err)
35
36	// expect cropped last zeroes
37	circomSiblings := []*merkletree.Hash{s0, s1, s0, s1, s1, s1, s2, s0, s0, s0, s0}
38	siblings := RmEndingZeroes(circomSiblings)
39	expected := []*merkletree.Hash{s0, s1, s0, s1, s1, s1, s2}
40	assert.Equal(t, expected, siblings)
41
42	// expect empty array when input is an empty array
43	siblings = RmEndingZeroes([]*merkletree.Hash{})
44	assert.Equal(t, []*merkletree.Hash{}, siblings)
45	// expect nil when input is nil
46	siblings = RmEndingZeroes(nil)
47	assert.Nil(t, siblings)
48
49	// cases when inputs are [x], [x,0], [0,x]
50	circomSiblings = []*merkletree.Hash{s1}
51	siblings = RmEndingZeroes(circomSiblings)
52	assert.Equal(t, []*merkletree.Hash{s1}, siblings)
53	circomSiblings = []*merkletree.Hash{s1, s0}
54	siblings = RmEndingZeroes(circomSiblings)
55	assert.Equal(t, []*merkletree.Hash{s1}, siblings)
56	circomSiblings = []*merkletree.Hash{s0, s1}
57	siblings = RmEndingZeroes(circomSiblings)
58	assert.Equal(t, []*merkletree.Hash{s0, s1}, siblings)
59
60	// expect empty array when input is all zeroes
61	circomSiblings = []*merkletree.Hash{s0}
62	siblings = RmEndingZeroes(circomSiblings)
63	assert.Equal(t, []*merkletree.Hash{}, siblings)
64	circomSiblings = []*merkletree.Hash{s0, s0}
65	siblings = RmEndingZeroes(circomSiblings)
66	assert.Equal(t, []*merkletree.Hash{}, siblings)
67	circomSiblings = []*merkletree.Hash{s0, s0, s0, s0, s0}
68	siblings = RmEndingZeroes(circomSiblings)
69	assert.Equal(t, []*merkletree.Hash{}, siblings)
70
71	// expect input equal to output when last element!=0
72	circomSiblings = []*merkletree.Hash{s0, s1, s0, s1, s1, s1, s2, s0, s0, s0, s0, s2}
73	siblings = RmEndingZeroes(circomSiblings)
74	assert.Equal(t, circomSiblings, siblings)
75}