35 lines
918 B
Racket
35 lines
918 B
Racket
#lang racket/base
|
|
|
|
(require "test-utils.rkt"
|
|
racket/format
|
|
rackunit
|
|
(rep rep-utils)
|
|
(types generalize abbrev union)
|
|
(for-syntax racket/base syntax/parse))
|
|
|
|
(provide tests)
|
|
(gen-test-main)
|
|
|
|
(define-syntax check-generalize
|
|
(syntax-parser
|
|
[(_ t*:expr exp*:expr)
|
|
#'(test-case (~a `(t* => exp*))
|
|
(define actual (generalize t*))
|
|
(define expected exp*)
|
|
(with-check-info (['actual actual]
|
|
['expected expected])
|
|
(unless (type-equal? actual expected)
|
|
(fail-check "Didn't generalize to expected type."))))]))
|
|
|
|
|
|
(define tests
|
|
(test-suite "Generalize Tests"
|
|
(check-generalize -Null (-lst Univ))
|
|
(check-generalize
|
|
(-pair -Symbol (-lst -Symbol))
|
|
(-lst -Symbol))
|
|
(check-generalize
|
|
(-pair -Symbol (Un -Null (-pair -Symbol (-lst -Symbol))))
|
|
(-lst -Symbol))
|
|
))
|