foundation-0.0.22: benchs/LargeWords.hs
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE RebindableSyntax #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeApplications #-}
module LargeWords where
import Foundation
import Basement.From
import Basement.Types.Word128 (Word128)
import Basement.Types.Word256 (Word256)
import qualified Basement.Types.Word128 as Word128
import qualified Basement.Types.Word256 as Word256
import BenchUtil.Common
largeNumber64 :: Natural
largeNumber64 = 0xffffffffffffffff
largeNumber128 :: Natural
largeNumber128 = 0xfffffffffffffffffffffffffffffff
largeNumber256 :: Natural
largeNumber256 = 0xffffffffffffffffffffffffffffffffffffffffffffffff
benchLargeWords =
[ bgroup "Addition"
[ bgroup "Word128"
[ bench "Word128" $ whnf (+ 1240) (Word128.fromNatural largeNumber128)
, bench "Natural" $ whnf (+ 1240) largeNumber128
]
, bgroup "Word256"
[ bench "Word256" $ whnf (+ 200) (Word256.fromNatural largeNumber256)
, bench "Natural" $ whnf (+ 200) largeNumber256
]
]
, bgroup "Multiplication"
[ bgroup "Word128"
[ bench "Word128" $ whnf (* 1240) (Word128.fromNatural largeNumber128)
, bench "Natural" $ whnf (* 1240) largeNumber128
]
, bgroup "Word256"
[ bench "Word256" $ whnf (* 200) (Word256.fromNatural largeNumber256)
, bench "Natural" $ whnf (* 200) largeNumber256
]
]
]