{-# LANGUAGE Arrows #-} {-# LANGUAGE RecordWildCards #-} module Feedback where -- essence-of-live-coding import Util -- test-framework import Test.Framework -- test-framework-quickcheck2 import Test.Framework.Providers.QuickCheck2 -- QuickCheck import Test.QuickCheck -- essence-of-live-coding import LiveCoding constCell :: Monad m => Int -> Cell m () Int constCell cellState = Cell { cellStep = \state _ -> return (state, state) , .. } test = testGroup "Feedback" [ testProperty "Migrates into feedback" CellMigrationSimulation { cell1 = constCell 23 , cell2 = feedback [] $ proc ((), ns) -> do n <- constCell 42 -< () returnA -< (sum ns, n : ns) , input1 = replicate 3 () , input2 = replicate 3 () , output1 = [23, 23, 23] , output2 = [0, 23, 46] } , testProperty "Migrates out of feedback" CellMigrationSimulation { cell1 = feedback [] $ proc ((), ns) -> do n <- constCell 23 -< () returnA -< (sum ns, n : ns) , cell2 = constCell 42 , input1 = replicate 3 () , input2 = replicate 3 () , output1 = [0, 23, 46] , output2 = [23, 23, 23] } ]