lvish-1.1.1.1: tests/MemoTests.hs
{-# LANGUAGE TemplateHaskell, ParallelListComp #-}
-- | Test only the memoization functionality, corresponds to the @Data.LVar.Memo*@
-- modules.
module MemoTests where
import Control.LVish
import Data.LVar.CycGraph
import qualified Data.LVar.IVar as IV
import Data.Set as S
import Test.HUnit (Assertion, assertEqual, assertBool, Counts(..))
import Test.Framework.TH (testGroupGenerator)
import Test.Framework (defaultMain, Test)
import Test.Framework.Providers.HUnit (testCase) -- For macro-expansion.
import TestHelpers (defaultMainSeqTests)
import Prelude as P
--------------------------------------------------------------------------------
-- Unit Tests
--------------------------------------------------------------------------------
-- This has changed a bunch, update it: [2013.10.23]
{-
cyc02 :: IO String
cyc02 = runParIO $ exploreGraph
(\33 -> return [33])
(\cyc k nbrs ->
return ("key "++show k++" cyc "++show cyc++" nbrs "++show (P.map fst nbrs)))
(33::Int)
cyc03 :: IO String
cyc03 = runParIO $ exploreGraph fn1 fn2 33
where
fn1 33 = return [44]
fn1 44 = return [33]
fn2 cyc k nbrs = return ("key "++show k++" cyc "++show cyc++" nbrs "++show (P.map fst nbrs))
cyc04 :: IO String
cyc04 = runParIO $ exploreGraph fn1 hndlr 33
where
fn1 33 = return [44]
fn1 44 = return [55]
fn1 55 = return [33]
hndlr True 55 nbrs = return "stop-at-55"
hndlr cyc k nbrs = do
vals <- mapM (IV.get . snd) nbrs
return ("key="++show k++" cyc:"++show cyc++" nbrs:("++
concat [ show k++","++str++" " | (k,_) <- nbrs | str <- vals ] ++")")
-}
-----------------------------------------------
-- Test the sequential cycle-detection approach
-----------------------------------------------
case_02seq :: Assertion
case_02seq = assertEqual "direct, one-node cycle, DFS" "cycle-33" cyc02seq
cyc02seq :: String
cyc02seq = runPar $ exploreGraph_seq
(\33 -> return$ Request 33 (\a -> return$ Done$ "33 finished: "++a))
(\k -> return$ "cycle-"++show k)
33
case_03seq :: Assertion
case_03seq = assertEqual "2-way cycle, DFS" "44 finished: cycle-33" cyc03seq
cyc03seq :: String
cyc03seq = runPar $ exploreGraph_seq fn (\k -> return ("cycle-"++show k)) 44
where
fn 33 = return (Request 44 (\a -> return (Done$ "33 finished: "++a)))
fn 44 = return (Request 33 (\a -> return (Done$ "44 finished: "++a)))
case_04seq :: Assertion
case_04seq = assertEqual "3-way cycle, DFS"
"33 complete: 44 complete: cycle-55" cyc04seq
cyc04seq :: String
cyc04seq = runPar $ exploreGraph_seq fn (\k -> return ("cycle-"++show k)) 33
where
fn 33 = return (Request 44 (\a -> return (Done$ "33 complete: "++a)))
fn 44 = return (Request 55 (\a -> return (Done$ "44 complete: "++a)))
fn 55 = return (Request 33 (\a -> return (Done$ "55 complete: "++a)))
cyc05seq :: String
cyc05seq = runPar $ exploreGraph_seq fn (\k -> return ("cycle-"++show k)) 33
where
fn 33 = return (Request 44 (\a -> return (Done$ "33 complete: "++a)))
fn 44 = return (Request 55 (\a -> return (Done$ "44 complete: "++a)))
fn 55 = return (Request 33 (\a -> return (Done$ "55 complete: "++a)))
--------------------------------------------------------------------------------
tests :: Test
tests = $(testGroupGenerator)
runTests :: IO ()
runTests = defaultMainSeqTests [tests]