packages feed

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]