From 6f604b19d3f5966e5c1d7c4fdf3703bd6ff0861c Mon Sep 17 00:00:00 2001 From: Mart Lubbers Date: Thu, 16 Apr 2015 21:22:20 +0200 Subject: update to fp2 yay, public and licence --- fp1/week3/camil/StdSortListTest.icl | 107 ++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 fp1/week3/camil/StdSortListTest.icl (limited to 'fp1/week3/camil/StdSortListTest.icl') diff --git a/fp1/week3/camil/StdSortListTest.icl b/fp1/week3/camil/StdSortListTest.icl new file mode 100644 index 0000000..411f7ca --- /dev/null +++ b/fp1/week3/camil/StdSortListTest.icl @@ -0,0 +1,107 @@ +module StdSortListTest + +/* Test module StdSortList + Voor werken met Gast: + (*) gebruik Environment 'Gast' + (*) zet Project Options op 'Basic Values Only' en '16M' Maximum Heap Size. +*/ + +import gast +import GenLexOrd +import StdSortList + +Start = testn 10000 + (\n` n2` m -> let n = lst2slst (cast [A,B,C] n` ) + n2 = lst2slst (cast [A,B,C] n2`) + in + leeg_is_leeg /\ + count_matches_elems n /\ + is_sorted_elems n /\ + member_is_member n m /\ + member_na_insert n m /\ + member_na_remove n m /\ + insert_remove_invariant n m /\ + minimum_property n /\ + maximum_property n /\ + merge_additive n n2 /\ + merge_member n n2 m /\ + True + ) + +:: Enum = A | B | C + +derive bimap [] +derive ggen Enum +derive genShow Enum +derive gEq Enum +derive gLexOrd Enum +instance == Enum where (==) x y = gEq{|*|} x y +instance < Enum where (<) x y = gEq{|*|} (gLexOrd{|*|} x y) LT + +// clean should have something like this! +cast :: a a -> a +cast _ x = x + +leeg_is_leeg :: Property +leeg_is_leeg + = name "leeg_is_leeg" + (count newSortList == 0) + +count_matches_elems :: (SortList a) -> Property | Eq, Ord a +count_matches_elems n + = name "count_matches_elems" + (length (elements n) == count n) + +is_sorted_elems :: (SortList a) -> Property | Eq, Ord a +is_sorted_elems n + = name "is_sorted_elems" + (isSorted (elements n)) + where isSorted lst = and [ x<=y \\ x<-lst & y<-tl lst ] + +member_is_member :: (SortList a) a -> Property | Eq, Ord a +member_is_member lst e + = name "member_is_member" + ((isMember e (elements lst)) <==> (memberSort e lst)) + +member_na_insert :: (SortList a) a -> Property | Eq, Ord a +member_na_insert lst e + = name "member_na_insert" + (memberSort e (insertSort e lst)) + +member_na_remove :: (SortList a) a -> Property | Eq, Ord a +member_na_remove lst e + = name "member_na_remove" + (not (memberSort e (removeAll e lst))) + +insert_remove_invariant :: (SortList a) a -> Property | Eq, Ord a +insert_remove_invariant lst e + = name "insert_remove_invariant" + (memberSort e lst <==> memberSort e lst`) + where lst` = removeFirst e (insertSort e lst) + +minimum_property :: (SortList a) -> Property | Eq,Ord a +minimum_property n + = name "minimum_property" + (count n > 0 ==> (memberSort min n /\ all ((<=) min) (elements n))) + where min = minimum n + +maximum_property :: (SortList a) -> Property | Eq,Ord a +maximum_property n + = name "maximum_property" + (count n > 0 ==> (memberSort max n /\ all ((>=) max) (elements n))) + where max = maximum n + +merge_member :: (SortList a) (SortList a) a -> Property | Eq,Ord a +merge_member n m e + = name "merge_member" + (memberSort e nm <==> (memberSort e n \/ memberSort e m)) + where nm = mergeSortList n m + +merge_additive :: (SortList a) (SortList a) -> Property | Eq,Ord a +merge_additive n m + = name "merge_additive" + (count n + count m == count nm) + where nm = mergeSortList n m + +lst2slst :: [a] -> SortList a | Eq,Ord a +lst2slst xs = seq (map insertSort xs) newSortList -- cgit v1.2.3