summaryrefslogtreecommitdiff
path: root/files/practicum/BinTreeTest.icl
diff options
context:
space:
mode:
Diffstat (limited to 'files/practicum/BinTreeTest.icl')
-rw-r--r--files/practicum/BinTreeTest.icl42
1 files changed, 42 insertions, 0 deletions
diff --git a/files/practicum/BinTreeTest.icl b/files/practicum/BinTreeTest.icl
new file mode 100644
index 0000000..0cc7b48
--- /dev/null
+++ b/files/practicum/BinTreeTest.icl
@@ -0,0 +1,42 @@
+module BinTreeTest
+
+/* Test module BinTree
+ Voor werken met Gast:
+ (*) gebruik Environment 'Gast'
+ (*) zet Project Options op 'Basic Values Only' en '2M' Maximum Heap Size
+*/
+
+import gast
+import BinTree
+
+Start
+ = testn 1000
+ (\n -> let n` = abs (n/2) in
+ nodes_vs_leaves n` /\
+ leaves_vs_diepte n` /\
+ True
+ )
+
+nodes_vs_leaves :: Int -> Property
+nodes_vs_leaves n = name "nodes_vs_leaves"
+ (nodes t == leaves t - 1)
+where t = lego_tree n
+
+leaves_vs_diepte :: Int -> Property
+leaves_vs_diepte n = name "leaves_vs_diepte"
+ (leaves t <= 2^(diepte t))
+where t = lego_tree n
+
+// Function to construct semi-random trees, using those from BinTree:
+trees =: [t0,t1,t2,t3,t4,t5,t6,t7]
+nr_of_trees =: length trees
+
+lego_tree :: Int -> Tree Int
+lego_tree 0 = t0
+lego_tree n = glue n (trees !! (n rem nr_of_trees)) (lego_tree (n/10))
+where
+ glue :: !Int !(Tree Int) !(Tree Int) -> Tree Int
+ glue n t Leaf = t
+ glue n t (Node x l r)
+ | isEven n = Node x (glue (n/10) t l) r
+ | otherwise = Node x l (glue (n/10) t r)