⍝ Binary Search Trees: ⍝ These tests assume that the calling test (avl, splay, redblack) has defined ⍝ put, rem and chk. mk ← 0∘(put foldl) ⍝ make tree :: t ← ∇ (k v)[] ∧/∧/¨⊃∘chk∘mk¨∘↓∘pmat¨⍳5 ⍝ insert all perms up to ⍳5 1 ⍝ As chk is O(⍵), the time taken to run the test increases with the square of ⍝ its argument. ¯¯¯¯¯¯ ⎕rl←3⊃⎕ts ⍝ daily random seed. soak←{ ⍝ soak-test insert/remove. upd←{ ⍝ insert/remove ⍵ random keys. ⍬≡⍵:⍺ ⍝ no more vals: finished. next←⍺ ⍺⍺ ⊃⍵ ⍝ tree ⍺ with ⍵ inserted/removed. ~⊃chk next:'! bad tree' ⍝ bad tree: give up. next ∇ 1↓⍵ ⍝ try next value. } t←0 put upd ⍵?⍵ ⍝ insert each ⍳⍵ in random order. '!'≡⊃t:t ⍝ error: quit. t rem upd ⍵?⍵ ⍝ remove each ⍳⍵ in random order. } soak 50 ⍝ reasonably large tree. 0 (⍳50)≡vec mk 50?50 ⍝ vector from random tree. 1 chk 0 ⍝ stats for null tree. 1 0 0 0 ⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝ _BST returns: ⍝∇ foldl pmat Back to: code Back to: Workspaces