www

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

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)