1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
{-# 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
]
]
]
|