racket/collects/tests/data/order.rkt

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)))