;;; Test case for disjoint-set library ;;; written by Peter Lane, 2010 (require-extension disjoint-set) (require-extension srfi-78) (require-extension srfi-13) (check-set-mode! 'summary) (let ((eg1 (make-disjoint-set string-hash string=?)) (item1 "a") (item2 "b") (item3 "c")) ;; check error on looking for nonexistent item (check (disjoint-set:find eg1 item1) => 'item-not-found) ;; add the three items (disjoint-set:make eg1 item1) (disjoint-set:make eg1 item2) (disjoint-set:make eg1 item3) ;; check all three give different references (let ((ref1 (disjoint-set:find eg1 item1)) (ref2 (disjoint-set:find eg1 item2)) (ref3 (disjoint-set:find eg1 item3))) (check (eq? ref1 ref2) => #f) (check (eq? ref2 ref3) => #f) (check (eq? ref3 ref1) => #f)) ;; merge one and two (disjoint-set:union eg1 (disjoint-set:find eg1 item1) (disjoint-set:find eg1 item2)) (let ((ref1 (disjoint-set:find eg1 item1)) (ref2 (disjoint-set:find eg1 item2)) (ref3 (disjoint-set:find eg1 item3))) (check (eq? ref1 ref2) => #t) (check (eq? ref2 ref3) => #f) (check (eq? ref3 ref1) => #f)) ;; merge one and three (disjoint-set:union eg1 (disjoint-set:find eg1 item1) (disjoint-set:find eg1 item3)) (let ((ref1 (disjoint-set:find eg1 item1)) (ref2 (disjoint-set:find eg1 item2)) (ref3 (disjoint-set:find eg1 item3))) (check (eq? ref1 ref2) => #t) (check (eq? ref2 ref3) => #t) (check (eq? ref3 ref1) => #t))) (if (check-passed? 10) 'ok (error "Failed test suite"))