test-typed-dotlambda.rkt (4053B)
1 #lang typed/dotlambda 2 3 (require (rename-in typed/rackunit [check-equal? check-equal?:]) 4 ;"get.lp2.rkt" 5 ;"graph-test.rkt" 6 typed-map 7 (for-syntax racket/base)) 8 9 (require racket/stxparam) 10 11 (check-equal?: 12 (syntax-parameterize ([#%dotted-id (make-rename-transformer #'list)]) 13 (let ([x 1] [y 2] [z 3] [#%dot-separator '|.|]) 14 (list 'x.y 15 '.x.y 16 x.y 17 .x.y))) 18 '((#%dotted-id x #%dot-separator y) 19 (#%dotted-id #%dot-separator x #%dot-separator y) 20 (1 |.| 2) 21 (|.| 1 |.| 2))) 22 23 (check-equal?: (let ([v 4]) v.sqrt.-) -2) 24 25 (let ((foo..bar 42)) 26 (check-equal?: foo..bar 42)) 27 28 (define di '#%dotted-id) 29 (define d '#%dot-separator) 30 31 (check-equal?: 'foo.bar (list di 'foo d 'bar)) 32 33 ;; Srcloc tests: 34 ;(let .a b) ;; Error on the whole .a 35 ;(let .a.b b) ;; Error on the whole .a.b 36 ;(let a.b b) ;; Error on the whole a.b 37 38 #| 39 TODO: re-enable or move these tests. 40 (check-equal?: g.streets…houses…owner.name 41 : (Listof (Listof String)) 42 (list (list "Amy" "Anabella") (list "Jack"))) 43 (check-equal?: (map: (curry map .owner.name) g.streets…houses) 44 : (Listof (Listof String)) 45 (list (list "Amy" "Anabella") (list "Jack"))) 46 |# 47 48 (define (slen [n : Index] [str : String]) 49 (check-equal?: (string-length str) n) 50 (string->symbol str)) 51 52 (check-equal?: '(a . b) (cons 'a 'b)) 53 (check-equal?: '(a . b.c) (list 'a di 'b d 'c)) 54 (check-equal?: '(a . b.c.d) (list 'a di 'b d 'c d 'd)) 55 (check-equal?: '(a.c . b) (cons (list di 'a d 'c) 'b)) 56 (check-equal?: '(a.c.d . b) (cons (list di 'a d 'c d 'd) 'b)) 57 58 (check-equal?: '.aa.bb..cc.d (list di d 'aa d (slen 5 "bb.cc") d 'd)) 59 (check-equal?: '…aa...bb..cc.d (list di '… d (slen 9 "aa..bb.cc") d 'd)) 60 (check-equal?: '.…aa...bb..cc.d (list di d '… d (slen 9 "aa..bb.cc") d 'd)) 61 (check-equal?: '…aa.….bb..cc.d 62 (list di '… d 'aa d '… d (slen 5 "bb.cc") d 'd)) 63 (check-equal?: '.…aa.….bb..cc.d 64 (list di d '… d 'aa d '… d (slen 5 "bb.cc") d 'd)) 65 (check-equal?: '.aa.….bb..cc.d (list di d 'aa d '… d (slen 5 "bb.cc") d 'd)) 66 (check-equal?: '.aa.….bb.cc.d (list di d 'aa d '… d 'bb d 'cc d 'd)) 67 (check-equal?: '…aa.….bb.cc.d (list di '… d 'aa d '… d 'bb d 'cc d 'd)) 68 (check-equal?: '.…aa.….bb.cc.d (list di d '… d 'aa d '… d 'bb d 'cc d 'd)) 69 70 (check-equal?: 'aa.bb..cc.d (list di 'aa d (slen 5 "bb.cc") d 'd)) 71 (check-equal?: 'aa...bb..cc.d (list di (slen 9 "aa..bb.cc") d 'd)) 72 (check-equal?: 'aa…bb..cc.d (list di 'aa d '… d (slen 5 "bb.cc") d 'd)) 73 (check-equal?: 'aa.….bb..cc.d (list di 'aa d '… d (slen 5 "bb.cc") d 'd)) 74 (check-equal?: 'aa.….bb.cc.d (list di 'aa d '… d 'bb d 'cc d 'd)) 75 76 (check-equal?: 'aa…bb (list di 'aa d '… d 'bb)) 77 (check-equal?: 'aa… (list di 'aa d '…)) 78 (check-equal?: 'aa…. (slen 3 "aa…")) 79 (check-equal?: 'aa.. (slen 3 "aa.")) 80 (check-equal?: 'aa... (slen 4 "aa..")) 81 82 (check-equal?: '… (slen 1 "…")) 83 (check-equal?: '…+ (slen 2 "…+")) 84 (check-equal?: '... (slen 3 "...")) 85 (check-equal?: '...+ (slen 4 "...+")) 86 87 (check-equal?: (λx.(+ x x) 3) 6) 88 (check-equal?: (λy.(+ y y) 3) 6) 89 (check-equal?: (λ.(+ % %) 3) 6) 90 (check-equal?: (λy.(+ y) 3) 3) 91 (check-equal?: (λy. y.sqrt.- 4) -2) 92 (check-equal?: (.sqrt.- 4) -2) 93 94 (check-equal?: '…aa.…bb..cc.d (list di '… d 'aa d '… d (slen 5 "bb.cc") d 'd)) 95 (check-equal?: '…aa….bb..cc.d (list di '… d 'aa d '… d (slen 5 "bb.cc") d 'd)) 96 (check-equal?: '.…aa.…bb..cc.d 97 (list di d '… d 'aa d '… d (slen 5 "bb.cc") d 'd)) 98 (check-equal?: '.…aa….bb..cc.d 99 (list di d '… d 'aa d '… d (slen 5 "bb.cc") d 'd)) 100 101 102 (check-equal?: (map λx.(* x x) '(1 2 3)) '(1 4 9)) 103 (check-equal?: (map λ.(* % %) '(1 2 3)) '(1 4 9)) 104 (check-equal?: (map λ.(* %1 %2) '(1 2 3) '(10 100 1000)) '(10 200 3000)) 105 (check-equal?: (map λx.y.(* x y) '(1 2 3) '(10 100 1000)) '(10 200 3000)) 106 107 ;; Factorial function, works only in untyped racket due to recursion: 108 ;; ((λ.(if (> % 0) (* %1 (%0 (sub1 %))) 1)) 5)