~ chicken-core (master) /tests/data-structures-tests.scm
Trap1;;;; data-structures-tests.scm23(import (chicken sort)4 (chicken string))56(define-syntax assert-error7 (syntax-rules ()8 ((_ expr)9 (assert (handle-exceptions _ #t expr #f)))))1011(assert (equal? 'bar (alist-ref 'foo '((foo . bar)))))12(assert (not (alist-ref 'foo '())))13(assert (not (alist-ref 'foo '((bar . foo)))))14(assert-error (alist-ref 'foo 'bar))15(assert-error (alist-ref 'foo '(bar)))1617(let ((cmp (lambda (x y) (eqv? x y))))18 (assert (equal? 'bar (alist-ref 'foo '((foo . bar)) cmp)))19 (assert (not (alist-ref 'foo '() cmp)))20 (assert (not (alist-ref 'foo '((bar . foo)) cmp)))21 (assert-error (alist-ref 'foo 'bar cmp))22 (assert-error (alist-ref 'foo '(bar) cmp)))232425(let ((alist '((foo . 123) ("bar" . "baz"))))26 (alist-update! 'foo 999 alist)27 (assert (= (alist-ref 'foo alist) 999))28 (alist-update! 'qux 'nope alist)29 (assert (not (alist-ref 'qux alist)))30 (assert (eq? 'yep (alist-ref 'qux (alist-update! 'qux 'yep alist))))31 (assert (eq? 'ok (alist-ref "bar" (alist-update! "bar" 'ok alist equal?) equal?))))3233(let ((alist '((foo . 123) ("bar" . "baz"))))34 (alist-update 'foo 999 alist)35 (assert (= (alist-ref 'foo alist) 123))36 (assert (eq? 'yep (alist-ref 'qux (alist-update 'qux 'yep alist))))37 (assert (eq? 'ok (alist-ref "bar" (alist-update "bar" 'ok alist equal?) equal?))))3839;; #808: strings with embedded nul bytes should not be compared40;; with ASCIIZ string comparison functions41(assert (substring=? "foo\x00;a" "foo\x00;a" 1 1))42(assert (substring-ci=? "foo\x00;a" "foo\x00;a" 1 1))43(assert (substring-ci=? "foo\x00;a" "foo\x00;A" 1 1))44(assert (= 2 (substring-index "o\x00;bar" "foo\x00;bar")))45(assert (= 2 (substring-index-ci "o\x00;bar" "foo\x00;bar")))46(assert (= 2 (substring-index-ci "o\x00;bar" "foo\x00;BAR")))47(assert (not (substring=? "foo\x00;a" "foo\x00;b" 1 1)))48(assert (not (substring-ci=? "foo\x00;a" "foo\x00;b" 1 1)))49(assert (substring=? "foo" "foo" 0 0 3))50(assert (substring-ci=? "foo" "foo" 0 0 3))51(assert (not (substring-index "o\x00;bar" "foo\x00;baz")))52(assert (not (substring-index-ci "o\x00;bar" "foo\x00;baz")))53(assert (= 0 (substring-index "" "")))54(assert (= 1 (substring-index "" "a" 1)))55(assert-error (substring=? "a" "a" 2))56(assert-error (substring=? "a" "a" -2))57(assert-error (substring=? "a" "a" 0 2))58(assert-error (substring=? "a" "a" 0 -2))59(assert-error (substring=? "a" "a" 0 0 2))60(assert-error (substring=? "a" "a" 0 0 -2))61(assert-error (substring-ci=? "a" "a" 2))62(assert-error (substring-ci=? "a" "a" -2))63(assert-error (substring-ci=? "a" "a" 0 2))64(assert-error (substring-ci=? "a" "a" 0 -2))65(assert-error (substring-ci=? "a" "a" 0 0 2))66(assert-error (substring-ci=? "a" "a" 0 0 -2))67(assert-error (substring-ci=? "a" "a" 0 0 2))68(assert-error (substring-index "" "a" 2))69(assert-error (substring-index "a" "b" 2))70(assert (not (substring-index "a" "b" 1)))71(assert (not (substring-index "ab" "")))72(assert (= 0 (string-compare3 "foo\x00;a" "foo\x00;a")))73(assert (> 0 (string-compare3 "foo\x00;a" "foo\x00;b")))74(assert (< 0 (string-compare3 "foo\x00;b" "foo\x00;a")))75(assert (= 0 (string-compare3-ci "foo\x00;a" "foo\x00;a")))76(assert (= 0 (string-compare3-ci "foo\x00;a" "foo\x00;A")))77(assert (> 0 (string-compare3-ci "foo\x00;a" "foo\x00;b")))78(assert (> 0 (string-compare3-ci "foo\x00;A" "foo\x00;b")))79(assert (< 0 (string-compare3-ci "foo\x00;b" "foo\x00;a")))80(assert (< 0 (string-compare3-ci "foo\x00;b" "foo\x00;A")))8182(assert (string=? "bde" (string-translate* "abcd"83 '(("a" . "b")84 ("b" . "")85 ("c" . "d")86 ("d" . "e")))))87(assert (string=? "bc" (string-translate* "abc"88 '(("ab" . "b")89 ("bc" . "WRONG")))))90(assert (string=? "x" (string-translate* "ab" '(("ab" . "x")))))91(assert (string=? "xy" (string-translate* "xyz" '(("z" . "")))))9293;; topological-sort9495(assert (equal? '() (topological-sort '() eq?)))96(assert (equal? '(a b c d) (topological-sort '((a b) (b c) (c d)) eq?)))97(assert (equal? '(a b c d) (topological-sort '((a b) (c d)) eq?)))98(assert-error (topological-sort '((a b) (b a)) eq?))99(assert100 (equal?101 (topological-sort102 '((i am)103 (not trying)104 (confuse the)105 (am trying)106 (trying to)107 (am not)108 (trying the)109 (to confuse)110 (the issue))111 eq?)112 '(i am not trying to confuse the issue)))