packages feed

hasmin-1.0: tests/Hasmin/Types/TimingFunctionSpec.hs

{-# LANGUAGE OverloadedStrings #-}

module Hasmin.Types.TimingFunctionSpec where

import Test.Hspec

import Data.Text (Text)
import Hasmin.Parser.Value
import Hasmin.Types.TimingFunction
import Hasmin.TestUtils

timingFunctionTests :: Spec
timingFunctionTests =
    describe "<timing-function> minification tests" $
      mapM_ (matchSpec f) timingFunctionTestsInfo
  where f = minifyWithTestConfig <$> timingFunction

quickcheckTimingFunction :: Spec
quickcheckTimingFunction =
    describe "<timing-function> quickcheck tests" .
      it "Minified <timing-function> maintains semantical equivalence" $
        property (prop_minificationEq :: TimingFunction -> Bool)

timingFunctionTestsInfo :: [(Text, Text)]
timingFunctionTestsInfo =
  [("cubic-bezier(0.25, 0.1, 0.25, 1)", "ease")
  ,("cubic-bezier(0.42, 0, 1, 1)",      "ease-in")
  ,("cubic-bezier(0.42, 0, 0.58, 1)",   "ease-in-out")
  ,("cubic-bezier(0, 0, 1, 1)",         "linear")
  ,("cubic-bezier(0, 0, 0.58, 1)",      "ease-out")
  ,("cubic-bezier(0.42, 0, 0.5, 1)",    "cubic-bezier(.42,0,.5,1)")
  ,("cubic-bezier(0, 0, 0.5, 1)",       "cubic-bezier(0,0,.5,1)")
  ,("cubic-bezier(0, 0.3, 0.5, 1)",     "cubic-bezier(0,.3,.5,1)")
  ,("cubic-bezier(0.6, 0, 0.5, 1)",     "cubic-bezier(.6,0,.5,1)")
  ,("steps(1, end)",                    "step-end")
  ,("steps(2, end)",                    "steps(2)")
  ,("steps(1)",                         "step-end")
  ,("steps(1, start)",                  "step-start")
  ,("steps(2)",                         "steps(2)")
  ,("steps(2, start)",                  "steps(2,start)")
  ]

spec :: Spec
spec = do timingFunctionTests
          quickcheckTimingFunction

main :: IO ()
main = hspec spec