test-traversal-2.rkt (3629B)
1 #lang typed/racket 2 3 (require "traversal-util.rkt" 4 type-expander 5 phc-adt 6 "ck.rkt" 7 "../dispatch-union.rkt") ;; DEBUG 8 (adt-init) 9 10 11 12 (define-fold f₁ t₁ (tagged tg [a String] [b Boolean]) String) 13 (define-fold f₂ t₂ (U (tagged tg [a String] [b Boolean])) String) 14 (define-fold f₃ t₃ (U (tagged tg [a String] [b Boolean]) 15 (tagged tg [a Boolean] [c String])) 16 String) 17 (define-fold f₄ t₄ (U (tagged tg [a String] [b Boolean]) 18 String 19 (tagged tg [a Boolean] [c String])) 20 String) 21 (define-fold f₅ t₅ (U (tagged t0) 22 String 23 (tagged tg [a Boolean] [c String])) 24 String) 25 (define-fold f₆ t₆ (U String 26 (tagged tg [a String] [b Boolean])) 27 String) 28 29 (define (string->symbol+acc [x : String] [acc : Integer]) 30 (values (string->symbol x) (add1 acc))) 31 32 (check-equal?-values: 33 ((f₁ string? string->symbol+acc) (tagged tg [a "abc"] [b #f]) 0) 34 : (Values (tagged tg [a Symbol] [b Boolean]) Integer) 35 (tagged tg [a 'abc] [b #f]) 1) 36 37 (check-equal?-values: 38 ((f₂ string? string->symbol+acc) (tagged tg [a "abc"] [b #f]) 0) 39 : (Values (U (tagged tg [a Symbol] [b Boolean])) Integer) 40 (tagged tg [a 'abc] [b #f]) 1) 41 42 (check-equal?-values: 43 ((f₃ string? string->symbol+acc) (tagged tg [a "abc"] [b #f]) 0) 44 : (Values (U (tagged tg [a Symbol] [b Boolean]) 45 (tagged tg [a Boolean] [c Symbol])) 46 Integer) 47 (tagged tg [a 'abc] [b #f]) 1) 48 49 (check-equal?-values: 50 ((f₃ string? string->symbol+acc) (tagged tg [a #t] [c "def"]) 0) 51 : (Values (U (tagged tg [a Symbol] [b Boolean]) 52 (tagged tg [a Boolean] [c Symbol])) 53 Integer) 54 (tagged tg [a #t] [c 'def]) 1) 55 56 (check-equal?-values: 57 ((f₄ string? string->symbol+acc) (tagged tg [a "abc"] [b #f]) 0) 58 : (Values (U (tagged tg [a Symbol] [b Boolean]) 59 Symbol 60 (tagged tg [a Boolean] [c Symbol])) 61 Integer) 62 (tagged tg [a 'abc] [b #f]) 1) 63 64 (check-equal?-values: 65 ((f₄ string? string->symbol+acc) "ghi" 0) 66 : (Values (U (tagged tg [a Symbol] [b Boolean]) 67 Symbol 68 (tagged tg [a Boolean] [c Symbol])) 69 Integer) 70 'ghi 1) 71 72 (check-equal?-values: 73 ((f₄ string? string->symbol+acc) (tagged tg [a #t] [c "def"]) 0) 74 : (Values (U (tagged tg [a Symbol] [b Boolean]) 75 Symbol 76 (tagged tg [a Boolean] [c Symbol])) 77 Integer) 78 (tagged tg [a #t] [c 'def]) 1) 79 80 (check-equal?-values: 81 ((f₅ string? string->symbol+acc) (tagged t0 #:instance) 0) 82 : (Values (U (tagged t0) 83 Symbol 84 (tagged tg [a Boolean] [c Symbol])) 85 Integer) 86 (tagged t0 #:instance) 0) 87 88 (check-equal?-values: 89 ((f₅ string? string->symbol+acc) "ghi" 0) 90 : (Values (U (tagged t0) 91 Symbol 92 (tagged tg [a Boolean] [c Symbol])) 93 Integer) 94 'ghi 1) 95 96 (check-equal?-values: 97 ((f₅ string? string->symbol+acc) (tagged tg [a #t] [c "def"]) 0) 98 : (Values (U (tagged t0) 99 Symbol 100 (tagged tg [a Boolean] [c Symbol])) 101 Integer) 102 (tagged tg [a #t] [c 'def]) 1) 103 104 (check-equal?-values: 105 ((f₆ string? string->symbol+acc) (tagged tg [a "abc"] [b #f]) 0) 106 : (Values (U (tagged tg [a Symbol] [b Boolean]) 107 Symbol) 108 Integer) 109 (tagged tg [a 'abc] [b #f]) 1) 110 111 (check-equal?-values: 112 ((f₆ string? string->symbol+acc) "ghi" 0) 113 : (Values (U (tagged tg [a Symbol] [b Boolean]) 114 Symbol) 115 Integer) 116 'ghi 1)