/ benchmarks / bench.nim
bench.nim
 1  import ../bncurve, std/[monotimes, os, strutils, times]
 2  
 3  template bench(desc: string, reps: int, body: untyped) =
 4    if paramCount() < 1 or desc.contains(paramStr(1)):
 5      let start = getMonoTime()
 6      for _ in 0..<reps:
 7        body
 8      let stop = getMonoTime()
 9      echo desc,": ", inNanoseconds(stop-start) div reps, " ns"
10  
11  var g11 = G1.random()
12  var g12 = G1.random()
13  
14  var fr = FR.random()
15  
16  var g21 = G2.random()
17  var g22 = G2.random()
18  
19  var a11 = g11.toAffine().get()
20  var a12 = g12.toAffine().get()
21  var a21 = g21.toAffine().get()
22  var a22 = g22.toAffine().get()
23  
24  bench "G1 Jacobian add", 100000:
25    g11 = g11 + g12
26  
27  bench "G1 toAffine", 100000:
28    a11 = g11.toAffine().get()
29  
30  bench "G2 Jacobian add", 100000:
31    g21 = g21 + g22
32  
33  bench "G2 toAffine", 100000:
34    a21 = g21.toAffine().get()
35  
36  bench "G1 Jacobian mul", 10000:
37    g11 = g11 * fr
38  
39  bench "G2 Jacobian mul", 1000:
40    g21 = g21 * fr
41  
42  var acc: FQ12
43  
44  bench "Pairing", 1000:
45    acc = pairing(g11, g21)