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