35 lines
1.2 KiB
Racket
35 lines
1.2 KiB
Racket
#lang typed/racket
|
|
|
|
(require typed-struct-props
|
|
typed/rackunit)
|
|
|
|
(struct/props (A) foo ([f : A]) #:transparent
|
|
#:property prop:equal+hash (list (λ (a b rec) #f)
|
|
(λ (a rec) 42)
|
|
(λ (a rec) 43)))
|
|
|
|
(struct/props (A) bar ([f : A]) #:transparent)
|
|
|
|
(test-not-exn "The structure's constructor and type work properly"
|
|
(λ () (ann (foo "b") (foo String))))
|
|
|
|
(test-equal? "The structure's constructor and accessor work properly"
|
|
(ann (foo-f (foo "b")) String)
|
|
"b")
|
|
|
|
(test-begin
|
|
(test-false "The equal? function supplied to #:equal+hash is used"
|
|
(equal? (foo 0) (foo 0)))
|
|
|
|
(test-true "When unspecified, the default implementation of equal? is used"
|
|
(equal? (bar 0) (bar 0))))
|
|
|
|
(test-equal? "The equal-hash-code function supplied to #:equal+hash is used"
|
|
(equal-hash-code (foo "d"))
|
|
(equal-hash-code (foo "e")))
|
|
|
|
(test-equal?
|
|
"The equal-secondary hash-code function supplied to #:equal+hash is used"
|
|
(equal-secondary-hash-code (foo 'f))
|
|
(equal-secondary-hash-code (foo 'g)))
|