www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

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)