test-with-plus.rkt (3585B)
1 #lang type-expander 2 3 (require phc-adt phc-toolkit) 4 (adt-init) 5 6 (check-equal?: (with+ (tagged foo [b 'b1]) : (U (foo b))) 7 : (tagged foo [b 'b1]) 8 (tagged foo [b 'b1])) 9 (check-equal?: (with+ (tagged foo [b 'b1]) : (U (foo b)) [a 'a1]) 10 : (tagged foo [a 'a1] [b 'b1]) 11 (tagged foo [a 'a1] [b 'b1])) 12 (check-equal?: (with+ (tagged foo [b 'b1]) : (U (foo b)) [a 'a1] [c 'c1]) 13 : (tagged foo [a 'a1] [b 'b1] [c 'c1]) 14 (tagged foo [a 'a1] [b 'b1] [c 'c1])) 15 ;; Correctly gave an error: 16 ;(check-equal?: (with+ (tagged foo [b 'b1]) : (U (foo b)) [a 'a1] [b 'b1-update]) 17 ; : (tagged foo [a 'a1] [b 'b1-update]) 18 ; (tagged foo [a 'a1] [b 'b1-update])) 19 ;(check-equal?: (with+ (tagged foo [b 'b1]) : (U (foo b)) [b 'b1-update]) 20 ; : (tagged foo [b 'b1-update]) 21 ; (tagged foo [b 'b1-update])) 22 ;(check-equal?: (with+ (tagged foo [b 'b1]) : (U (foo b)) [a 'a1] [b 'b1-update] [c 'c1]) 23 ; : (tagged foo [a 'a1] [b 'b1-update] [c 'c1]) 24 ; (tagged foo [a 'a1] [b 'b1-update] [c 'c1])) 25 26 (check-equal?: (with+ (tagged foo [b 'b1] [d 'd1]) : (U (foo b d))) 27 : (tagged foo [b 'b1] [d 'd1]) 28 (tagged foo [b 'b1] [d 'd1])) 29 (check-equal?: (with+ (tagged foo [b 'b1] [d 'd1]) : (U (foo b d)) [a 'a1]) 30 : (tagged foo [a 'a1] [b 'b1] [d 'd1]) 31 (tagged foo [a 'a1] [b 'b1] [d 'd1])) 32 (check-equal?: (with+ (tagged foo [b 'b1] [d 'd1]) : (U (foo b d)) [a 'a1] [c 'c1]) 33 : (tagged foo [a 'a1] [b 'b1] [c 'c1] [d 'd1]) 34 (tagged foo [a 'a1] [b 'b1] [c 'c1] [d 'd1])) 35 ;(check-equal?: (with+ (tagged foo [b 'b1] [d 'd1]) : (U (foo b d)) [a 'a1] [b 'b1-update]) 36 ; : (tagged foo [a 'a1] [b 'b1-update] [d 'd1]) 37 ; (tagged foo [a 'a1] [b 'b1-update] [d 'd1])) 38 ;(check-equal?: (with+ (tagged foo [b 'b1] [d 'd1]) : (U (foo b d)) [b 'b1-update]) 39 ; : (tagged foo [b 'b1-update] [d 'd1]) 40 ; (tagged foo [b 'b1-update] [d 'd1])) 41 ;(check-equal?: (with+ (tagged foo [b 'b1] [d 'd1]) : (U (foo b d)) [a 'a1] [b 'b1-update] [c 'c1]) 42 ; : (tagged foo [a 'a1] [b 'b1-update] [c 'c1] [d 'd1]) 43 ; (tagged foo [a 'a1] [b 'b1-update] [c 'c1] [d 'd1])) 44 45 (check-equal?: (with+ (tagged foo [b 'b1] [d 'd1]) : (U (foo b d) (foo a d))) 46 : (tagged foo [b 'b1] [d 'd1]) 47 (tagged foo [b 'b1] [d 'd1])) 48 ;(check-equal?: (with+ (tagged foo [b 'b1] [d 'd1]) : (U (foo b d) (foo a d)) [a 'a1]) 49 ; : (tagged foo [a 'a1] [b 'b1] [d 'd1]) 50 ; (tagged foo [a 'a1] [b 'b1] [d 'd1])) 51 ;(check-equal?: (with+ (tagged foo [b 'b1] [d 'd1]) : (U (foo b d) (foo a d)) [a 'a1] [c 'c1]) 52 ; : (tagged foo [a 'a1] [b 'b1] [c 'c1] [d 'd1]) 53 ; (tagged foo [a 'a1] [b 'b1] [c 'c1] [d 'd1])) 54 ;(check-equal?: (with+ (tagged foo [b 'b1] [d 'd1]) : (U (foo b d) (foo a d)) [a 'a1] [b 'b1-update]) 55 ; : (tagged foo [a 'a1] [b 'b1-update] [d 'd1]) 56 ; (tagged foo [a 'a1] [b 'b1-update] [d 'd1])) 57 ;(check-equal?: (with+ (tagged foo [b 'b1] [d 'd1]) : (U (foo b d) (foo a d)) [b 'b1-update]) 58 ; : (tagged foo [b 'b1-update] [d 'd1]) 59 ; (tagged foo [b 'b1-update] [d 'd1])) 60 ;(check-equal?: (with+ (tagged foo [b 'b1] [d 'd1]) : (U (foo b d) (foo a d)) [a 'a1] [b 'b1-update] [c 'c1]) 61 ; : (tagged foo [a 'a1] [b 'b1-update] [c 'c1] [d 'd1]) 62 ; (tagged foo [a 'a1] [b 'b1-update] [c 'c1] [d 'd1]))