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}