racket/collects/tests/data/integer-set.rkt
2013-02-23 02:09:56 -05:00

68 lines
2.4 KiB
Racket

#lang racket/base
(require data/integer-set
racket/stream
rackunit
racket/sequence)
(test-equal? "integer-set"
(integer-set-contents (make-integer-set '((-1 . 2) (4 . 10))))
'((-1 . 2) (4 . 10)))
(test-true "integer-set?"
(integer-set? (make-integer-set '((-1 . 2) (4 . 10)))))
(test-equal? "set-integer-set-contents!"
(let ([s (make-integer-set '((-1 . 2) (4 . 10)))])
(set-integer-set-contents! s '((1 . 1) (3 . 3)))
(integer-set-contents s))
'((1 . 1) (3 . 3)))
(test-true "well-formed-set? true"
(well-formed-set? '((-1 . 2) (4 . 10))))
(test-false "well-formed-set? false"
(well-formed-set? '((1 . 5) (6 . 7))))
(define s1 (make-integer-set '((-1 . 2) (4 . 10))))
(define s2 (make-integer-set '((1 . 1) (3 . 3))))
(check-true (member? 1 (intersect s1 s2)))
(check-false (member? 3 (intersect s1 s2)))
(check-true (member? 2 (union s1 s2)))
(check-false (member? 15 (union s1 s2)))
(check-true (member? 4 (subtract s1 s2)))
(check-false (member? 1 (subtract s1 s2)))
(check-true (member? 4 (symmetric-difference s1 s2)))
(check-true (member? 3 (symmetric-difference s1 s2)))
(check-false (member? 1 (symmetric-difference s1 s2)))
(check-equal? (count s1) 11)
(check-equal? (count s2) 2)
(check-true (member? (get-integer s1) s1))
(check-false (get-integer (make-integer-set '())))
(check-equal? (partition (list (make-integer-set '((1 . 2) (5 . 10)))
(make-integer-set '((2 . 2) (6 . 6) (12 . 12)))))
(list (make-integer-set '((2 . 2) (6 . 6)))
(make-integer-set '((12 . 12)))
(make-integer-set '((1 . 1) (5 . 5) (7 . 10)))))
(check-true (subset? (make-integer-set '((1 . 1))) s2))
;; check gen:stream
(check-equal? (stream-first s1) -1)
(check-equal? (stream-first (stream-rest s1)) 0)
(check-equal? (stream-first (stream-rest s2)) 3)
(check-true (stream-empty? (make-integer-set '())))
(check-false (stream-empty? s1))
(check-equal? (stream->list (stream-map add1 s2)) '(2 4))
;; 2013-02-20: checks commit bd1141c670bfc7981761fbfb53f548c2abb1f12d
;; (previous version results in contract error)
(check-true (well-formed-set? (integer-set-contents (stream-rest (make-range 1 10)))))
(check-true (well-formed-set? (integer-set-contents (sequence-tail (make-range 1 10) 1))))