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}