arnaucube
arnaucube/go-snarkPublic Self-hosted repository
go-snark/r1csqapFloat/r1csqapFloat_test.go
r1csqapFloat/r1csqapFloat_test.goRaw
  1package r1csqapFloat
  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 subtraction
 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}