packages feed

gl-block-1.1: bench/Bench.hs

{-# LANGUAGE ImportQualifiedPost #-}

import Test.Tasty.Bench (Benchmark, bcompare, bench, bgroup, defaultMain, nf)

import Bench.Struct
import Data.Vector.Storable qualified as Storable

main :: IO ()
main =
  defaultMain
    [ bgroup
        "struct"
        [ sizes "10" 10
        , sizes "1000" 1000
        , sizes "1000000" 1000000
        ]
    ]

sizes :: String -> Int -> Benchmark
sizes name n =
  bgroup
    name
    [ bench "manual" $
        nf (`Storable.replicate` structManual) n
    , vsManual "packed" $
        nf (`Storable.replicate` structPacked) n
    , vsManual "std140" $
        nf (`Storable.replicate` struct140) n
    , vsManual "std430" $
        nf (`Storable.replicate` struct430) n
    ]
  where
    vsManual label =
      bcompare ("$NF == \"manual\" && $(NF-1) == \"" <> name <> "\"")
        . bench label