packages feed

number-length-0.1.0.0: test/benchmark.hs

{-# LANGUAGE NoImplicitPrelude #-}
-- |
-- Module:       Main
-- Description:  Benchmarks for low-level functions.
-- Copyright:    (c) 2016, Peter Trško
-- License:      BSD3
--
-- Stability:    stable
-- Portability:  NoImplicitPrelude
--
-- Benchmarks for low-level functions.
module Main (main)
  where

import Prelude (Bounded(minBound, maxBound))

import Data.Function (($))
import System.IO (IO)

import Criterion.Main (bench, defaultMain, nf)

import Data.NumberLength.Int
    ( lengthInt
    , lengthInt16
    , lengthInt16hex
    , lengthInt32
    , lengthInt32hex
    , lengthInt64
    , lengthInt64hex
    , lengthInt8
    , lengthInt8hex
    , lengthIntHex
    )
import Data.NumberLength.Word
    ( lengthWord
    , lengthWord16
    , lengthWord16hex
    , lengthWord32
    , lengthWord32hex
    , lengthWord64
    , lengthWord64hex
    , lengthWord8
    , lengthWord8hex
    , lengthWordHex
    )


main :: IO ()
main = defaultMain
    [ bench "lengthInt minBound" $ nf lengthInt minBound
    , bench "lengthInt 0"        $ nf lengthInt 0
    , bench "lengthInt maxBound" $ nf lengthInt maxBound

    , bench "lengthInt8 minBound" $ nf lengthInt8 minBound
    , bench "lengthInt8 0"        $ nf lengthInt8 0
    , bench "lengthInt8 maxBound" $ nf lengthInt8 maxBound

    , bench "lengthInt16 minBound" $ nf lengthInt16 minBound
    , bench "lengthInt16 0"        $ nf lengthInt16 0
    , bench "lengthInt16 maxBound" $ nf lengthInt16 maxBound

    , bench "lengthInt32 minBound" $ nf lengthInt32 minBound
    , bench "lengthInt32 0"        $ nf lengthInt32 0
    , bench "lengthInt32 maxBound" $ nf lengthInt32 maxBound

    , bench "lengthInt64 minBound" $ nf lengthInt64 minBound
    , bench "lengthInt64 0"        $ nf lengthInt64 0
    , bench "lengthInt64 maxBound" $ nf lengthInt64 maxBound

    , bench "lengthIntHex minBound" $ nf lengthIntHex minBound
    , bench "lengthIntHex 0"        $ nf lengthIntHex 0
    , bench "lengthIntHex maxBound" $ nf lengthIntHex maxBound

    , bench "lengthInt8hex minBound" $ nf lengthInt8hex minBound
    , bench "lengthInt8hex 0"        $ nf lengthInt8hex 0
    , bench "lengthInt8hex maxBound" $ nf lengthInt8hex maxBound

    , bench "lengthInt16hex minBound" $ nf lengthInt16hex minBound
    , bench "lengthInt16hex 0"        $ nf lengthInt16hex 0
    , bench "lengthInt16hex maxBound" $ nf lengthInt16hex maxBound

    , bench "lengthInt32hex minBound" $ nf lengthInt32hex minBound
    , bench "lengthInt32hex 0"        $ nf lengthInt32hex 0
    , bench "lengthInt32hex maxBound" $ nf lengthInt32hex maxBound

    , bench "lengthInt64hex minBound" $ nf lengthInt64hex minBound
    , bench "lengthInt64hex 0"        $ nf lengthInt64hex 0
    , bench "lengthInt64hex maxBound" $ nf lengthInt64hex maxBound


    , bench "lengthWord 0"        $ nf lengthWord 0
    , bench "lengthWord maxBound" $ nf lengthWord maxBound

    , bench "lengthWord8 0"        $ nf lengthWord8 0
    , bench "lengthWord8 maxBound" $ nf lengthWord8 maxBound

    , bench "lengthWord16 0"        $ nf lengthWord16 0
    , bench "lengthWord16 maxBound" $ nf lengthWord16 maxBound

    , bench "lengthWord32 0"        $ nf lengthWord32 0
    , bench "lengthWord32 maxBound" $ nf lengthWord32 maxBound

    , bench "lengthWord64 0"        $ nf lengthWord64 0
    , bench "lengthWord64 maxBound" $ nf lengthWord64 maxBound

    , bench "lengthWordHex 0"        $ nf lengthWordHex 0
    , bench "lengthWordHex maxBound" $ nf lengthWordHex maxBound

    , bench "lengthWord8hex 0"        $ nf lengthWord8hex 0
    , bench "lengthWord8hex maxBound" $ nf lengthWord8hex maxBound

    , bench "lengthWord16hex 0"        $ nf lengthWord16hex 0
    , bench "lengthWord16hex maxBound" $ nf lengthWord16hex maxBound

    , bench "lengthWord32hex 0"        $ nf lengthWord32hex 0
    , bench "lengthWord32hex maxBound" $ nf lengthWord32hex maxBound

    , bench "lengthWord64hex 0"        $ nf lengthWord64hex 0
    , bench "lengthWord64hex maxBound" $ nf lengthWord64hex maxBound
    ]