summaryrefslogtreecommitdiffstats
path: root/tests/010
diff options
context:
space:
mode:
Diffstat (limited to 'tests/010')
-rw-r--r--tests/010/tree.tl33
1 files changed, 33 insertions, 0 deletions
diff --git a/tests/010/tree.tl b/tests/010/tree.tl
index f5bfac42..898fd91d 100644
--- a/tests/010/tree.tl
+++ b/tests/010/tree.tl
@@ -183,3 +183,36 @@
(uni #T(() "a" "b") #T(() "b" "c")) ("a" "b" "c")
(diff #T(() "a" "b") #T(() "b" "c")) ("a")
(isec #T(() "a" "b") #T(() "b" "c")) ("b"))
+
+(defstruct (item label key) ()
+ label
+ key
+ (:method equal (it) it.key))
+
+(defun make-items ()
+ (vec (new (item 'a 1))
+ (new (item 'b 2))
+ (new (item 'c 2))
+ (new (item 'd 2))
+ (new (item 'e 2))
+ (new (item 'f 3))))
+
+(let* ((items (make-items))
+ (tr (tree items : : : t)))
+ (each ((it items))
+ (vtest (tree-delete tr it) it))
+ (test tr #T(())))
+
+(let* ((items (make-items))
+ (tr (tree items : : : t)))
+ (each ((it items))
+ (let* ((tn (tree-lookup-node tr it.key))
+ (iu (key tn)))
+ (vtest (tree-delete-specific-node tr tn) tn)
+ (each ((iv tr))
+ (test (eq iv.label iu.label) nil))))
+ (test tr #T(())))
+
+(let* ((items (make-items))
+ (tr (tree items : : : t)))
+ (vtest (vec-list [mapcar .label tr]) [mapcar .label items]))