module AListTest ( tests ) where import Test.Framework (defaultMain, testGroup) import Test.Framework.Providers.HUnit import Test.Framework.Providers.QuickCheck2 (testProperty) import Test.HUnit import Test.QuickCheck import Control.Monad.Par.AList as A import Prelude hiding (tail, length, map, filter) import qualified Prelude as P -------------------------------------------------------------------------------- -- QuickCheck properties prop_tofrom :: [Int] -> Bool prop_tofrom xs = toList (fromList xs) == xs prop_tofromB :: [Int] -> Bool prop_tofromB xs = toList (fromListBalanced xs) == xs prop_balance :: [Int] -> Bool prop_balance xs = toList (balance (fromList xs)) == xs prop_map :: [Int] -> Bool prop_map ls = map (+1) (fromList ls) == fromList (P.map (+1) ls) prop_filter :: [Int] -> Bool prop_filter ls = filter odd (fromList ls) == fromList (P.filter odd ls) -- | All QuickCheck tests together: test = mapM_ quickCheck [ prop_tofrom , prop_tofromB , prop_balance , prop_map , prop_filter ] -------------------------------------------------------------------------------- -- Testing Utils: bintree 0 x = x bintree n x = Append sub sub where sub = bintree (n-1) x showDbg ANil = "_" showDbg (ASing x) = show x showDbg (Append l r) = "("++showDbg l++" | "++showDbg r++")" showDbg (AList l) = show l -------------------------------------------------------------------------------- tests = [ -- testGroup "AList HUnit Tests" (hUnitTestToTests alist_tests), testGroup "AList HUnit Tests" [ testCase "fromList1" $ 8 @=? (length$ tail$ tail$ fromList [1..10]) , testCase "cons X3" $ 1 @=? (length$ tail$tail$ cons 1$ cons 2$ cons 3 empty) , testCase "tail X3" $ 253 @=? (length$ tail$tail$tail$ bintree 8 $ singleton 'a') , testCase "len bintree"$ 0 @=? (length$ bintree 8 $ empty) , testCase "inspect tree1"$ "((1 | 1) | (1 | 1))" @=? (showDbg$ bintree 2 $ singleton 1) , testCase "inspect tree2"$ "((_ | 1) | (1 | 1))" @=? (showDbg$ tail$ bintree 2 $ singleton 1) , testCase "inspect tree3"$ "(_ | (1 | 1))" @=? (showDbg$ tail$tail$ bintree 2 $ singleton 1) ], testGroup "AList QuickCheck Tests " [ testProperty "map" prop_map , testProperty "filter" prop_filter , testProperty "tofrom" prop_tofrom , testProperty "tofromB" prop_tofromB , testProperty "balance" prop_balance ] ] -- main = defaultMain tests