3 /* Test module StdSortList
5 (*) gebruik Environment 'Gast'
6 (*) zet Project Options op 'Basic Values Only' en '16M' Maximum Heap Size.
14 (\n` n2` m -> let n = lst2slst (cast [A,B,C] n` )
15 n2 = lst2slst (cast [A,B,C] n2`)
18 count_matches_elems n /\
20 member_is_member n m /\
21 member_na_insert n m /\
22 member_na_remove n m /\
23 insert_remove_invariant n m /\
26 merge_additive n n2 /\
27 merge_member n n2 m /\
38 instance == Enum where (==) x y = gEq{|*|} x y
39 instance < Enum where (<) x y = gEq{|*|} (gLexOrd{|*|} x y) LT
41 // clean should have something like this!
45 leeg_is_leeg :: Property
48 (count newSortList == 0)
50 count_matches_elems :: (SortList a) -> Property | Eq, Ord a
52 = name "count_matches_elems"
53 (length (elements n) == count n)
55 is_sorted_elems :: (SortList a) -> Property | Eq, Ord a
57 = name "is_sorted_elems"
58 (isSorted (elements n))
59 where isSorted lst = and [ x<=y \\ x<-lst & y<-tl lst ]
61 member_is_member :: (SortList a) a -> Property | Eq, Ord a
62 member_is_member lst e
63 = name "member_is_member"
64 ((isMember e (elements lst)) <==> (memberSort e lst))
66 member_na_insert :: (SortList a) a -> Property | Eq, Ord a
67 member_na_insert lst e
68 = name "member_na_insert"
69 (memberSort e (insertSort e lst))
71 member_na_remove :: (SortList a) a -> Property | Eq, Ord a
72 member_na_remove lst e
73 = name "member_na_remove"
74 (not (memberSort e (removeAll e lst)))
76 insert_remove_invariant :: (SortList a) a -> Property | Eq, Ord a
77 insert_remove_invariant lst e
78 = name "insert_remove_invariant"
79 (memberSort e lst <==> memberSort e lst`)
80 where lst` = removeFirst e (insertSort e lst)
82 minimum_property :: (SortList a) -> Property | Eq,Ord a
84 = name "minimum_property"
85 (count n > 0 ==> (memberSort min n /\ all ((<=) min) (elements n)))
88 maximum_property :: (SortList a) -> Property | Eq,Ord a
90 = name "maximum_property"
91 (count n > 0 ==> (memberSort max n /\ all ((>=) max) (elements n)))
94 merge_member :: (SortList a) (SortList a) a -> Property | Eq,Ord a
97 (memberSort e nm <==> (memberSort e n \/ memberSort e m))
98 where nm = mergeSortList n m
100 merge_additive :: (SortList a) (SortList a) -> Property | Eq,Ord a
102 = name "merge_additive"
103 (count n + count m == count nm)
104 where nm = mergeSortList n m
106 lst2slst :: [a] -> SortList a | Eq,Ord a
107 lst2slst xs = seq (map insertSort xs) newSortList