;;;; hash-trie-test.scm -*- Scheme -*- ;;;; Kon Lovett, Mar '20 (import test) (include "test-gloss.incl") (test-begin "Hash Trie") (import hash-trie) ;;; (test-group "Symbol Type" (let ( (ht (make-hash-trie hash-trie-type:symbol)) ) (test-assert (hash-trie? ht)) (test hash-trie-type:symbol (hash-trie/type ht)) (test-assert (hash-trie/empty? ht)) (test 0 (hash-trie/count ht)) (set! ht (hash-trie/insert ht 'foo "f00")) (set! ht (hash-trie/insert ht 'bar "b@r")) (set! ht (hash-trie/insert ht 'baz "b@z")) (test-assert (not (hash-trie/empty? ht))) (test 3 (hash-trie/count ht)) (test-assert (hash-trie/member? ht 'bar)) (test-assert (hash-trie/lookup ht 'bar #f)) (set! ht (hash-trie/delete ht 'bar)) (test 2 (hash-trie/count ht)) (test-assert (not (hash-trie/member? ht 'bar))) (test 'not-found (hash-trie/lookup ht 'bar 'not-found)) (gloss (hash-trie->alist ht)) (set! ht (hash-trie/modify ht 'foo #f (lambda (d) (if d (string-append d " X") "n3m0")))) (test "f00 X" (hash-trie/lookup ht 'foo #f)) (gloss (hash-trie->alist ht)) ) ) (test-group "Real Type" (let ( (ht (make-hash-trie hash-trie-type:real-number)) (foo #xf0f0f0f0f0f0f0f0f0f0f0f0f0f0) (bar #xf0f0f0f0f0f0f0f0f0f0f0) (baz #xf0f0f0f0f0f0f0f0 ) ) (test-assert (hash-trie? ht)) (test hash-trie-type:real-number (hash-trie/type ht)) (test-assert (hash-trie/empty? ht)) (test 0 (hash-trie/count ht)) (set! ht (hash-trie/insert ht foo "f00")) (set! ht (hash-trie/insert ht bar "b@r")) (set! ht (hash-trie/insert ht baz "b@z")) (test-assert (not (hash-trie/empty? ht))) (test 3 (hash-trie/count ht)) (test-assert (hash-trie/member? ht bar)) (test-assert (hash-trie/lookup ht bar #f)) (set! ht (hash-trie/delete ht bar)) (test 2 (hash-trie/count ht)) (test-assert (not (hash-trie/member? ht bar))) (test 'not-found (hash-trie/lookup ht bar 'not-found)) (gloss (hash-trie->alist ht)) (set! ht (hash-trie/modify ht foo #f (lambda (d) (if d (string-append d " X") "n3m0")))) (test "f00 X" (hash-trie/lookup ht foo #f)) (gloss (hash-trie->alist ht)) ) ) ;;; (test-end "Hash Trie") (test-exit)