packages feed

euphoria-0.8.0.0: tests/FRP/Euphoria/Update/Test.hs

{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE CPP #-}

module FRP.Euphoria.Update.Test (tests) where

#if __GLASGOW_HASKELL__ < 710
import Control.Applicative ((<$>), (<*>))
import Data.Monoid (mappend)
#endif

import Data.Maybe (fromMaybe)

import Test.Framework (Test)
import Test.Framework.TH
import Test.Framework.Providers.HUnit
import Test.HUnit hiding (Test)

import FRP.Euphoria.Event
import FRP.Euphoria.Update

tests :: Test
tests = $(testGroupGenerator)

case_startUpdateNetwork :: Assertion
case_startUpdateNetwork = do
    (sample, step) <- startUpdateNetwork $ do
        evt <- eventFromList [["a"], ["bc","d"], [], ["e"]]
        return $ updateUseAll evt
    step
    val0 <- sample
    val1 <- sample
    val2 <- sample

    [val0, val1, val2] @?= ["abcd", "", "e"]

case_skip :: Assertion
case_skip = do
    (sample, step) <- startUpdateNetwork $
        updateUseLast <$> eventFromList [[1], [2, 3], [], [4::Int]]
    step
    val0 <- sample
    val1 <- sample
    step
    val2 <- sample

    val0 @?= Just 3
    val1 @?= Nothing
    val2 @?= Just 4

case_mappendUpdate :: Assertion
case_mappendUpdate = do
    (sample, step) <- startUpdateNetwork $ do
        update0 <- updateUseAll <$> eventFromList [["a"], ["bc","d"], [], ["e"]]
        update1 <- updateUseAll <$> eventFromList [["f"], [], ["g"], ["hij"]]
        return $ update0 `mappend` update1
    step
    val0 <- sample
    val1 <- sample
    step
    val2 <- sample

    val0 @?= "abcdf"
    val1 @?= "g"
    val2 @?= "ehij"

case_applicativeUpdate :: Assertion
case_applicativeUpdate = do
    (sample, step) <- startUpdateNetwork $ do
        update0 <- updateUseAll <$> eventFromList [["a"], ["bc","d"], [], ["e"]]
        update1 <- updateUseAll <$> eventFromList [[[1]], [], [[2]], [[3,4],[5::Int]]]
        return $ f <$> update0 <*> update1
    step
    val0 <- sample
    val1 <- sample
    step
    val2 <- sample

    val0 @?= [([1], "abcd")]
    val1 @?= [([2], "")]
    val2 @?= [([3,4,5], "e")]
        where
        f str num = [(num, str)]

case_switchUD :: Assertion
case_switchUD = do
    (sample, step) <- startUpdateNetwork $ do
        update0 <- fmap (fromMaybe "") . updateUseLast <$>
            eventFromList [["1"], ["2", "3"], ["4"], ["5"]]
        update1 <- updateUseAll <$> eventFromList [["a"], ["bc","d"], [], ["e"]]
        updatesD <- stepperD update0 =<< eventFromList [[], [], [], [update1]]
        switchD updatesD
    val0 <- sample
    step
    step
    val1 <- sample

    val0 @?= "1"
    val1 @?= "4e"