67 lines
1.5 KiB
Racket
67 lines
1.5 KiB
Racket
#lang racket/base
|
|
(require rackunit
|
|
data/order)
|
|
|
|
;; for tests
|
|
(struct fish (kind) #:transparent)
|
|
(struct fowl (kind) #:transparent)
|
|
|
|
;; datum-order tests
|
|
|
|
(define-syntax-rule (t cmp x y)
|
|
(test-case (format "~s" '(t cmp x y))
|
|
(check-equal? (datum-order x y) 'cmp)))
|
|
|
|
(t = 1 1)
|
|
(t = +inf.0 +inf.0)
|
|
(t = 8.0 8.0)
|
|
(t = +nan.0 +nan.0)
|
|
(t = +nan.0 (- +inf.0 +inf.0))
|
|
(t = 'apple 'apple)
|
|
(t = '(a #:b c) '(a #:b c))
|
|
(t = "apricot" "apricot")
|
|
(t = '#(1 2 3) '#(1 2 3))
|
|
(t = (box 'car) (box 'car))
|
|
(t = (box 'car) '#&car)
|
|
(t = '#s(point a 1) '#s(point a 1))
|
|
(t = (fish 'alewife) (fish 'alewife))
|
|
|
|
(t < 1 2)
|
|
(t > 8.0 5.0)
|
|
(t < 'apple 'candy)
|
|
(t < '(a #:b c) '(a #:c d c))
|
|
(t > '(5 . 4) '(3 2 1))
|
|
(t < '(a b . c) '(a b . z))
|
|
(t > "apricot" "apple")
|
|
(t > '#(1 2 3) '#(1 2))
|
|
(t < '#(1 2 3) '#(1 3))
|
|
(t > (box 'car) (box 'candy))
|
|
(t < '#s(point a 1) '#s(point b 0))
|
|
(t < '#s(A 1 2) '#s(Z 3 4 5))
|
|
(t < (fish 'alewife) (fish 'sockeye))
|
|
|
|
(define-syntax-rule (tc x y)
|
|
(test-case (format "~s" '(tc x y))
|
|
(let ([xy (datum-order x y)]
|
|
[xy2 (datum-order x y)]
|
|
[yx (datum-order y x)]
|
|
[xy3 (datum-order x y)])
|
|
;; check consistency across multiple runs
|
|
(check-equal? xy xy2)
|
|
(check-equal? xy xy3)
|
|
;; check oppositeness
|
|
(check member (list xy yx) '((< >) (> <))))))
|
|
|
|
(tc 1 2.0)
|
|
(tc 3+5i 3+2i)
|
|
(tc 'apple "zucchini")
|
|
(tc '(a b) '(a b . c))
|
|
(tc 0 'zero)
|
|
|
|
(tc (fish 'alewife) (fowl 'dodo))
|
|
|
|
(tc (fish 'alewife)
|
|
(let ()
|
|
(struct fish (x))
|
|
(fish 'alewife)))
|