packages feed

pairing-0.5.0: benchmarks/PairingBenchmarks.hs

module PairingBenchmarks where

import Protolude

import Control.Monad.Random
import Criterion.Main
import GaloisField
import Pairing.Curve
import Pairing.Pairing

benchmarkPairing :: Benchmark
benchmarkPairing = bgroup "Pairing"
  [ bgroup "Frobenius in Fq12"
    [ bench "naive"
      $ whnf (frobeniusNaive 1) testFq12
    , bench "fast"
      $ whnf (fq12Frobenius 1) testFq12
    ]
  , bgroup "Final exponentiation"
    [ bench "naive"
      $ whnf finalExponentiationNaive testFq12
    , bench "fast"
      $ whnf finalExponentiation testFq12
    ]
  , bgroup "Pairing"
    [ bench "without final exponentiation"
      $ whnf (uncurry atePairing) (gG1, gG2)
    , bench "with final exponentiation"
      $ whnf (uncurry reducedPairing) (gG1, gG2)
    ]
  ]

testFq12 :: Fq12
testFq12 = evalRand rnd (mkStdGen 0)