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}