Clean up infer-tests.
original commit: b98eb0bc78fd596da509d7b02e88f4c303578c50
This commit is contained in:
parent
27f4a90c21
commit
cc6ff2d0b7
|
@ -1,10 +1,7 @@
|
|||
#lang scheme/base
|
||||
(require "test-utils.rkt" (for-syntax scheme/base))
|
||||
(require (rep type-rep)
|
||||
(r:infer infer)
|
||||
(types numeric-tower union utils abbrev)
|
||||
rackunit)
|
||||
|
||||
#lang racket/base
|
||||
(require "test-utils.rkt"
|
||||
rackunit
|
||||
(types numeric-tower utils abbrev))
|
||||
|
||||
|
||||
(provide fv-tests)
|
||||
|
@ -29,97 +26,3 @@
|
|||
|
||||
[fv-t (->* null (-v a) -Number) a] ;; check that a is CONTRAVARIANT
|
||||
))
|
||||
|
||||
(define-syntax-rule (i2-t t1 t2 (a b) ...)
|
||||
(test-check (format "~a ~a" t1 t2)
|
||||
equal?
|
||||
(infer t1 t2 (fv t1) (fv t1))
|
||||
(list (list a b) ...)))
|
||||
|
||||
(define-syntax-rule (i2-l t1 t2 fv (a b) ...)
|
||||
(test-check (format "~a ~a" t1 t2)
|
||||
equal?
|
||||
(infer/list t1 t2 fv fv)
|
||||
(list (list a b) ...)))
|
||||
|
||||
(define (f t1 t2) (infer t1 t2 (fv t1) (fv t1)))
|
||||
|
||||
(define-syntax-rule (i2-f t1 t2)
|
||||
(test-false (format "~a ~a" t1 t2)
|
||||
(f t1 t2)))
|
||||
#|
|
||||
(define (i2-tests)
|
||||
(test-suite "Tests for infer"
|
||||
[i2-t (-v a) N ('a N)]
|
||||
[i2-t (-pair (-v a) (-v a)) (-pair N (Un N B)) ('a (Un N B))]
|
||||
[i2-t (-lst (-v a)) (-pair N (-pair N (-val null))) ('a N)]
|
||||
[i2-t (-lst (-v a)) (-pair N (-pair B (-val null))) ('a (Un N B))]
|
||||
[i2-t Univ (Un N B)]
|
||||
|
||||
[i2-t ((-v a) . -> . (-v b)) (-> N N) ('b N) ('a N)]
|
||||
[i2-l (list (-v a) (-v a) (-v b)) (list (Un (-val 1) (-val 2)) N N) '(a b) ('b N) ('a N)]
|
||||
[i2-l (list (-> (-v a) Univ) (-lst (-v a))) (list (-> N (Un N B)) (-lst N)) '(a) ('a N)]
|
||||
[i2-l (list (-> (-v a) (-v b)) (-lst (-v a))) (list (-> N N) (-lst (Un (-val 1) (-val 2)))) '(a b) ('b N) ('a N)]
|
||||
[i2-l (list (-lst (-v a))) (list (-lst (Un B N))) '(a) ('a (Un N B))]
|
||||
;; error tests
|
||||
[i2-f (-lst (-v a)) Univ]))
|
||||
|
||||
|
||||
|
||||
(define-syntax-rule (co-t a b c)
|
||||
(test-case (format "~a ~a" a b)
|
||||
(check equal? ((combine 'co) a b) c)
|
||||
(check equal? ((combine 'co) b a) c)))
|
||||
(define-syntax-rule (co-f a b)
|
||||
(test-case (format "fail ~a ~a" a b)
|
||||
(check-exn exn:infer? (lambda () ((combine 'co) a b)))
|
||||
(check-exn exn:infer? (lambda () ((combine 'co) b a)))))
|
||||
|
||||
(define-syntax-rule (un-t a b c)
|
||||
(test-case (format "~a ~a" a b)
|
||||
(check equal? (s (g ((table:un 'co) a b))) (s c))
|
||||
(check equal? (s (g ((table:un 'co) b a))) (s c))))
|
||||
(define-syntax-rule (un-f a b)
|
||||
(test-case (format "fail ~a ~a" a b)
|
||||
(check-exn exn:infer? (lambda () ((table:un 'co) a b)))
|
||||
(check-exn exn:infer? (lambda () ((table:un 'co) b a)))))
|
||||
|
||||
;; examples for testing combine
|
||||
|
||||
(define c-ex1 `(contra ,(Un N B)))
|
||||
(define c-ex2 `(contra ,B))
|
||||
(define c-ex3 `(#f ,N))
|
||||
(define c-ex4 `(co ,N))
|
||||
(define c-ex5 `(co ,B))
|
||||
(define c-ex6 `fail)
|
||||
|
||||
;; examples for testing table:un
|
||||
|
||||
(define m-ex1
|
||||
(table:sexp->eq `((a ,c-ex3) (b ,c-ex6) (c ,c-ex5) (d ,c-ex1))))
|
||||
(define m-ex2
|
||||
(table:sexp->eq `((a ,c-ex4) (b ,c-ex4) (c ,c-ex2) (d ,c-ex2))))
|
||||
(define m-ex3
|
||||
(table:sexp->eq `((a ,c-ex4) (b ,c-ex4) (c ,c-ex2) (d ,c-ex5))))
|
||||
|
||||
|
||||
(define (combine-tests)
|
||||
(test-suite "Combine/Table Union Tests"
|
||||
(co-t c-ex1 c-ex2 c-ex2)
|
||||
(co-t c-ex2 c-ex2 c-ex2)
|
||||
(co-f c-ex3 c-ex2)
|
||||
(co-f c-ex4 c-ex5)
|
||||
(co-t c-ex5 c-ex2 `(both ,B))
|
||||
(co-t c-ex5 c-ex6 c-ex5)
|
||||
[co-t c-ex3 c-ex4 c-ex4]
|
||||
[un-t m-ex1 m-ex2 `((b (co ,N)) (a (co ,N)) (c (both ,B)) (d (contra ,B)))]
|
||||
[un-f m-ex1 m-ex3]))
|
||||
|
||||
|
||||
(define (g e) (table:to-sexp e))
|
||||
|
||||
(define (s e)
|
||||
(sort e (lambda (a b) (string<? (symbol->string (car a)) (symbol->string (car b))))))
|
||||
|
||||
|#
|
||||
(define-go fv-tests)
|
||||
|
|
Loading…
Reference in New Issue
Block a user