From d9758ea799d74c2dff645be0c356128b6422f2e2 Mon Sep 17 00:00:00 2001 From: Bodigrim Date: Sat, 23 Jul 2016 11:57:17 +0200 Subject: [PATCH] Benchmarks for Crypto.Number.F2m --- benchs/Number/F2m.hs | 53 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 benchs/Number/F2m.hs diff --git a/benchs/Number/F2m.hs b/benchs/Number/F2m.hs new file mode 100644 index 0000000..408a192 --- /dev/null +++ b/benchs/Number/F2m.hs @@ -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 + ]