-- | Tests for 'Michelson.Typed.Util'. module Test.Michelson.Typed.Util ( unit_linearizeLeft_sample , prop_linearizeLeft_performance ) where import Test.HUnit (Assertion, (@?)) import Test.QuickCheck (Property, total, within) import Michelson.Typed unit_linearizeLeft_sample :: Assertion unit_linearizeLeft_sample = isLeftLinear (linearizeLeft (rightLinear 3)) @? "Failed to linearize" isLeftLinear :: Instr inp out -> Bool isLeftLinear (Seq _ (Seq {})) = False isLeftLinear (Seq a _) = isLeftLinear a isLeftLinear _ = True rightLinear :: Word -> Instr '[ 'TUnit, 'TUnit ] '[ 'TUnit, 'TUnit] rightLinear = go where go 0 = SWAP go n = Seq SWAP (go (n - 1)) prop_linearizeLeft_performance :: Property prop_linearizeLeft_performance = -- Without existing optimization it would take much more time. within (10 * 1000 * 1000) $ -- at most 10 sec total $ show @Text $ linearizeLeft instr where instr = rightLinear 300000