Benchmarks for Crypto.Number.F2m
This commit is contained in:
parent
8e0d34ff4d
commit
d9758ea799
53
benchs/Number/F2m.hs
Normal file
53
benchs/Number/F2m.hs
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
{-# LANGUAGE PackageImports #-}
|
||||||
|
|
||||||
|
module Main where
|
||||||
|
|
||||||
|
import Criterion.Main
|
||||||
|
import System.Random
|
||||||
|
|
||||||
|
import "cryptonite" Crypto.Number.Basic (log2)
|
||||||
|
import "cryptonite" Crypto.Number.F2m
|
||||||
|
|
||||||
|
genInteger :: Int -> Int -> Integer
|
||||||
|
genInteger salt bits
|
||||||
|
= head
|
||||||
|
. dropWhile ((< bits) . log2)
|
||||||
|
. scanl (\a r -> a * 2^31 + abs r) 0
|
||||||
|
. randoms
|
||||||
|
. mkStdGen
|
||||||
|
$ salt + bits
|
||||||
|
|
||||||
|
benchMod :: Int -> Benchmark
|
||||||
|
benchMod bits = bench (show bits) $ nf (modF2m m) a
|
||||||
|
where
|
||||||
|
m = genInteger 0 bits
|
||||||
|
a = genInteger 1 (2 * bits)
|
||||||
|
|
||||||
|
benchMul :: Int -> Benchmark
|
||||||
|
benchMul bits = bench (show bits) $ nf (mulF2m m a) b
|
||||||
|
where
|
||||||
|
m = genInteger 0 bits
|
||||||
|
a = genInteger 1 bits
|
||||||
|
b = genInteger 2 bits
|
||||||
|
|
||||||
|
benchSquare :: Int -> Benchmark
|
||||||
|
benchSquare bits = bench (show bits) $ nf (squareF2m m) a
|
||||||
|
where
|
||||||
|
m = genInteger 0 bits
|
||||||
|
a = genInteger 1 bits
|
||||||
|
|
||||||
|
benchInv :: Int -> Benchmark
|
||||||
|
benchInv bits = bench (show bits) $ nf (invF2m m) a
|
||||||
|
where
|
||||||
|
m = genInteger 0 bits
|
||||||
|
a = genInteger 1 bits
|
||||||
|
|
||||||
|
bitsList :: [Int]
|
||||||
|
bitsList = [64, 128, 256, 512, 1024, 2048]
|
||||||
|
|
||||||
|
main = defaultMain
|
||||||
|
[ bgroup "modF2m" $ map benchMod bitsList
|
||||||
|
, bgroup "mulF2m" $ map benchMul bitsList
|
||||||
|
, bgroup "squareF2m" $ map benchSquare bitsList
|
||||||
|
, bgroup "invF2m" $ map benchInv bitsList
|
||||||
|
]
|
||||||
Loading…
Reference in New Issue
Block a user