brassica-0.0.3: bench/Paradigm.hs
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Criterion.Main (bench, nf, defaultMain)
import Brassica.Paradigm
main :: IO ()
main = defaultMain
[ bench "small" $ nf (build smallParadigm) smallWords
, bench "mid" $ nf (build smallParadigm) largeWords
, bench "mid2" $ nf (build largeParadigm) smallWords
, bench "large" $ nf (build largeParadigm) largeWords
]
where
build = concatMap . applyParadigm
smallParadigm :: Paradigm
smallParadigm =
[ NewFeature $ Feature Always Nothing
[ Concrete [Prefix 1 "a"]
, Concrete [Prefix 1 "b"]
, Concrete [Prefix 1 "c"]
]
, NewFeature $ Feature Always Nothing
[ Concrete [Suffix 1 "x"]
, Concrete [Suffix 1 "y"]
, Concrete []
]
, NewFeature $ Feature Always Nothing
[ Concrete [Prefix 2 "n", Suffix 2 "v"]
, Concrete [Prefix 2 "n", Suffix 2 "w"]
, Concrete [Prefix 2 "m", Suffix 2 "w"]
]
]
largeParadigm :: Paradigm
largeParadigm =
[ NewFeature $ Feature Always Nothing
[ Concrete [Prefix 1 "a"]
, Concrete [Prefix 1 "b"]
, Concrete [Prefix 1 "c"]
, Concrete [Prefix 1 "d"]
, Concrete [Prefix 1 "e"]
, Concrete [Prefix 1 "f"]
, Concrete [Prefix 1 "g"]
, Concrete [Prefix 1 "h"]
, Concrete [Prefix 1 "i"]
]
, NewFeature $ Feature Always Nothing
[ Abstract "abstract1a"
, Abstract "abstract1b"
]
, NewFeature $ Feature Always Nothing
[ Concrete [Prefix 2 "n", Suffix 2 "v"]
, Concrete [Prefix 2 "n", Suffix 2 "w"]
, Concrete [Prefix 2 "m", Suffix 2 "v"]
, Concrete [Prefix 2 "m", Suffix 2 "w"]
]
, NewFeature $ Feature Always Nothing
[ Abstract "abstract2a"
, Abstract "abstract2b"
]
, NewFeature $ Feature Always Nothing
[ Concrete [Suffix 4 "a"]
, Concrete [Suffix 4 "b"]
, Concrete [Suffix 4 "c"]
, Concrete [Suffix 4 "d"]
, Concrete [Suffix 4 "e"]
, Concrete [Suffix 4 "f"]
, Concrete [Suffix 4 "g"]
, Concrete [Suffix 4 "h"]
, Concrete [Suffix 4 "i"]
]
, NewMapping ["abstract1a","abstract2a"] [Suffix 3 "q"]
, NewMapping ["abstract1a","abstract2b"] [Suffix 3 "w"]
, NewMapping ["abstract1b","abstract2a"] [Suffix 3 "e"]
, NewMapping ["abstract1b","abstract2b"] [Suffix 3 "r"]
]
smallWords :: [String]
smallWords = ["word", "wurd", "ward", "werd", "wird"]
largeWords :: [String]
largeWords = ["word", "wurd", "ward", "werd", "wird", "xyz", "yzx", "zxy", "zyx", "yxz", "xzy", "qw", "we", "er", "rt", "ty"]