Skip to content

Instantly share code, notes, and snippets.

@ivanbrennan
Last active July 29, 2019 13:51
Show Gist options
  • Save ivanbrennan/9f55ee766e4fc1102768582f9b8c6b4a to your computer and use it in GitHub Desktop.
Save ivanbrennan/9f55ee766e4fc1102768582f9b8c6b4a to your computer and use it in GitHub Desktop.
import Criterion.Main
import Data.Foldable (foldl')
import Data.IntMap.Strict (IntMap, (!))
import Data.List (unfoldr)
import qualified Data.IntMap.Strict as IntMap
{-
resultFile=bench-$(date +%s).html
ghc -O -package-env - --make ColumnBench.hs -no-keep-hi-files -no-keep-o-files && ./ColumnBench --output $resultFile
xopen $resultFile
-}
type Column = (String, Padding)
type Padding = String
type Column' = (String, Padding')
type Padding' = Int
main = defaultMain
[ bgroup "500" [ bench "semver grid" $ nf (grid 80) ["0.0.0", "0.0.0", "0.0.0", "0.0.0", "0.0.0", "0.0.1", "0.0.1", "0.0.1", "0.0.1", "0.0.1", "0.0.2", "0.0.2", "0.0.2", "0.0.2", "0.0.2", "0.0.3", "0.0.3", "0.0.3", "0.0.3", "0.0.3", "0.0.4", "0.0.4", "0.0.4", "0.0.4", "0.0.4", "0.0.5", "0.0.5", "0.0.5", "0.0.5", "0.0.5", "0.0.6", "0.0.6", "0.0.6", "0.0.6", "0.0.6", "0.0.7", "0.0.7", "0.0.7", "0.0.7", "0.0.7", "0.0.8", "0.0.8", "0.0.8", "0.0.8", "0.0.8", "0.0.9", "0.0.9", "0.0.9", "0.0.9", "0.0.9", "0.1.0", "0.1.0", "0.1.0", "0.1.0", "0.1.0", "0.1.1", "0.1.1", "0.1.1", "0.1.1", "0.1.1", "0.1.2", "0.1.2", "0.1.2", "0.1.2", "0.1.2", "0.1.3", "0.1.3", "0.1.3", "0.1.3", "0.1.3", "0.1.4", "0.1.4", "0.1.4", "0.1.4", "0.1.4", "0.1.5", "0.1.5", "0.1.5", "0.1.5", "0.1.5", "0.1.6", "0.1.6", "0.1.6", "0.1.6", "0.1.6", "0.1.7", "0.1.7", "0.1.7", "0.1.7", "0.1.7", "0.1.8", "0.1.8", "0.1.8", "0.1.8", "0.1.8", "0.1.9", "0.1.9", "0.1.9", "0.1.9", "0.1.9", "0.2.0", "0.2.0", "0.2.0", "0.2.0", "0.2.0", "0.2.1", "0.2.1", "0.2.1", "0.2.1", "0.2.1", "0.2.2", "0.2.2", "0.2.2", "0.2.2", "0.2.2", "0.2.3", "0.2.3", "0.2.3", "0.2.3", "0.2.3", "0.2.4", "0.2.4", "0.2.4", "0.2.4", "0.2.4", "0.2.5", "0.2.5", "0.2.5", "0.2.5", "0.2.5", "0.2.6", "0.2.6", "0.2.6", "0.2.6", "0.2.6", "0.2.7", "0.2.7", "0.2.7", "0.2.7", "0.2.7", "0.2.8", "0.2.8", "0.2.8", "0.2.8", "0.2.8", "0.2.9", "0.2.9", "0.2.9", "0.2.9", "0.2.9", "0.3.0", "0.3.0", "0.3.0", "0.3.0", "0.3.0", "0.3.1", "0.3.1", "0.3.1", "0.3.1", "0.3.1", "0.3.2", "0.3.2", "0.3.2", "0.3.2", "0.3.2", "0.3.3", "0.3.3", "0.3.3", "0.3.3", "0.3.3", "0.3.4", "0.3.4", "0.3.4", "0.3.4", "0.3.4", "0.3.5", "0.3.5", "0.3.5", "0.3.5", "0.3.5", "0.3.6", "0.3.6", "0.3.6", "0.3.6", "0.3.6", "0.3.7", "0.3.7", "0.3.7", "0.3.7", "0.3.7", "0.3.8", "0.3.8", "0.3.8", "0.3.8", "0.3.8", "0.3.9", "0.3.9", "0.3.9", "0.3.9", "0.3.9", "0.4.0", "0.4.0", "0.4.0", "0.4.0", "0.4.0", "0.4.1", "0.4.1", "0.4.1", "0.4.1", "0.4.1", "0.4.2", "0.4.2", "0.4.2", "0.4.2", "0.4.2", "0.4.3", "0.4.3", "0.4.3", "0.4.3", "0.4.3", "0.4.4", "0.4.4", "0.4.4", "0.4.4", "0.4.4", "0.4.5", "0.4.5", "0.4.5", "0.4.5", "0.4.5", "0.4.6", "0.4.6", "0.4.6", "0.4.6", "0.4.6", "0.4.7", "0.4.7", "0.4.7", "0.4.7", "0.4.7", "0.4.8", "0.4.8", "0.4.8", "0.4.8", "0.4.8", "0.4.9", "0.4.9", "0.4.9", "0.4.9", "0.4.9", "0.5.0", "0.5.0", "0.5.0", "0.5.0", "0.5.0", "0.5.1", "0.5.1", "0.5.1", "0.5.1", "0.5.1", "0.5.2", "0.5.2", "0.5.2", "0.5.2", "0.5.2", "0.5.3", "0.5.3", "0.5.3", "0.5.3", "0.5.3", "0.5.4", "0.5.4", "0.5.4", "0.5.4", "0.5.4", "0.5.5", "0.5.5", "0.5.5", "0.5.5", "0.5.5", "0.5.6", "0.5.6", "0.5.6", "0.5.6", "0.5.6", "0.5.7", "0.5.7", "0.5.7", "0.5.7", "0.5.7", "0.5.8", "0.5.8", "0.5.8", "0.5.8", "0.5.8", "0.5.9", "0.5.9", "0.5.9", "0.5.9", "0.5.9", "0.6.0", "0.6.0", "0.6.0", "0.6.0", "0.6.0", "0.6.1", "0.6.1", "0.6.1", "0.6.1", "0.6.1", "0.6.2", "0.6.2", "0.6.2", "0.6.2", "0.6.2", "0.6.3", "0.6.3", "0.6.3", "0.6.3", "0.6.3", "0.6.4", "0.6.4", "0.6.4", "0.6.4", "0.6.4", "0.6.5", "0.6.5", "0.6.5", "0.6.5", "0.6.5", "0.6.6", "0.6.6", "0.6.6", "0.6.6", "0.6.6", "0.6.7", "0.6.7", "0.6.7", "0.6.7", "0.6.7", "0.6.8", "0.6.8", "0.6.8", "0.6.8", "0.6.8", "0.6.9", "0.6.9", "0.6.9", "0.6.9", "0.6.9", "0.7.0", "0.7.0", "0.7.0", "0.7.0", "0.7.0", "0.7.1", "0.7.1", "0.7.1", "0.7.1", "0.7.1", "0.7.2", "0.7.2", "0.7.2", "0.7.2", "0.7.2", "0.7.3", "0.7.3", "0.7.3", "0.7.3", "0.7.3", "0.7.4", "0.7.4", "0.7.4", "0.7.4", "0.7.4", "0.7.5", "0.7.5", "0.7.5", "0.7.5", "0.7.5", "0.7.6", "0.7.6", "0.7.6", "0.7.6", "0.7.6", "0.7.7", "0.7.7", "0.7.7", "0.7.7", "0.7.7", "0.7.8", "0.7.8", "0.7.8", "0.7.8", "0.7.8", "0.7.9", "0.7.9", "0.7.9", "0.7.9", "0.7.9", "0.8.0", "0.8.0", "0.8.0", "0.8.0", "0.8.0", "0.8.1", "0.8.1", "0.8.1", "0.8.1", "0.8.1", "0.8.2", "0.8.2", "0.8.2", "0.8.2", "0.8.2", "0.8.3", "0.8.3", "0.8.3", "0.8.3", "0.8.3", "0.8.4", "0.8.4", "0.8.4", "0.8.4", "0.8.4", "0.8.5", "0.8.5", "0.8.5", "0.8.5", "0.8.5", "0.8.6", "0.8.6", "0.8.6", "0.8.6", "0.8.6", "0.8.7", "0.8.7", "0.8.7", "0.8.7", "0.8.7", "0.8.8", "0.8.8", "0.8.8", "0.8.8", "0.8.8", "0.8.9", "0.8.9", "0.8.9", "0.8.9", "0.8.9", "0.9.0", "0.9.0", "0.9.0", "0.9.0", "0.9.0", "0.9.1", "0.9.1", "0.9.1", "0.9.1", "0.9.1", "0.9.2", "0.9.2", "0.9.2", "0.9.2", "0.9.2", "0.9.3", "0.9.3", "0.9.3", "0.9.3", "0.9.3", "0.9.4", "0.9.4", "0.9.4", "0.9.4", "0.9.4", "0.9.5", "0.9.5", "0.9.5", "0.9.5", "0.9.5", "0.9.6", "0.9.6", "0.9.6", "0.9.6", "0.9.6", "0.9.7", "0.9.7", "0.9.7", "0.9.7", "0.9.7", "0.9.8", "0.9.8", "0.9.8", "0.9.8", "0.9.8", "0.9.9", "0.9.9", "0.9.9", "0.9.9", "0.9.9"]
, bench "semver grid'" $ nf (grid' 80) ["0.0.0", "0.0.0", "0.0.0", "0.0.0", "0.0.0", "0.0.1", "0.0.1", "0.0.1", "0.0.1", "0.0.1", "0.0.2", "0.0.2", "0.0.2", "0.0.2", "0.0.2", "0.0.3", "0.0.3", "0.0.3", "0.0.3", "0.0.3", "0.0.4", "0.0.4", "0.0.4", "0.0.4", "0.0.4", "0.0.5", "0.0.5", "0.0.5", "0.0.5", "0.0.5", "0.0.6", "0.0.6", "0.0.6", "0.0.6", "0.0.6", "0.0.7", "0.0.7", "0.0.7", "0.0.7", "0.0.7", "0.0.8", "0.0.8", "0.0.8", "0.0.8", "0.0.8", "0.0.9", "0.0.9", "0.0.9", "0.0.9", "0.0.9", "0.1.0", "0.1.0", "0.1.0", "0.1.0", "0.1.0", "0.1.1", "0.1.1", "0.1.1", "0.1.1", "0.1.1", "0.1.2", "0.1.2", "0.1.2", "0.1.2", "0.1.2", "0.1.3", "0.1.3", "0.1.3", "0.1.3", "0.1.3", "0.1.4", "0.1.4", "0.1.4", "0.1.4", "0.1.4", "0.1.5", "0.1.5", "0.1.5", "0.1.5", "0.1.5", "0.1.6", "0.1.6", "0.1.6", "0.1.6", "0.1.6", "0.1.7", "0.1.7", "0.1.7", "0.1.7", "0.1.7", "0.1.8", "0.1.8", "0.1.8", "0.1.8", "0.1.8", "0.1.9", "0.1.9", "0.1.9", "0.1.9", "0.1.9", "0.2.0", "0.2.0", "0.2.0", "0.2.0", "0.2.0", "0.2.1", "0.2.1", "0.2.1", "0.2.1", "0.2.1", "0.2.2", "0.2.2", "0.2.2", "0.2.2", "0.2.2", "0.2.3", "0.2.3", "0.2.3", "0.2.3", "0.2.3", "0.2.4", "0.2.4", "0.2.4", "0.2.4", "0.2.4", "0.2.5", "0.2.5", "0.2.5", "0.2.5", "0.2.5", "0.2.6", "0.2.6", "0.2.6", "0.2.6", "0.2.6", "0.2.7", "0.2.7", "0.2.7", "0.2.7", "0.2.7", "0.2.8", "0.2.8", "0.2.8", "0.2.8", "0.2.8", "0.2.9", "0.2.9", "0.2.9", "0.2.9", "0.2.9", "0.3.0", "0.3.0", "0.3.0", "0.3.0", "0.3.0", "0.3.1", "0.3.1", "0.3.1", "0.3.1", "0.3.1", "0.3.2", "0.3.2", "0.3.2", "0.3.2", "0.3.2", "0.3.3", "0.3.3", "0.3.3", "0.3.3", "0.3.3", "0.3.4", "0.3.4", "0.3.4", "0.3.4", "0.3.4", "0.3.5", "0.3.5", "0.3.5", "0.3.5", "0.3.5", "0.3.6", "0.3.6", "0.3.6", "0.3.6", "0.3.6", "0.3.7", "0.3.7", "0.3.7", "0.3.7", "0.3.7", "0.3.8", "0.3.8", "0.3.8", "0.3.8", "0.3.8", "0.3.9", "0.3.9", "0.3.9", "0.3.9", "0.3.9", "0.4.0", "0.4.0", "0.4.0", "0.4.0", "0.4.0", "0.4.1", "0.4.1", "0.4.1", "0.4.1", "0.4.1", "0.4.2", "0.4.2", "0.4.2", "0.4.2", "0.4.2", "0.4.3", "0.4.3", "0.4.3", "0.4.3", "0.4.3", "0.4.4", "0.4.4", "0.4.4", "0.4.4", "0.4.4", "0.4.5", "0.4.5", "0.4.5", "0.4.5", "0.4.5", "0.4.6", "0.4.6", "0.4.6", "0.4.6", "0.4.6", "0.4.7", "0.4.7", "0.4.7", "0.4.7", "0.4.7", "0.4.8", "0.4.8", "0.4.8", "0.4.8", "0.4.8", "0.4.9", "0.4.9", "0.4.9", "0.4.9", "0.4.9", "0.5.0", "0.5.0", "0.5.0", "0.5.0", "0.5.0", "0.5.1", "0.5.1", "0.5.1", "0.5.1", "0.5.1", "0.5.2", "0.5.2", "0.5.2", "0.5.2", "0.5.2", "0.5.3", "0.5.3", "0.5.3", "0.5.3", "0.5.3", "0.5.4", "0.5.4", "0.5.4", "0.5.4", "0.5.4", "0.5.5", "0.5.5", "0.5.5", "0.5.5", "0.5.5", "0.5.6", "0.5.6", "0.5.6", "0.5.6", "0.5.6", "0.5.7", "0.5.7", "0.5.7", "0.5.7", "0.5.7", "0.5.8", "0.5.8", "0.5.8", "0.5.8", "0.5.8", "0.5.9", "0.5.9", "0.5.9", "0.5.9", "0.5.9", "0.6.0", "0.6.0", "0.6.0", "0.6.0", "0.6.0", "0.6.1", "0.6.1", "0.6.1", "0.6.1", "0.6.1", "0.6.2", "0.6.2", "0.6.2", "0.6.2", "0.6.2", "0.6.3", "0.6.3", "0.6.3", "0.6.3", "0.6.3", "0.6.4", "0.6.4", "0.6.4", "0.6.4", "0.6.4", "0.6.5", "0.6.5", "0.6.5", "0.6.5", "0.6.5", "0.6.6", "0.6.6", "0.6.6", "0.6.6", "0.6.6", "0.6.7", "0.6.7", "0.6.7", "0.6.7", "0.6.7", "0.6.8", "0.6.8", "0.6.8", "0.6.8", "0.6.8", "0.6.9", "0.6.9", "0.6.9", "0.6.9", "0.6.9", "0.7.0", "0.7.0", "0.7.0", "0.7.0", "0.7.0", "0.7.1", "0.7.1", "0.7.1", "0.7.1", "0.7.1", "0.7.2", "0.7.2", "0.7.2", "0.7.2", "0.7.2", "0.7.3", "0.7.3", "0.7.3", "0.7.3", "0.7.3", "0.7.4", "0.7.4", "0.7.4", "0.7.4", "0.7.4", "0.7.5", "0.7.5", "0.7.5", "0.7.5", "0.7.5", "0.7.6", "0.7.6", "0.7.6", "0.7.6", "0.7.6", "0.7.7", "0.7.7", "0.7.7", "0.7.7", "0.7.7", "0.7.8", "0.7.8", "0.7.8", "0.7.8", "0.7.8", "0.7.9", "0.7.9", "0.7.9", "0.7.9", "0.7.9", "0.8.0", "0.8.0", "0.8.0", "0.8.0", "0.8.0", "0.8.1", "0.8.1", "0.8.1", "0.8.1", "0.8.1", "0.8.2", "0.8.2", "0.8.2", "0.8.2", "0.8.2", "0.8.3", "0.8.3", "0.8.3", "0.8.3", "0.8.3", "0.8.4", "0.8.4", "0.8.4", "0.8.4", "0.8.4", "0.8.5", "0.8.5", "0.8.5", "0.8.5", "0.8.5", "0.8.6", "0.8.6", "0.8.6", "0.8.6", "0.8.6", "0.8.7", "0.8.7", "0.8.7", "0.8.7", "0.8.7", "0.8.8", "0.8.8", "0.8.8", "0.8.8", "0.8.8", "0.8.9", "0.8.9", "0.8.9", "0.8.9", "0.8.9", "0.9.0", "0.9.0", "0.9.0", "0.9.0", "0.9.0", "0.9.1", "0.9.1", "0.9.1", "0.9.1", "0.9.1", "0.9.2", "0.9.2", "0.9.2", "0.9.2", "0.9.2", "0.9.3", "0.9.3", "0.9.3", "0.9.3", "0.9.3", "0.9.4", "0.9.4", "0.9.4", "0.9.4", "0.9.4", "0.9.5", "0.9.5", "0.9.5", "0.9.5", "0.9.5", "0.9.6", "0.9.6", "0.9.6", "0.9.6", "0.9.6", "0.9.7", "0.9.7", "0.9.7", "0.9.7", "0.9.7", "0.9.8", "0.9.8", "0.9.8", "0.9.8", "0.9.8", "0.9.9", "0.9.9", "0.9.9", "0.9.9", "0.9.9"]
, bench "pvp grid" $ nf (grid 80) ["0.0.0.0", "0.0.0.0", "0.0.0.0", "0.0.0.0", "0.0.0.0", "0.0.0.1", "0.0.0.1", "0.0.0.1", "0.0.0.1", "0.0.0.1", "0.0.0.2", "0.0.0.2", "0.0.0.2", "0.0.0.2", "0.0.0.2", "0.0.0.3", "0.0.0.3", "0.0.0.3", "0.0.0.3", "0.0.0.3", "0.0.0.4", "0.0.0.4", "0.0.0.4", "0.0.0.4", "0.0.0.4", "0.0.0.5", "0.0.0.5", "0.0.0.5", "0.0.0.5", "0.0.0.5", "0.0.0.6", "0.0.0.6", "0.0.0.6", "0.0.0.6", "0.0.0.6", "0.0.0.7", "0.0.0.7", "0.0.0.7", "0.0.0.7", "0.0.0.7", "0.0.0.8", "0.0.0.8", "0.0.0.8", "0.0.0.8", "0.0.0.8", "0.0.0.9", "0.0.0.9", "0.0.0.9", "0.0.0.9", "0.0.0.9", "0.0.1.0", "0.0.1.0", "0.0.1.0", "0.0.1.0", "0.0.1.0", "0.0.1.1", "0.0.1.1", "0.0.1.1", "0.0.1.1", "0.0.1.1", "0.0.1.2", "0.0.1.2", "0.0.1.2", "0.0.1.2", "0.0.1.2", "0.0.1.3", "0.0.1.3", "0.0.1.3", "0.0.1.3", "0.0.1.3", "0.0.1.4", "0.0.1.4", "0.0.1.4", "0.0.1.4", "0.0.1.4", "0.0.1.5", "0.0.1.5", "0.0.1.5", "0.0.1.5", "0.0.1.5", "0.0.1.6", "0.0.1.6", "0.0.1.6", "0.0.1.6", "0.0.1.6", "0.0.1.7", "0.0.1.7", "0.0.1.7", "0.0.1.7", "0.0.1.7", "0.0.1.8", "0.0.1.8", "0.0.1.8", "0.0.1.8", "0.0.1.8", "0.0.1.9", "0.0.1.9", "0.0.1.9", "0.0.1.9", "0.0.1.9", "0.0.2.0", "0.0.2.0", "0.0.2.0", "0.0.2.0", "0.0.2.0", "0.0.2.1", "0.0.2.1", "0.0.2.1", "0.0.2.1", "0.0.2.1", "0.0.2.2", "0.0.2.2", "0.0.2.2", "0.0.2.2", "0.0.2.2", "0.0.2.3", "0.0.2.3", "0.0.2.3", "0.0.2.3", "0.0.2.3", "0.0.2.4", "0.0.2.4", "0.0.2.4", "0.0.2.4", "0.0.2.4", "0.0.2.5", "0.0.2.5", "0.0.2.5", "0.0.2.5", "0.0.2.5", "0.0.2.6", "0.0.2.6", "0.0.2.6", "0.0.2.6", "0.0.2.6", "0.0.2.7", "0.0.2.7", "0.0.2.7", "0.0.2.7", "0.0.2.7", "0.0.2.8", "0.0.2.8", "0.0.2.8", "0.0.2.8", "0.0.2.8", "0.0.2.9", "0.0.2.9", "0.0.2.9", "0.0.2.9", "0.0.2.9", "0.0.3.0", "0.0.3.0", "0.0.3.0", "0.0.3.0", "0.0.3.0", "0.0.3.1", "0.0.3.1", "0.0.3.1", "0.0.3.1", "0.0.3.1", "0.0.3.2", "0.0.3.2", "0.0.3.2", "0.0.3.2", "0.0.3.2", "0.0.3.3", "0.0.3.3", "0.0.3.3", "0.0.3.3", "0.0.3.3", "0.0.3.4", "0.0.3.4", "0.0.3.4", "0.0.3.4", "0.0.3.4", "0.0.3.5", "0.0.3.5", "0.0.3.5", "0.0.3.5", "0.0.3.5", "0.0.3.6", "0.0.3.6", "0.0.3.6", "0.0.3.6", "0.0.3.6", "0.0.3.7", "0.0.3.7", "0.0.3.7", "0.0.3.7", "0.0.3.7", "0.0.3.8", "0.0.3.8", "0.0.3.8", "0.0.3.8", "0.0.3.8", "0.0.3.9", "0.0.3.9", "0.0.3.9", "0.0.3.9", "0.0.3.9", "0.0.4.0", "0.0.4.0", "0.0.4.0", "0.0.4.0", "0.0.4.0", "0.0.4.1", "0.0.4.1", "0.0.4.1", "0.0.4.1", "0.0.4.1", "0.0.4.2", "0.0.4.2", "0.0.4.2", "0.0.4.2", "0.0.4.2", "0.0.4.3", "0.0.4.3", "0.0.4.3", "0.0.4.3", "0.0.4.3", "0.0.4.4", "0.0.4.4", "0.0.4.4", "0.0.4.4", "0.0.4.4", "0.0.4.5", "0.0.4.5", "0.0.4.5", "0.0.4.5", "0.0.4.5", "0.0.4.6", "0.0.4.6", "0.0.4.6", "0.0.4.6", "0.0.4.6", "0.0.4.7", "0.0.4.7", "0.0.4.7", "0.0.4.7", "0.0.4.7", "0.0.4.8", "0.0.4.8", "0.0.4.8", "0.0.4.8", "0.0.4.8", "0.0.4.9", "0.0.4.9", "0.0.4.9", "0.0.4.9", "0.0.4.9", "0.0.5.0", "0.0.5.0", "0.0.5.0", "0.0.5.0", "0.0.5.0", "0.0.5.1", "0.0.5.1", "0.0.5.1", "0.0.5.1", "0.0.5.1", "0.0.5.2", "0.0.5.2", "0.0.5.2", "0.0.5.2", "0.0.5.2", "0.0.5.3", "0.0.5.3", "0.0.5.3", "0.0.5.3", "0.0.5.3", "0.0.5.4", "0.0.5.4", "0.0.5.4", "0.0.5.4", "0.0.5.4", "0.0.5.5", "0.0.5.5", "0.0.5.5", "0.0.5.5", "0.0.5.5", "0.0.5.6", "0.0.5.6", "0.0.5.6", "0.0.5.6", "0.0.5.6", "0.0.5.7", "0.0.5.7", "0.0.5.7", "0.0.5.7", "0.0.5.7", "0.0.5.8", "0.0.5.8", "0.0.5.8", "0.0.5.8", "0.0.5.8", "0.0.5.9", "0.0.5.9", "0.0.5.9", "0.0.5.9", "0.0.5.9", "0.0.6.0", "0.0.6.0", "0.0.6.0", "0.0.6.0", "0.0.6.0", "0.0.6.1", "0.0.6.1", "0.0.6.1", "0.0.6.1", "0.0.6.1", "0.0.6.2", "0.0.6.2", "0.0.6.2", "0.0.6.2", "0.0.6.2", "0.0.6.3", "0.0.6.3", "0.0.6.3", "0.0.6.3", "0.0.6.3", "0.0.6.4", "0.0.6.4", "0.0.6.4", "0.0.6.4", "0.0.6.4", "0.0.6.5", "0.0.6.5", "0.0.6.5", "0.0.6.5", "0.0.6.5", "0.0.6.6", "0.0.6.6", "0.0.6.6", "0.0.6.6", "0.0.6.6", "0.0.6.7", "0.0.6.7", "0.0.6.7", "0.0.6.7", "0.0.6.7", "0.0.6.8", "0.0.6.8", "0.0.6.8", "0.0.6.8", "0.0.6.8", "0.0.6.9", "0.0.6.9", "0.0.6.9", "0.0.6.9", "0.0.6.9", "0.0.7.0", "0.0.7.0", "0.0.7.0", "0.0.7.0", "0.0.7.0", "0.0.7.1", "0.0.7.1", "0.0.7.1", "0.0.7.1", "0.0.7.1", "0.0.7.2", "0.0.7.2", "0.0.7.2", "0.0.7.2", "0.0.7.2", "0.0.7.3", "0.0.7.3", "0.0.7.3", "0.0.7.3", "0.0.7.3", "0.0.7.4", "0.0.7.4", "0.0.7.4", "0.0.7.4", "0.0.7.4", "0.0.7.5", "0.0.7.5", "0.0.7.5", "0.0.7.5", "0.0.7.5", "0.0.7.6", "0.0.7.6", "0.0.7.6", "0.0.7.6", "0.0.7.6", "0.0.7.7", "0.0.7.7", "0.0.7.7", "0.0.7.7", "0.0.7.7", "0.0.7.8", "0.0.7.8", "0.0.7.8", "0.0.7.8", "0.0.7.8", "0.0.7.9", "0.0.7.9", "0.0.7.9", "0.0.7.9", "0.0.7.9", "0.0.8.0", "0.0.8.0", "0.0.8.0", "0.0.8.0", "0.0.8.0", "0.0.8.1", "0.0.8.1", "0.0.8.1", "0.0.8.1", "0.0.8.1", "0.0.8.2", "0.0.8.2", "0.0.8.2", "0.0.8.2", "0.0.8.2", "0.0.8.3", "0.0.8.3", "0.0.8.3", "0.0.8.3", "0.0.8.3", "0.0.8.4", "0.0.8.4", "0.0.8.4", "0.0.8.4", "0.0.8.4", "0.0.8.5", "0.0.8.5", "0.0.8.5", "0.0.8.5", "0.0.8.5", "0.0.8.6", "0.0.8.6", "0.0.8.6", "0.0.8.6", "0.0.8.6", "0.0.8.7", "0.0.8.7", "0.0.8.7", "0.0.8.7", "0.0.8.7", "0.0.8.8", "0.0.8.8", "0.0.8.8", "0.0.8.8", "0.0.8.8", "0.0.8.9", "0.0.8.9", "0.0.8.9", "0.0.8.9", "0.0.8.9", "0.0.9.0", "0.0.9.0", "0.0.9.0", "0.0.9.0", "0.0.9.0", "0.0.9.1", "0.0.9.1", "0.0.9.1", "0.0.9.1", "0.0.9.1", "0.0.9.2", "0.0.9.2", "0.0.9.2", "0.0.9.2", "0.0.9.2", "0.0.9.3", "0.0.9.3", "0.0.9.3", "0.0.9.3", "0.0.9.3", "0.0.9.4", "0.0.9.4", "0.0.9.4", "0.0.9.4", "0.0.9.4", "0.0.9.5", "0.0.9.5", "0.0.9.5", "0.0.9.5", "0.0.9.5", "0.0.9.6", "0.0.9.6", "0.0.9.6", "0.0.9.6", "0.0.9.6", "0.0.9.7", "0.0.9.7", "0.0.9.7", "0.0.9.7", "0.0.9.7", "0.0.9.8", "0.0.9.8", "0.0.9.8", "0.0.9.8", "0.0.9.8", "0.0.9.9", "0.0.9.9", "0.0.9.9", "0.0.9.9", "0.0.9.9"]
, bench "pvp grid'" $ nf (grid' 80) ["0.0.0.0", "0.0.0.0", "0.0.0.0", "0.0.0.0", "0.0.0.0", "0.0.0.1", "0.0.0.1", "0.0.0.1", "0.0.0.1", "0.0.0.1", "0.0.0.2", "0.0.0.2", "0.0.0.2", "0.0.0.2", "0.0.0.2", "0.0.0.3", "0.0.0.3", "0.0.0.3", "0.0.0.3", "0.0.0.3", "0.0.0.4", "0.0.0.4", "0.0.0.4", "0.0.0.4", "0.0.0.4", "0.0.0.5", "0.0.0.5", "0.0.0.5", "0.0.0.5", "0.0.0.5", "0.0.0.6", "0.0.0.6", "0.0.0.6", "0.0.0.6", "0.0.0.6", "0.0.0.7", "0.0.0.7", "0.0.0.7", "0.0.0.7", "0.0.0.7", "0.0.0.8", "0.0.0.8", "0.0.0.8", "0.0.0.8", "0.0.0.8", "0.0.0.9", "0.0.0.9", "0.0.0.9", "0.0.0.9", "0.0.0.9", "0.0.1.0", "0.0.1.0", "0.0.1.0", "0.0.1.0", "0.0.1.0", "0.0.1.1", "0.0.1.1", "0.0.1.1", "0.0.1.1", "0.0.1.1", "0.0.1.2", "0.0.1.2", "0.0.1.2", "0.0.1.2", "0.0.1.2", "0.0.1.3", "0.0.1.3", "0.0.1.3", "0.0.1.3", "0.0.1.3", "0.0.1.4", "0.0.1.4", "0.0.1.4", "0.0.1.4", "0.0.1.4", "0.0.1.5", "0.0.1.5", "0.0.1.5", "0.0.1.5", "0.0.1.5", "0.0.1.6", "0.0.1.6", "0.0.1.6", "0.0.1.6", "0.0.1.6", "0.0.1.7", "0.0.1.7", "0.0.1.7", "0.0.1.7", "0.0.1.7", "0.0.1.8", "0.0.1.8", "0.0.1.8", "0.0.1.8", "0.0.1.8", "0.0.1.9", "0.0.1.9", "0.0.1.9", "0.0.1.9", "0.0.1.9", "0.0.2.0", "0.0.2.0", "0.0.2.0", "0.0.2.0", "0.0.2.0", "0.0.2.1", "0.0.2.1", "0.0.2.1", "0.0.2.1", "0.0.2.1", "0.0.2.2", "0.0.2.2", "0.0.2.2", "0.0.2.2", "0.0.2.2", "0.0.2.3", "0.0.2.3", "0.0.2.3", "0.0.2.3", "0.0.2.3", "0.0.2.4", "0.0.2.4", "0.0.2.4", "0.0.2.4", "0.0.2.4", "0.0.2.5", "0.0.2.5", "0.0.2.5", "0.0.2.5", "0.0.2.5", "0.0.2.6", "0.0.2.6", "0.0.2.6", "0.0.2.6", "0.0.2.6", "0.0.2.7", "0.0.2.7", "0.0.2.7", "0.0.2.7", "0.0.2.7", "0.0.2.8", "0.0.2.8", "0.0.2.8", "0.0.2.8", "0.0.2.8", "0.0.2.9", "0.0.2.9", "0.0.2.9", "0.0.2.9", "0.0.2.9", "0.0.3.0", "0.0.3.0", "0.0.3.0", "0.0.3.0", "0.0.3.0", "0.0.3.1", "0.0.3.1", "0.0.3.1", "0.0.3.1", "0.0.3.1", "0.0.3.2", "0.0.3.2", "0.0.3.2", "0.0.3.2", "0.0.3.2", "0.0.3.3", "0.0.3.3", "0.0.3.3", "0.0.3.3", "0.0.3.3", "0.0.3.4", "0.0.3.4", "0.0.3.4", "0.0.3.4", "0.0.3.4", "0.0.3.5", "0.0.3.5", "0.0.3.5", "0.0.3.5", "0.0.3.5", "0.0.3.6", "0.0.3.6", "0.0.3.6", "0.0.3.6", "0.0.3.6", "0.0.3.7", "0.0.3.7", "0.0.3.7", "0.0.3.7", "0.0.3.7", "0.0.3.8", "0.0.3.8", "0.0.3.8", "0.0.3.8", "0.0.3.8", "0.0.3.9", "0.0.3.9", "0.0.3.9", "0.0.3.9", "0.0.3.9", "0.0.4.0", "0.0.4.0", "0.0.4.0", "0.0.4.0", "0.0.4.0", "0.0.4.1", "0.0.4.1", "0.0.4.1", "0.0.4.1", "0.0.4.1", "0.0.4.2", "0.0.4.2", "0.0.4.2", "0.0.4.2", "0.0.4.2", "0.0.4.3", "0.0.4.3", "0.0.4.3", "0.0.4.3", "0.0.4.3", "0.0.4.4", "0.0.4.4", "0.0.4.4", "0.0.4.4", "0.0.4.4", "0.0.4.5", "0.0.4.5", "0.0.4.5", "0.0.4.5", "0.0.4.5", "0.0.4.6", "0.0.4.6", "0.0.4.6", "0.0.4.6", "0.0.4.6", "0.0.4.7", "0.0.4.7", "0.0.4.7", "0.0.4.7", "0.0.4.7", "0.0.4.8", "0.0.4.8", "0.0.4.8", "0.0.4.8", "0.0.4.8", "0.0.4.9", "0.0.4.9", "0.0.4.9", "0.0.4.9", "0.0.4.9", "0.0.5.0", "0.0.5.0", "0.0.5.0", "0.0.5.0", "0.0.5.0", "0.0.5.1", "0.0.5.1", "0.0.5.1", "0.0.5.1", "0.0.5.1", "0.0.5.2", "0.0.5.2", "0.0.5.2", "0.0.5.2", "0.0.5.2", "0.0.5.3", "0.0.5.3", "0.0.5.3", "0.0.5.3", "0.0.5.3", "0.0.5.4", "0.0.5.4", "0.0.5.4", "0.0.5.4", "0.0.5.4", "0.0.5.5", "0.0.5.5", "0.0.5.5", "0.0.5.5", "0.0.5.5", "0.0.5.6", "0.0.5.6", "0.0.5.6", "0.0.5.6", "0.0.5.6", "0.0.5.7", "0.0.5.7", "0.0.5.7", "0.0.5.7", "0.0.5.7", "0.0.5.8", "0.0.5.8", "0.0.5.8", "0.0.5.8", "0.0.5.8", "0.0.5.9", "0.0.5.9", "0.0.5.9", "0.0.5.9", "0.0.5.9", "0.0.6.0", "0.0.6.0", "0.0.6.0", "0.0.6.0", "0.0.6.0", "0.0.6.1", "0.0.6.1", "0.0.6.1", "0.0.6.1", "0.0.6.1", "0.0.6.2", "0.0.6.2", "0.0.6.2", "0.0.6.2", "0.0.6.2", "0.0.6.3", "0.0.6.3", "0.0.6.3", "0.0.6.3", "0.0.6.3", "0.0.6.4", "0.0.6.4", "0.0.6.4", "0.0.6.4", "0.0.6.4", "0.0.6.5", "0.0.6.5", "0.0.6.5", "0.0.6.5", "0.0.6.5", "0.0.6.6", "0.0.6.6", "0.0.6.6", "0.0.6.6", "0.0.6.6", "0.0.6.7", "0.0.6.7", "0.0.6.7", "0.0.6.7", "0.0.6.7", "0.0.6.8", "0.0.6.8", "0.0.6.8", "0.0.6.8", "0.0.6.8", "0.0.6.9", "0.0.6.9", "0.0.6.9", "0.0.6.9", "0.0.6.9", "0.0.7.0", "0.0.7.0", "0.0.7.0", "0.0.7.0", "0.0.7.0", "0.0.7.1", "0.0.7.1", "0.0.7.1", "0.0.7.1", "0.0.7.1", "0.0.7.2", "0.0.7.2", "0.0.7.2", "0.0.7.2", "0.0.7.2", "0.0.7.3", "0.0.7.3", "0.0.7.3", "0.0.7.3", "0.0.7.3", "0.0.7.4", "0.0.7.4", "0.0.7.4", "0.0.7.4", "0.0.7.4", "0.0.7.5", "0.0.7.5", "0.0.7.5", "0.0.7.5", "0.0.7.5", "0.0.7.6", "0.0.7.6", "0.0.7.6", "0.0.7.6", "0.0.7.6", "0.0.7.7", "0.0.7.7", "0.0.7.7", "0.0.7.7", "0.0.7.7", "0.0.7.8", "0.0.7.8", "0.0.7.8", "0.0.7.8", "0.0.7.8", "0.0.7.9", "0.0.7.9", "0.0.7.9", "0.0.7.9", "0.0.7.9", "0.0.8.0", "0.0.8.0", "0.0.8.0", "0.0.8.0", "0.0.8.0", "0.0.8.1", "0.0.8.1", "0.0.8.1", "0.0.8.1", "0.0.8.1", "0.0.8.2", "0.0.8.2", "0.0.8.2", "0.0.8.2", "0.0.8.2", "0.0.8.3", "0.0.8.3", "0.0.8.3", "0.0.8.3", "0.0.8.3", "0.0.8.4", "0.0.8.4", "0.0.8.4", "0.0.8.4", "0.0.8.4", "0.0.8.5", "0.0.8.5", "0.0.8.5", "0.0.8.5", "0.0.8.5", "0.0.8.6", "0.0.8.6", "0.0.8.6", "0.0.8.6", "0.0.8.6", "0.0.8.7", "0.0.8.7", "0.0.8.7", "0.0.8.7", "0.0.8.7", "0.0.8.8", "0.0.8.8", "0.0.8.8", "0.0.8.8", "0.0.8.8", "0.0.8.9", "0.0.8.9", "0.0.8.9", "0.0.8.9", "0.0.8.9", "0.0.9.0", "0.0.9.0", "0.0.9.0", "0.0.9.0", "0.0.9.0", "0.0.9.1", "0.0.9.1", "0.0.9.1", "0.0.9.1", "0.0.9.1", "0.0.9.2", "0.0.9.2", "0.0.9.2", "0.0.9.2", "0.0.9.2", "0.0.9.3", "0.0.9.3", "0.0.9.3", "0.0.9.3", "0.0.9.3", "0.0.9.4", "0.0.9.4", "0.0.9.4", "0.0.9.4", "0.0.9.4", "0.0.9.5", "0.0.9.5", "0.0.9.5", "0.0.9.5", "0.0.9.5", "0.0.9.6", "0.0.9.6", "0.0.9.6", "0.0.9.6", "0.0.9.6", "0.0.9.7", "0.0.9.7", "0.0.9.7", "0.0.9.7", "0.0.9.7", "0.0.9.8", "0.0.9.8", "0.0.9.8", "0.0.9.8", "0.0.9.8", "0.0.9.9", "0.0.9.9", "0.0.9.9", "0.0.9.9", "0.0.9.9"]
]
, bgroup "100" [ bench "semver grid" $ nf (grid 80) ["0.0.0", "0.0.1", "0.0.2", "0.0.3", "0.0.4", "0.0.5", "0.0.6", "0.0.7", "0.0.8", "0.0.9", "0.1.0", "0.1.1", "0.1.2", "0.1.3", "0.1.4", "0.1.5", "0.1.6", "0.1.7", "0.1.8", "0.1.9", "0.2.0", "0.2.1", "0.2.2", "0.2.3", "0.2.4", "0.2.5", "0.2.6", "0.2.7", "0.2.8", "0.2.9", "0.3.0", "0.3.1", "0.3.2", "0.3.3", "0.3.4", "0.3.5", "0.3.6", "0.3.7", "0.3.8", "0.3.9", "0.4.0", "0.4.1", "0.4.2", "0.4.3", "0.4.4", "0.4.5", "0.4.6", "0.4.7", "0.4.8", "0.4.9", "0.5.0", "0.5.1", "0.5.2", "0.5.3", "0.5.4", "0.5.5", "0.5.6", "0.5.7", "0.5.8", "0.5.9", "0.6.0", "0.6.1", "0.6.2", "0.6.3", "0.6.4", "0.6.5", "0.6.6", "0.6.7", "0.6.8", "0.6.9", "0.7.0", "0.7.1", "0.7.2", "0.7.3", "0.7.4", "0.7.5", "0.7.6", "0.7.7", "0.7.8", "0.7.9", "0.8.0", "0.8.1", "0.8.2", "0.8.3", "0.8.4", "0.8.5", "0.8.6", "0.8.7", "0.8.8", "0.8.9", "0.9.0", "0.9.1", "0.9.2", "0.9.3", "0.9.4", "0.9.5", "0.9.6", "0.9.7", "0.9.8", "0.9.9"]
, bench "semver grid'" $ nf (grid' 80) ["0.0.0", "0.0.1", "0.0.2", "0.0.3", "0.0.4", "0.0.5", "0.0.6", "0.0.7", "0.0.8", "0.0.9", "0.1.0", "0.1.1", "0.1.2", "0.1.3", "0.1.4", "0.1.5", "0.1.6", "0.1.7", "0.1.8", "0.1.9", "0.2.0", "0.2.1", "0.2.2", "0.2.3", "0.2.4", "0.2.5", "0.2.6", "0.2.7", "0.2.8", "0.2.9", "0.3.0", "0.3.1", "0.3.2", "0.3.3", "0.3.4", "0.3.5", "0.3.6", "0.3.7", "0.3.8", "0.3.9", "0.4.0", "0.4.1", "0.4.2", "0.4.3", "0.4.4", "0.4.5", "0.4.6", "0.4.7", "0.4.8", "0.4.9", "0.5.0", "0.5.1", "0.5.2", "0.5.3", "0.5.4", "0.5.5", "0.5.6", "0.5.7", "0.5.8", "0.5.9", "0.6.0", "0.6.1", "0.6.2", "0.6.3", "0.6.4", "0.6.5", "0.6.6", "0.6.7", "0.6.8", "0.6.9", "0.7.0", "0.7.1", "0.7.2", "0.7.3", "0.7.4", "0.7.5", "0.7.6", "0.7.7", "0.7.8", "0.7.9", "0.8.0", "0.8.1", "0.8.2", "0.8.3", "0.8.4", "0.8.5", "0.8.6", "0.8.7", "0.8.8", "0.8.9", "0.9.0", "0.9.1", "0.9.2", "0.9.3", "0.9.4", "0.9.5", "0.9.6", "0.9.7", "0.9.8", "0.9.9"]
, bench "pvp grid" $ nf (grid 80) ["0.0.0.0", "0.0.0.1", "0.0.0.2", "0.0.0.3", "0.0.0.4", "0.0.0.5", "0.0.0.6", "0.0.0.7", "0.0.0.8", "0.0.0.9", "0.0.1.0", "0.0.1.1", "0.0.1.2", "0.0.1.3", "0.0.1.4", "0.0.1.5", "0.0.1.6", "0.0.1.7", "0.0.1.8", "0.0.1.9", "0.0.2.0", "0.0.2.1", "0.0.2.2", "0.0.2.3", "0.0.2.4", "0.0.2.5", "0.0.2.6", "0.0.2.7", "0.0.2.8", "0.0.2.9", "0.0.3.0", "0.0.3.1", "0.0.3.2", "0.0.3.3", "0.0.3.4", "0.0.3.5", "0.0.3.6", "0.0.3.7", "0.0.3.8", "0.0.3.9", "0.0.4.0", "0.0.4.1", "0.0.4.2", "0.0.4.3", "0.0.4.4", "0.0.4.5", "0.0.4.6", "0.0.4.7", "0.0.4.8", "0.0.4.9", "0.0.5.0", "0.0.5.1", "0.0.5.2", "0.0.5.3", "0.0.5.4", "0.0.5.5", "0.0.5.6", "0.0.5.7", "0.0.5.8", "0.0.5.9", "0.0.6.0", "0.0.6.1", "0.0.6.2", "0.0.6.3", "0.0.6.4", "0.0.6.5", "0.0.6.6", "0.0.6.7", "0.0.6.8", "0.0.6.9", "0.0.7.0", "0.0.7.1", "0.0.7.2", "0.0.7.3", "0.0.7.4", "0.0.7.5", "0.0.7.6", "0.0.7.7", "0.0.7.8", "0.0.7.9", "0.0.8.0", "0.0.8.1", "0.0.8.2", "0.0.8.3", "0.0.8.4", "0.0.8.5", "0.0.8.6", "0.0.8.7", "0.0.8.8", "0.0.8.9", "0.0.9.0", "0.0.9.1", "0.0.9.2", "0.0.9.3", "0.0.9.4", "0.0.9.5", "0.0.9.6", "0.0.9.7", "0.0.9.8", "0.0.9.9"]
, bench "pvp grid'" $ nf (grid' 80) ["0.0.0.0", "0.0.0.1", "0.0.0.2", "0.0.0.3", "0.0.0.4", "0.0.0.5", "0.0.0.6", "0.0.0.7", "0.0.0.8", "0.0.0.9", "0.0.1.0", "0.0.1.1", "0.0.1.2", "0.0.1.3", "0.0.1.4", "0.0.1.5", "0.0.1.6", "0.0.1.7", "0.0.1.8", "0.0.1.9", "0.0.2.0", "0.0.2.1", "0.0.2.2", "0.0.2.3", "0.0.2.4", "0.0.2.5", "0.0.2.6", "0.0.2.7", "0.0.2.8", "0.0.2.9", "0.0.3.0", "0.0.3.1", "0.0.3.2", "0.0.3.3", "0.0.3.4", "0.0.3.5", "0.0.3.6", "0.0.3.7", "0.0.3.8", "0.0.3.9", "0.0.4.0", "0.0.4.1", "0.0.4.2", "0.0.4.3", "0.0.4.4", "0.0.4.5", "0.0.4.6", "0.0.4.7", "0.0.4.8", "0.0.4.9", "0.0.5.0", "0.0.5.1", "0.0.5.2", "0.0.5.3", "0.0.5.4", "0.0.5.5", "0.0.5.6", "0.0.5.7", "0.0.5.8", "0.0.5.9", "0.0.6.0", "0.0.6.1", "0.0.6.2", "0.0.6.3", "0.0.6.4", "0.0.6.5", "0.0.6.6", "0.0.6.7", "0.0.6.8", "0.0.6.9", "0.0.7.0", "0.0.7.1", "0.0.7.2", "0.0.7.3", "0.0.7.4", "0.0.7.5", "0.0.7.6", "0.0.7.7", "0.0.7.8", "0.0.7.9", "0.0.8.0", "0.0.8.1", "0.0.8.2", "0.0.8.3", "0.0.8.4", "0.0.8.5", "0.0.8.6", "0.0.8.7", "0.0.8.8", "0.0.8.9", "0.0.9.0", "0.0.9.1", "0.0.9.2", "0.0.9.3", "0.0.9.4", "0.0.9.5", "0.0.9.6", "0.0.9.7", "0.0.9.8", "0.0.9.9"]
]
, bgroup "50" [ bench "semver grid" $ nf (grid 80) ["0.0.0", "0.0.1", "0.0.2", "0.0.3", "0.0.4", "0.0.5", "0.0.6", "0.0.7", "0.0.8", "0.0.9", "0.1.0", "0.1.1", "0.1.2", "0.1.3", "0.1.4", "0.1.5", "0.1.6", "0.1.7", "0.1.8", "0.1.9", "0.2.0", "0.2.1", "0.2.2", "0.2.3", "0.2.4", "0.2.5", "0.2.6", "0.2.7", "0.2.8", "0.2.9", "0.3.0", "0.3.1", "0.3.2", "0.3.3", "0.3.4", "0.3.5", "0.3.6", "0.3.7", "0.3.8", "0.3.9", "0.4.0", "0.4.1", "0.4.2", "0.4.3", "0.4.4", "0.4.5", "0.4.6", "0.4.7", "0.4.8", "0.4.9", "0.5.0", "0.5.1", "0.5.2", "0.5.3", "0.5.4", "0.5.5", "0.5.6", "0.5.7", "0.5.8", "0.5.9", "0.6.0", "0.6.1", "0.6.2", "0.6.3", "0.6.4", "0.6.5", "0.6.6", "0.6.7", "0.6.8", "0.6.9", "0.7.0", "0.7.1", "0.7.2", "0.7.3", "0.7.4", "0.7.5", "0.7.6", "0.7.7", "0.7.8", "0.7.9", "0.8.0", "0.8.1", "0.8.2", "0.8.3", "0.8.4", "0.8.5", "0.8.6", "0.8.7", "0.8.8", "0.8.9", "0.9.0", "0.9.1", "0.9.2", "0.9.3", "0.9.4", "0.9.5", "0.9.6", "0.9.7", "0.9.8", "0.9.9"]
, bench "semver grid'" $ nf (grid' 80) ["0.0.0", "0.0.1", "0.0.2", "0.0.3", "0.0.4", "0.0.5", "0.0.6", "0.0.7", "0.0.8", "0.0.9", "0.1.0", "0.1.1", "0.1.2", "0.1.3", "0.1.4", "0.1.5", "0.1.6", "0.1.7", "0.1.8", "0.1.9", "0.2.0", "0.2.1", "0.2.2", "0.2.3", "0.2.4", "0.2.5", "0.2.6", "0.2.7", "0.2.8", "0.2.9", "0.3.0", "0.3.1", "0.3.2", "0.3.3", "0.3.4", "0.3.5", "0.3.6", "0.3.7", "0.3.8", "0.3.9", "0.4.0", "0.4.1", "0.4.2", "0.4.3", "0.4.4", "0.4.5", "0.4.6", "0.4.7", "0.4.8", "0.4.9", "0.5.0", "0.5.1", "0.5.2", "0.5.3", "0.5.4", "0.5.5", "0.5.6", "0.5.7", "0.5.8", "0.5.9", "0.6.0", "0.6.1", "0.6.2", "0.6.3", "0.6.4", "0.6.5", "0.6.6", "0.6.7", "0.6.8", "0.6.9", "0.7.0", "0.7.1", "0.7.2", "0.7.3", "0.7.4", "0.7.5", "0.7.6", "0.7.7", "0.7.8", "0.7.9", "0.8.0", "0.8.1", "0.8.2", "0.8.3", "0.8.4", "0.8.5", "0.8.6", "0.8.7", "0.8.8", "0.8.9", "0.9.0", "0.9.1", "0.9.2", "0.9.3", "0.9.4", "0.9.5", "0.9.6", "0.9.7", "0.9.8", "0.9.9"]
, bench "pvp grid" $ nf (grid 80) ["0.0.0.0", "0.0.0.1", "0.0.0.2", "0.0.0.3", "0.0.0.4", "0.0.0.5", "0.0.0.6", "0.0.0.7", "0.0.0.8", "0.0.0.9", "0.0.1.0", "0.0.1.1", "0.0.1.2", "0.0.1.3", "0.0.1.4", "0.0.1.5", "0.0.1.6", "0.0.1.7", "0.0.1.8", "0.0.1.9", "0.0.2.0", "0.0.2.1", "0.0.2.2", "0.0.2.3", "0.0.2.4", "0.0.2.5", "0.0.2.6", "0.0.2.7", "0.0.2.8", "0.0.2.9", "0.0.3.0", "0.0.3.1", "0.0.3.2", "0.0.3.3", "0.0.3.4", "0.0.3.5", "0.0.3.6", "0.0.3.7", "0.0.3.8", "0.0.3.9", "0.0.4.0", "0.0.4.1", "0.0.4.2", "0.0.4.3", "0.0.4.4", "0.0.4.5", "0.0.4.6", "0.0.4.7", "0.0.4.8", "0.0.4.9", "0.0.5.0", "0.0.5.1", "0.0.5.2", "0.0.5.3", "0.0.5.4", "0.0.5.5", "0.0.5.6", "0.0.5.7", "0.0.5.8", "0.0.5.9", "0.0.6.0", "0.0.6.1", "0.0.6.2", "0.0.6.3", "0.0.6.4", "0.0.6.5", "0.0.6.6", "0.0.6.7", "0.0.6.8", "0.0.6.9", "0.0.7.0", "0.0.7.1", "0.0.7.2", "0.0.7.3", "0.0.7.4", "0.0.7.5", "0.0.7.6", "0.0.7.7", "0.0.7.8", "0.0.7.9", "0.0.8.0", "0.0.8.1", "0.0.8.2", "0.0.8.3", "0.0.8.4", "0.0.8.5", "0.0.8.6", "0.0.8.7", "0.0.8.8", "0.0.8.9", "0.0.9.0", "0.0.9.1", "0.0.9.2", "0.0.9.3", "0.0.9.4", "0.0.9.5", "0.0.9.6", "0.0.9.7", "0.0.9.8", "0.0.9.9"]
, bench "pvp grid'" $ nf (grid' 80) ["0.0.0.0", "0.0.0.1", "0.0.0.2", "0.0.0.3", "0.0.0.4", "0.0.0.5", "0.0.0.6", "0.0.0.7", "0.0.0.8", "0.0.0.9", "0.0.1.0", "0.0.1.1", "0.0.1.2", "0.0.1.3", "0.0.1.4", "0.0.1.5", "0.0.1.6", "0.0.1.7", "0.0.1.8", "0.0.1.9", "0.0.2.0", "0.0.2.1", "0.0.2.2", "0.0.2.3", "0.0.2.4", "0.0.2.5", "0.0.2.6", "0.0.2.7", "0.0.2.8", "0.0.2.9", "0.0.3.0", "0.0.3.1", "0.0.3.2", "0.0.3.3", "0.0.3.4", "0.0.3.5", "0.0.3.6", "0.0.3.7", "0.0.3.8", "0.0.3.9", "0.0.4.0", "0.0.4.1", "0.0.4.2", "0.0.4.3", "0.0.4.4", "0.0.4.5", "0.0.4.6", "0.0.4.7", "0.0.4.8", "0.0.4.9", "0.0.5.0", "0.0.5.1", "0.0.5.2", "0.0.5.3", "0.0.5.4", "0.0.5.5", "0.0.5.6", "0.0.5.7", "0.0.5.8", "0.0.5.9", "0.0.6.0", "0.0.6.1", "0.0.6.2", "0.0.6.3", "0.0.6.4", "0.0.6.5", "0.0.6.6", "0.0.6.7", "0.0.6.8", "0.0.6.9", "0.0.7.0", "0.0.7.1", "0.0.7.2", "0.0.7.3", "0.0.7.4", "0.0.7.5", "0.0.7.6", "0.0.7.7", "0.0.7.8", "0.0.7.9", "0.0.8.0", "0.0.8.1", "0.0.8.2", "0.0.8.3", "0.0.8.4", "0.0.8.5", "0.0.8.6", "0.0.8.7", "0.0.8.8", "0.0.8.9", "0.0.9.0", "0.0.9.1", "0.0.9.2", "0.0.9.3", "0.0.9.4", "0.0.9.5", "0.0.9.6", "0.0.9.7", "0.0.9.8", "0.0.9.9"]
]
, bgroup "30" [ bench "semver grid'" $ nf (grid' 80) ["0.0.0", "0.0.1", "0.0.2", "0.0.3", "0.0.4", "0.0.5", "0.0.6", "0.0.7", "0.0.8", "0.0.9", "0.1.0", "0.1.1", "0.1.2", "0.1.3", "0.1.4", "0.1.5", "0.1.6", "0.1.7", "0.1.8", "0.1.9", "0.2.0", "0.2.1", "0.2.2", "0.2.3", "0.2.4", "0.2.5", "0.2.6", "0.2.7", "0.2.8", "0.2.9"]
, bench "semver grid" $ nf (grid 80) ["0.0.0", "0.0.1", "0.0.2", "0.0.3", "0.0.4", "0.0.5", "0.0.6", "0.0.7", "0.0.8", "0.0.9", "0.1.0", "0.1.1", "0.1.2", "0.1.3", "0.1.4", "0.1.5", "0.1.6", "0.1.7", "0.1.8", "0.1.9", "0.2.0", "0.2.1", "0.2.2", "0.2.3", "0.2.4", "0.2.5", "0.2.6", "0.2.7", "0.2.8", "0.2.9"]
, bench "pvp grid'" $ nf (grid' 80) ["0.0.0.0", "0.0.0.1", "0.0.0.2", "0.0.0.3", "0.0.0.4", "0.0.0.5", "0.0.0.6", "0.0.0.7", "0.0.0.8", "0.0.0.9", "0.0.1.0", "0.0.1.1", "0.0.1.2", "0.0.1.3", "0.0.1.4", "0.0.1.5", "0.0.1.6", "0.0.1.7", "0.0.1.8", "0.0.1.9", "0.0.2.0", "0.0.2.1", "0.0.2.2", "0.0.2.3", "0.0.2.4", "0.0.2.5", "0.0.2.6", "0.0.2.7", "0.0.2.8", "0.0.2.9"]
, bench "pvp grid" $ nf (grid 80) ["0.0.0.0", "0.0.0.1", "0.0.0.2", "0.0.0.3", "0.0.0.4", "0.0.0.5", "0.0.0.6", "0.0.0.7", "0.0.0.8", "0.0.0.9", "0.0.1.0", "0.0.1.1", "0.0.1.2", "0.0.1.3", "0.0.1.4", "0.0.1.5", "0.0.1.6", "0.0.1.7", "0.0.1.8", "0.0.1.9", "0.0.2.0", "0.0.2.1", "0.0.2.2", "0.0.2.3", "0.0.2.4", "0.0.2.5", "0.0.2.6", "0.0.2.7", "0.0.2.8", "0.0.2.9"]
]
, bgroup "15" [ bench "semver grid" $ nf (grid 80) ["0.0.0", "0.0.1", "0.0.2", "0.0.3", "0.0.4", "0.0.5", "0.0.6", "0.0.7", "0.0.8", "0.0.9", "0.1.0", "0.1.1", "0.1.2", "0.1.3", "0.1.4"]
, bench "semver grid'" $ nf (grid' 80) ["0.0.0", "0.0.1", "0.0.2", "0.0.3", "0.0.4", "0.0.5", "0.0.6", "0.0.7", "0.0.8", "0.0.9", "0.1.0", "0.1.1", "0.1.2", "0.1.3", "0.1.4"]
, bench "pvp grid" $ nf (grid 80) ["0.0.0.0", "0.0.0.1", "0.0.0.2", "0.0.0.3", "0.0.0.4", "0.0.0.5", "0.0.0.6", "0.0.0.7", "0.0.0.8", "0.0.0.9", "0.0.1.0", "0.0.1.1", "0.0.1.2", "0.0.1.3", "0.0.1.4"]
, bench "pvp grid'" $ nf (grid' 80) ["0.0.0.0", "0.0.0.1", "0.0.0.2", "0.0.0.3", "0.0.0.4", "0.0.0.5", "0.0.0.6", "0.0.0.7", "0.0.0.8", "0.0.0.9", "0.0.1.0", "0.0.1.1", "0.0.1.2", "0.0.1.3", "0.0.1.4"]
]
, bgroup "5" [ bench "semver grid" $ nf (grid 80) ["0.0.0", "0.0.1", "0.0.2", "0.0.3", "0.0.4"]
, bench "semver grid'" $ nf (grid' 80) ["0.0.0", "0.0.1", "0.0.2", "0.0.3", "0.0.4"]
, bench "pvp grid" $ nf (grid 80) ["0.0.0.0", "0.0.0.1", "0.0.0.2", "0.0.0.3"]
, bench "pvp grid'" $ nf (grid' 80) ["0.0.0.0", "0.0.0.1", "0.0.0.2", "0.0.0.3"]
]
]
tabWidth :: Int
tabWidth = 8
grid :: Int -> [String] -> [[Column]]
grid _ [] = []
grid width xs =
if maxLength >= width
then map (\x -> [(x, "")]) items
else map (unfoldr column) [0 .. numrows - 1]
where
maxLength :: Int
maxLength =
foldl' (\z -> max z . length) 0 items
column :: Int -> Maybe (Column, Int)
column i =
if i >= numItems
then Nothing
else Just ((item, padding), i + numrows)
where
item :: String
item = items !! i
padding :: Padding
padding = replicate padCount '\t'
padCount :: Int
padCount =
if i + numrows >= numItems
then 0
else qPad + signum rPad
qPad, rPad :: Int
(qPad, rPad) = quotRem (columnWidth - length item) tabWidth
numrows :: Int
numrows = qRows + signum rRows
qRows, rRows :: Int
(qRows, rRows) = quotRem numItems numcols
numcols :: Int
numcols = max 1 (width `quot` columnWidth)
columnWidth :: Int
columnWidth = addTab maxLength
addTab :: Int -> Int
addTab pos =
pos + tabWidth - (pos `rem` tabWidth)
numItems :: Int
numItems = length items
items :: [String]
items = filter (not . null) xs
grid' :: Int -> [String] -> [[Column]]
grid' _ [] = []
grid' width xs =
if maxLength >= width
then map singleColumn items
else map (unfoldr column) [0 .. numrows - 1]
where
maxLength :: Int
maxLength =
foldl' (\z -> max z . length) 0 items
items :: [String]
items = filter (not . null) xs
singleColumn :: String -> [Column]
singleColumn x = [(x, "")]
column :: Int -> Maybe (Column, Int)
column i =
if i >= numItems
then Nothing
else Just ((item, padding), i + numrows)
where
item :: String
item = itemMap ! i
padding :: Padding
padding = replicate padCount '\t'
padCount :: Int
padCount =
if i + numrows >= numItems
then 0
else qPad + signum rPad
qPad, rPad :: Int
(qPad, rPad) = quotRem (columnWidth - length item) tabWidth
numrows :: Int
numrows = qRows + signum rRows
qRows, rRows :: Int
(qRows, rRows) = quotRem numItems numcols
numcols :: Int
numcols = max 1 (width `quot` columnWidth)
columnWidth :: Int
columnWidth = addTab maxLength
addTab :: Int -> Int
addTab pos =
pos + tabWidth - (pos `rem` tabWidth)
numItems :: Int
numItems = length items
itemMap :: IntMap String
itemMap =
IntMap.fromAscList (zip [0..] items)
benchmarking 500/semver grid
time 304.0 μs (303.5 μs .. 304.3 μs)
1.000 R² (1.000 R² .. 1.000 R²)
mean 304.9 μs (304.8 μs .. 305.2 μs)
std dev 569.6 ns (248.3 ns .. 880.8 ns)
benchmarking 500/semver grid'
time 79.35 μs (79.25 μs .. 79.48 μs)
1.000 R² (1.000 R² .. 1.000 R²)
mean 79.33 μs (79.28 μs .. 79.41 μs)
std dev 204.2 ns (119.4 ns .. 368.4 ns)
benchmarking 500/pvp grid
time 312.7 μs (312.5 μs .. 313.0 μs)
1.000 R² (1.000 R² .. 1.000 R²)
mean 313.4 μs (312.9 μs .. 315.0 μs)
std dev 2.485 μs (603.7 ns .. 5.126 μs)
benchmarking 500/pvp grid'
time 84.01 μs (83.76 μs .. 84.49 μs)
1.000 R² (0.999 R² .. 1.000 R²)
mean 83.89 μs (83.76 μs .. 84.49 μs)
std dev 805.8 ns (121.9 ns .. 1.816 μs)
benchmarking 100/semver grid
time 17.58 μs (17.55 μs .. 17.62 μs)
1.000 R² (1.000 R² .. 1.000 R²)
mean 17.59 μs (17.56 μs .. 17.70 μs)
std dev 174.0 ns (15.86 ns .. 364.6 ns)
benchmarking 100/semver grid'
time 11.92 μs (11.90 μs .. 11.94 μs)
1.000 R² (1.000 R² .. 1.000 R²)
mean 11.95 μs (11.93 μs .. 11.98 μs)
std dev 74.70 ns (50.45 ns .. 119.5 ns)
benchmarking 100/pvp grid
time 18.46 μs (18.44 μs .. 18.47 μs)
1.000 R² (1.000 R² .. 1.000 R²)
mean 18.44 μs (18.42 μs .. 18.46 μs)
std dev 62.17 ns (50.39 ns .. 80.49 ns)
benchmarking 100/pvp grid'
time 14.89 μs (14.85 μs .. 14.92 μs)
1.000 R² (1.000 R² .. 1.000 R²)
mean 14.86 μs (14.84 μs .. 14.88 μs)
std dev 63.86 ns (46.88 ns .. 85.13 ns)
benchmarking 50/semver grid
time 17.71 μs (17.67 μs .. 17.76 μs)
1.000 R² (1.000 R² .. 1.000 R²)
mean 17.72 μs (17.70 μs .. 17.75 μs)
std dev 80.07 ns (61.84 ns .. 119.2 ns)
benchmarking 50/semver grid'
time 11.96 μs (11.94 μs .. 11.97 μs)
1.000 R² (1.000 R² .. 1.000 R²)
mean 11.96 μs (11.95 μs .. 11.97 μs)
std dev 35.26 ns (29.20 ns .. 43.91 ns)
benchmarking 50/pvp grid
time 18.43 μs (18.38 μs .. 18.47 μs)
1.000 R² (1.000 R² .. 1.000 R²)
mean 18.42 μs (18.41 μs .. 18.44 μs)
std dev 57.36 ns (45.47 ns .. 78.57 ns)
benchmarking 50/pvp grid'
time 14.80 μs (14.78 μs .. 14.81 μs)
1.000 R² (1.000 R² .. 1.000 R²)
mean 14.78 μs (14.78 μs .. 14.79 μs)
std dev 28.72 ns (23.90 ns .. 35.49 ns)
benchmarking 30/semver grid'
time 3.240 μs (3.237 μs .. 3.242 μs)
1.000 R² (1.000 R² .. 1.000 R²)
mean 3.238 μs (3.236 μs .. 3.240 μs)
std dev 6.996 ns (5.964 ns .. 8.406 ns)
benchmarking 30/semver grid
time 3.148 μs (3.025 μs .. 3.329 μs)
0.982 R² (0.965 R² .. 1.000 R²)
mean 3.089 μs (3.023 μs .. 3.236 μs)
std dev 312.9 ns (39.02 ns .. 514.4 ns)
variance introduced by outliers: 88% (severely inflated)
benchmarking 30/pvp grid'
time 4.206 μs (3.903 μs .. 4.499 μs)
0.969 R² (0.961 R² .. 0.981 R²)
mean 4.275 μs (4.054 μs .. 4.501 μs)
std dev 707.3 ns (645.8 ns .. 771.8 ns)
variance introduced by outliers: 95% (severely inflated)
benchmarking 30/pvp grid
time 3.634 μs (3.432 μs .. 3.916 μs)
0.975 R² (0.968 R² .. 0.988 R²)
mean 3.632 μs (3.497 μs .. 3.813 μs)
std dev 530.5 ns (426.9 ns .. 623.0 ns)
variance introduced by outliers: 94% (severely inflated)
benchmarking 15/semver grid
time 1.321 μs (1.268 μs .. 1.389 μs)
0.989 R² (0.983 R² .. 0.998 R²)
mean 1.320 μs (1.289 μs .. 1.382 μs)
std dev 145.4 ns (80.29 ns .. 225.6 ns)
variance introduced by outliers: 91% (severely inflated)
benchmarking 15/semver grid'
time 1.638 μs (1.575 μs .. 1.739 μs)
0.989 R² (0.979 R² .. 0.999 R²)
mean 1.599 μs (1.585 μs .. 1.653 μs)
std dev 81.19 ns (18.21 ns .. 166.5 ns)
variance introduced by outliers: 66% (severely inflated)
benchmarking 15/pvp grid
time 1.628 μs (1.537 μs .. 1.731 μs)
0.976 R² (0.969 R² .. 0.984 R²)
mean 1.680 μs (1.606 μs .. 1.755 μs)
std dev 236.9 ns (212.8 ns .. 263.3 ns)
variance introduced by outliers: 94% (severely inflated)
benchmarking 15/pvp grid'
time 1.933 μs (1.800 μs .. 2.093 μs)
0.955 R² (0.940 R² .. 0.972 R²)
mean 2.038 μs (1.908 μs .. 2.196 μs)
std dev 444.1 ns (374.7 ns .. 552.9 ns)
variance introduced by outliers: 97% (severely inflated)
benchmarking 5/semver grid
time 411.7 ns (394.3 ns .. 436.8 ns)
0.981 R² (0.974 R² .. 0.991 R²)
mean 427.4 ns (409.3 ns .. 451.1 ns)
std dev 69.21 ns (54.74 ns .. 82.21 ns)
variance introduced by outliers: 96% (severely inflated)
benchmarking 5/semver grid'
time 549.1 ns (548.4 ns .. 550.1 ns)
1.000 R² (1.000 R² .. 1.000 R²)
mean 549.5 ns (549.0 ns .. 550.6 ns)
std dev 2.374 ns (1.446 ns .. 3.977 ns)
benchmarking 5/pvp grid
time 337.2 ns (336.9 ns .. 337.5 ns)
1.000 R² (1.000 R² .. 1.000 R²)
mean 337.1 ns (336.8 ns .. 337.5 ns)
std dev 1.248 ns (884.8 ps .. 2.089 ns)
benchmarking 5/pvp grid'
time 465.0 ns (463.8 ns .. 467.6 ns)
1.000 R² (1.000 R² .. 1.000 R²)
mean 464.6 ns (463.9 ns .. 467.0 ns)
std dev 4.053 ns (1.003 ns .. 8.369 ns)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment