go-snark/r1csqap_test.go
r1csqap_test.goRaw
1package sn
2
3import (
4 "fmt"
5 "math/big"
6 "testing"
7
8 "github.com/stretchr/testify/assert"
9)
10
11func TestTranspose(t *testing.T) {
12 b0 := big.NewFloat(float64(0))
13 b1 := big.NewFloat(float64(1))
14 bFive := big.NewFloat(float64(5))
15 a := [][]*big.Float{
16 []*big.Float{b0, b1, b0, b0, b0, b0},
17 []*big.Float{b0, b0, b0, b1, b0, b0},
18 []*big.Float{b0, b1, b0, b0, b1, b0},
19 []*big.Float{bFive, b0, b0, b0, b0, b1},
20 }
21 aT := Transpose(a)
22 assert.Equal(t, aT, [][]*big.Float{
23 []*big.Float{b0, b0, b0, bFive},
24 []*big.Float{b1, b0, b1, b0},
25 []*big.Float{b0, b0, b0, b0},
26 []*big.Float{b0, b1, b0, b0},
27 []*big.Float{b0, b0, b1, b0},
28 []*big.Float{b0, b0, b0, b1},
29 })
30}
31
32func TestPol(t *testing.T) {
33 b0 := big.NewFloat(float64(0))
34 b1 := big.NewFloat(float64(1))
35 // b1neg := big.NewFloat(float64(-1))
36 // b2 := big.NewFloat(float64(2))
37 b2neg := big.NewFloat(float64(-2))
38 b3 := big.NewFloat(float64(3))
39 b4 := big.NewFloat(float64(4))
40 b5 := big.NewFloat(float64(5))
41 b6 := big.NewFloat(float64(6))
42 b16 := big.NewFloat(float64(16))
43
44 a := []*big.Float{b1, b0, b5}
45 b := []*big.Float{b3, b0, b1}
46
47 // polynomial multiplication
48 c := PolMul(a, b)
49 assert.Equal(t, c, []*big.Float{b3, b0, b16, b0, b5})
50
51 // polynomial addition
52 c = PolAdd(a, b)
53 assert.Equal(t, c, []*big.Float{b4, b0, b6})
54
55 // polynomial substraction
56 c = PolSub(a, b)
57 assert.Equal(t, c, []*big.Float{b2neg, b0, b4})
58
59 // FloatPow
60 p := FloatPow(big.NewFloat(float64(5)), 3)
61 assert.Equal(t, p, big.NewFloat(float64(125)))
62 p = FloatPow(big.NewFloat(float64(5)), 0)
63 assert.Equal(t, p, big.NewFloat(float64(1)))
64
65 // NewPolZeroAt
66 r := NewPolZeroAt(3, 4, b4)
67 assert.Equal(t, PolEval(r, big.NewFloat(3)), b4)
68 r = NewPolZeroAt(2, 4, b3)
69 assert.Equal(t, PolEval(r, big.NewFloat(2)), b3)
70}
71
72func TestLagrangeInterpolation(t *testing.T) {
73 b0 := big.NewFloat(float64(0))
74 b5 := big.NewFloat(float64(5))
75 a := []*big.Float{b0, b0, b0, b5}
76 alpha := LagrangeInterpolation(a)
77
78 assert.Equal(t, PolEval(alpha, big.NewFloat(4)), b5)
79 aux, _ := PolEval(alpha, big.NewFloat(3)).Int64()
80 assert.Equal(t, aux, int64(0))
81
82}
83
84func TestR1CSToQAP(t *testing.T) {
85 b0 := big.NewFloat(float64(0))
86 b1 := big.NewFloat(float64(1))
87 b5 := big.NewFloat(float64(5))
88 a := [][]*big.Float{
89 []*big.Float{b0, b1, b0, b0, b0, b0},
90 []*big.Float{b0, b0, b0, b1, b0, b0},
91 []*big.Float{b0, b1, b0, b0, b1, b0},
92 []*big.Float{b5, b0, b0, b0, b0, b1},
93 }
94 b := [][]*big.Float{
95 []*big.Float{b0, b1, b0, b0, b0, b0},
96 []*big.Float{b0, b1, b0, b0, b0, b0},
97 []*big.Float{b1, b0, b0, b0, b0, b0},
98 []*big.Float{b1, b0, b0, b0, b0, b0},
99 }
100 c := [][]*big.Float{
101 []*big.Float{b0, b0, b0, b1, b0, b0},
102 []*big.Float{b0, b0, b0, b0, b1, b0},
103 []*big.Float{b0, b0, b0, b0, b0, b1},
104 []*big.Float{b0, b0, b1, b0, b0, b0},
105 }
106 alpha, beta, gamma, z := R1CSToQAP(a, b, c)
107 fmt.Println(alpha)
108 fmt.Println(beta)
109 fmt.Println(gamma)
110 fmt.Println(z)
111
112}