test-empty.rkt (3396B)
1 #lang typed/racket 2 3 (require phc-adt 4 phc-toolkit 5 type-expander 6 typed/rackunit 7 (only-in (lib "phc-adt/tagged-structure-low-level.hl.rkt") 8 λ-tagged-get-field)) 9 (adt-init) 10 11 (define-structure empty-st) 12 (define-tagged empty-tg) 13 (define-constructor empty-ct :) 14 (define-constructor empty-ct-t2 #:tag empty-ct ::) 15 (define-constructor empty-ct-t3 #:tag empty-ct !) 16 (define-constructor empty-ct-2 ::) 17 (define-constructor empty-ct-3 !) 18 19 ;(ann empty-ct (→ (constructor empty-ct))) 20 ;(ann (empty-ct) (constructor empty-ct)) 21 (check-equal?: (if (match (constructor empty-ct) 22 [(empty-ct) #t] 23 [_ #f]) 24 #t 25 #f) 26 : #t 27 #t) 28 ;(ann (constructor empty-ct) empty-ct) 29 (check-ann empty-ct? 30 (→ Any Boolean : (constructor empty-ct))) 31 (check-equal?: (if (empty-ct? (constructor empty-ct)) #t #f) 32 : #t 33 #t) 34 35 (check-ann (structure #:builder) 36 (→ (structure))) 37 (check-ann (tagged empty-tg #:builder) 38 (→ (tagged empty-tg))) 39 (check-ann (constructor empty-ct :) 40 (→ (constructor empty-ct))) 41 (check-ann (constructor empty-ct ::) 42 (→ Null (constructor empty-ct))) 43 (check-ann (constructor empty-ct !) 44 (→ Any * (constructor empty-ct))) 45 46 (check-true: (match ((constructor empty-ct :)) 47 [(tagged empty-ct [values '()]) #t] 48 [_ #f])) 49 50 (check-true: (match ((constructor empty-ct ::) null) 51 [(tagged empty-ct [values '()]) #t] 52 [_ #f])) 53 54 (check-true: (match ((constructor empty-ct !)) 55 [(tagged empty-ct [values '()]) #t] 56 [_ #f])) 57 58 (check-true: (match (constructor empty-ct) 59 [(tagged empty-ct [values '()]) #t] 60 [_ #f])) 61 62 (check-ann (let ([v ((constructor empty-ct ::) null)]) 63 (if ((|(tagged-cast-predicate empty-ct values)| 64 (make-predicate Null)) 65 v) 66 v 67 #f)) 68 (constructor empty-ct)) 69 70 ;; result type should be (constructor empty-ct . Number) 71 (check-ann (constructor empty-ct . #{1 : Number}) 72 (constructor empty-ct . Number)) 73 (check-ann (constructor empty-ct #:rest 1 : Number) 74 (constructor empty-ct . Number)) 75 76 (check-ann (constructor empty-ct . 1) 77 (constructor empty-ct . 1)) 78 (check-ann (constructor empty-ct #:rest 1) 79 (constructor empty-ct . 1)) 80 (check-ann (constructor empty-ct #:rest (list 1 2)) 81 (constructor empty-ct Number Number)) 82 83 (check-ann (constructor empty-ct 1) 84 (constructor empty-ct 1)) 85 (check-ann (constructor empty-ct [1 : Number]) 86 (constructor empty-ct Number)) 87 (check-ann (constructor empty-ct) 88 (constructor empty-ct)) 89 (check-ann (constructor empty-ct) 90 (tagged empty-ct [values Null])) 91 92 (check-equal?-classes: 93 [(constructor empty-ct . #{1 : Number}) 94 (constructor empty-ct #:rest 1 : Number) 95 (constructor empty-ct . 1) 96 (constructor empty-ct #:rest 1)] 97 [(constructor empty-ct #:rest (list 1 2))] 98 [(constructor empty-ct 1) 99 (constructor empty-ct [1 : Number])] 100 [(constructor empty-ct) 101 (constructor empty-ct . #{null : Null}) 102 (constructor empty-ct #:rest null : Null) 103 (constructor empty-ct . null) 104 (constructor empty-ct #:rest null)])