arnaucube
arnaucube/go-circom-prover-verifierPublic Self-hosted repository
go-circom-prover-verifier/prover/arithmetic_test.go
prover/arithmetic_test.goRaw
 1package prover
 2
 3import (
 4	"crypto/rand"
 5	"math/big"
 6	"testing"
 7
 8	cryptoConstants "github.com/iden3/go-iden3-crypto/constants"
 9	"github.com/iden3/go-iden3-crypto/utils"
10)
11
12func randBI() *big.Int {
13	maxbits := 256
14	b := make([]byte, (maxbits/8)-1)
15	_, err := rand.Read(b)
16	if err != nil {
17		panic(err)
18	}
19	r := new(big.Int).SetBytes(b)
20	return new(big.Int).Mod(r, cryptoConstants.Q)
21}
22
23func BenchmarkArithmetic(b *testing.B) {
24	// generate arrays with bigint
25	var p, q []*big.Int
26	for i := 0; i < 1000; i++ {
27		pi := randBI()
28		p = append(p, pi)
29	}
30	for i := 1000 - 1; i >= 0; i-- {
31		q = append(q, p[i])
32	}
33	pe := utils.BigIntArrayToElementArray(p)
34	qe := utils.BigIntArrayToElementArray(q)
35
36	b.Run("polynomialSub", func(b *testing.B) {
37		for i := 0; i < b.N; i++ {
38			polynomialSub(p, q)
39		}
40	})
41	b.Run("polynomialSubE", func(b *testing.B) {
42		for i := 0; i < b.N; i++ {
43			polynomialSubE(pe, qe)
44		}
45	})
46	b.Run("polynomialMul", func(b *testing.B) {
47		for i := 0; i < b.N; i++ {
48			polynomialMul(p, q)
49		}
50	})
51	b.Run("polynomialMulE", func(b *testing.B) {
52		for i := 0; i < b.N; i++ {
53			polynomialMulE(pe, qe)
54		}
55	})
56	b.Run("polynomialDiv", func(b *testing.B) {
57		for i := 0; i < b.N; i++ {
58			polynomialDiv(p, q)
59		}
60	})
61	b.Run("polynomialDivE", func(b *testing.B) {
62		for i := 0; i < b.N; i++ {
63			polynomialDivE(pe, qe)
64		}
65	})
66}