lvish-1.1.1.1: tests/LogicalTests.hs
{-# LANGUAGE TemplateHaskell #-}
module LogicalTests where
import Control.LVish
import Data.LVar.IVar as IV
import Test.HUnit (Assertion, assert, assertEqual, assertBool, Counts(..))
-- import Test.QuickCheck ()
import Test.Framework.Providers.HUnit
-- import Test.Framework.Providers.QuickCheck2
import Test.Framework -- (Test, defaultMain, testGroup)
import Test.Framework.TH (testGroupGenerator)
import TestHelpers (defaultMainSeqTests)
--------------------------------------------------------------------------------
-- TESTS:
--------------------------------------------------------------------------------
case_and1 :: Assertion
case_and1 = assertEqual "" False $ runPar $ do
v <- IV.new
asyncAnd Nothing (return True) (return False) (IV.put v)
IV.get v
case_and2 :: Assertion
case_and2 = assertEqual "" False $ runPar $ do
v <- IV.new
asyncAnd Nothing (return False) (return False) (IV.put v)
IV.get v
case_and3 :: Assertion
case_and3 = assertEqual "" True $ runPar $ do
v <- IV.new
asyncAnd Nothing (return True) (return True) (IV.put v)
IV.get v
case_and4 :: Assertion
case_and4 = assertEqual "" False $ runPar $ do
v <- IV.new
asyncAnd Nothing (return False) (return True) (IV.put v)
IV.get v
case_or1 :: Assertion
case_or1 = assertEqual "" True $ runPar $ do
v <- IV.new
asyncOr Nothing (return True) (return False) (IV.put v)
IV.get v
case_or2 :: Assertion
case_or2 = assertEqual "" False $ runPar $ do
v <- IV.new
asyncOr Nothing (return False) (return False) (IV.put v)
IV.get v
case_or3 :: Assertion
case_or3 = assertEqual "" True $ runPar $ do
v <- IV.new
asyncOr Nothing (return True) (return True) (IV.put v)
IV.get v
case_or4 :: Assertion
case_or4 = assertEqual "" True $ runPar $ do
v <- IV.new
asyncOr Nothing (return False) (return True) (IV.put v)
IV.get v
case_andMap01 :: Assertion
case_andMap01 = assertEqual "" False $ runPar $
andMap Nothing (return . even) [1..200::Int]
case_orMap01 :: Assertion
case_orMap01 = assertEqual "" True $ runPar $
orMap Nothing (return . even) [1..200::Int]
-- TODO: add ones with explicit timing controls (sleep).
--------------------------------------------------------------------------------
tests :: Test
tests = $(testGroupGenerator)
runTests :: IO ()
runTests = defaultMainSeqTests [tests]