galois-fft-0.1.0: bench/Poly.hs
{-# LANGUAGE NoImplicitPrelude #-}
module Poly (benchmarks) where
import Protolude
import Criterion.Main
import Data.Curve.Weierstrass.BN254 (Fr)
import Data.Pairing.BN254 (getRootOfUnity)
import FFT
k :: Int
k = 5
polySize :: Int
polySize = 2^k
leftCoeffs, rightCoeffs :: [Fr]
leftCoeffs = map fromIntegral [1..polySize]
rightCoeffs = map fromIntegral (reverse [1..polySize])
points :: [(Fr,Fr)]
points
= map (\i -> (getRootOfUnity k ^ i, fromIntegral i))
[1..polySize]
fftPoints :: [Fr]
fftPoints = map snd points
benchmarks :: [Benchmark]
benchmarks
= [ bench "FFT-based multiplication"
$ nf (uncurry $ fftMult getRootOfUnity)
(leftCoeffs, rightCoeffs)
, bench "FFT-based interpolation"
$ nf (interpolate getRootOfUnity) fftPoints
]