More tests. Not all of them pass yet, but we are hopeful.

original commit: 8e498458aa635b201db6c005241d436f644c940d
This commit is contained in:
Sam Tobin-Hochstadt 2008-06-17 18:10:41 -04:00
parent 2a935208e9
commit f8ed6299c4
6 changed files with 146 additions and 1 deletions

View File

@ -16,4 +16,50 @@
(apply (case-lambda: (([x : Number] . [y : Number ... a]) x)
(([x : String] [y : String] . [z : String]) 0)
([y : Number] 0))
w))
w))
;; */*/poly
(plambda: (a ...) ([z : String] . [w : Number])
(apply (plambda: (b) ([x : b] . [y : Number]) x)
1 w))
(plambda: (a ...) ([z : String] . [w : Number])
(apply (plambda: (b) ([x : b] . [y : Number]) x)
1 2 3 w))
;; */*/polydots
(plambda: (a ...) ([z : String] . [w : Number])
(apply (plambda: (b ...) ([x : Number] . [y : Number]) x)
1 w))
(plambda: (a ...) ([z : String] . [w : Number])
(apply (plambda: (b ...) ([x : Number] . [y : Number]) x)
1 1 1 w))
;; */.../poly
(plambda: (a ...) ([z : String] . [w : Number ... a])
(apply (plambda: (b) ([x : Number] . [y : Number]) x)
1 w))
(plambda: (a ...) ([z : String] . [w : Number ... a])
(apply (plambda: (b) ([x : Number] . [y : Number]) x)
1 1 1 1 w))
;; */.../polydots
#;(plambda: (a ...) ([z : String] . [w : Number ... a])
(apply (plambda: (b ...) ([x : Number] . [y : Number]) x)
1 w))
#;(plambda: (a ...) ([z : String] . [w : Number ... a])
(apply (plambda: (b ...) ([x : Number] . [y : Number]) x)
1 1 1 1 w))
;; .../.../poly
(plambda: (a ...) ([z : String] . [w : Number ... a])
(apply (plambda: (b) ([x : Number] . [y : Number ... a]) x)
1 w))
#;(plambda: (a ...) ([z : String] . [w : Number ... a])
(apply (plambda: (b ...) ([x : Number] . [y : Number ... a]) x)
1 w))

View File

@ -0,0 +1,15 @@
#lang typed-scheme
(: f (case-lambda (Integer * -> Integer) (Number * -> Number)))
(define (f . x) (+ 1 2))
(: f4 (case-lambda (Integer * -> Integer) (Number * -> Number)))
(define (f4 . x) (apply + x))
(: f3 (case-lambda (Integer * -> Integer) (Number * -> Number)))
(define (f3 x y) (+ x y))
(+ 1 'foo)
(: f2 (case-lambda (Number * -> Number)))
(define (f2 x y) (+ x y))

View File

@ -0,0 +1,19 @@
#lang typed-scheme
(: fold-left (All (c a b ...) ((c a b ... b -> c) c (Listof a) (Listof b) ... b -> c)))
(define (fold-left f c as . bss)
(if (or (null? a)
(ormap null? bss))
c
(apply fold-left f
(apply f c (car as) (map car bss))
(cdr as) (map cdr bs))))
(: fold-right (All (c a b ...) ((c a b ... b -> c) c (Listof a) (Listof b) ... b -> c)))
(define (fold-right f c as . bss)
(if (or (null? a)
(ormap null? bss))
c
(apply f
(apply fold-left f c (cdr as) (map cdr bs))
(car as) (map car bss))))

View File

@ -0,0 +1,23 @@
#lang typed-scheme
;; (All (a ...) ( -> (a ... a -> Integer)))
#;
(plambda: (a ...) ()
(lambda: [ys : a ... a] 3))
(define x (plambda: (a ...) () (lambda: [ys : a ... a] 3)))
#;#;
(: y (All (a ...) ( -> (a ... a -> Integer))))
(define y (plambda: (a ...) () (lambda: [ys : a ... a] 3)))
#;#;
(: z (All (a ...) ( -> (a ... a -> Integer))))
(define z (lambda () (lambda ys 3)))
#;
((plambda: (a ...) () (lambda: [ys : a ... a] 3)))
#;
((plambda: (a ...) [xs : a ... a] (lambda: [ys : a ... a] 3))
1 2 3)

View File

@ -0,0 +1,30 @@
#lang typed-scheme
(apply (plambda: (a ...) [ys : (a ... a -> Number) *]
(lambda: [zs : a ... a]
(map (lambda: ([y : (a ... a -> Number)])
(apply y zs))
ys)))
(list (lambda: ([x : Number] [y : Number]) (+ x y))
(lambda: ([x : Number] [y : Number]) (- x y))
(lambda: ([x : Number] [y : Number]) (* x y))
(lambda: ([x : Number] [y : Number]) (/ x y))))
((apply (plambda: (a ...) [ys : (a ... a -> Number) *]
(lambda: [zs : a ... a]
(map (lambda: ([y : (a ... a -> Number)])
(apply y zs))
ys)))
(list (lambda: ([x : Number] [y : Number]) (+ x y))
(lambda: ([x : Number] [y : Number]) (- x y))
(lambda: ([x : Number] [y : Number]) (* x y))
(lambda: ([x : Number] [y : Number]) (/ x y))))
3 4)
(apply (plambda: (a ...) [ys : (a ... a -> Number) *]
(lambda: [zs : a ... a]
(map (lambda: ([y : (a ... a -> Number)])
(apply y zs))
ys)))
(list + - * /))

View File

@ -551,6 +551,18 @@
[tc-e (plambda: (b ...) [y : (Listof Integer) ... b] (apply append y))
(-polydots (b) (->... (list) ((-lst -Integer) b) (-lst -Integer)))]
[tc-err (plambda: (a ...) ([z : String] . [w : Number ... a])
(apply (plambda: (b) ([x : Number] . [y : Number ... a]) x)
1 1 1 1 w))]
[tc-err (plambda: (a ...) ([z : String] . [w : Number])
(apply (plambda: (b) ([x : Number] . [y : Number ... a]) x)
1 w))]
[tc-err (plambda: (a ...) ([z : String] . [w : Number ... a])
(apply (plambda: (b ...) ([x : Number] . [y : Number ... b]) x)
1 w))]
;; error tests
[tc-err (#%variable-reference number?)]
[tc-err (+ 3 #f)]