5 Contains :: a [a] -> Bool | == a
6 Contains x xs = foldl (\b y . b || x == y) False xs
8 EqualTo :: a a -> Bool | == a
11 LessThen :: a a -> Bool | < a
14 Not :: (a -> Bool) a -> Bool
17 Is :: (a -> Bool) a -> Bool
20 (Or) infixl 2 :: (a -> Bool) (a -> Bool) -> (a -> Bool)
21 (Or) f g = \x . f x || g x
23 AssertThat :: String a (a -> Bool) -> [String]
24 AssertThat id x f | f x = [id : " " : "PASS" : []]
25 | otherwise = [id : " " : "FAIL": []]
27 instance * [String] where
28 (*) x y = x ++ ["\n":y]
30 test :: [String] -> [String]
33 a1 = AssertThat "(2*2) (Is (EqualTo (2+2)))" (2*2) (Is(EqualTo (2+2)))
34 a2 = AssertThat "(3*3) (EqualTo (3+3))" (3*3) (EqualTo (3+3))
35 a3 = AssertThat "(length [0..3]) is not 4" (length [0..3]) (Not(EqualTo 4))
36 a4 = AssertThat "[0..3] (Contains 2)" [0..3] (Contains 2)
37 a5 = AssertThat "[0..3] (Contains 7)" [0..3] (Contains 7)
38 a6 = AssertThat "[0..3] (Either (EqualTo [1]) (Contains 7))" [0..3] (EqualTo [1] Or (Contains 7))
40 report = test (a1*a2*a3*a4*a5*a6)
42 instance <<< [String] where
44 (<<<) file [s:ss] = file <<< s <<< ss
46 Start :: !*World -> *World
48 # (file, world) = stdio world
49 # file = file <<< report
50 # (ok, world) = fclose file world