summaryrefslogtreecommitdiff
path: root/test/lexer-test.lisp
blob: bb7a1bd9703f320ceeb8f35dc2cdfa64b1f9334a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
(in-package :monkey/test)

(deftest (:lexer test-1)
  "=+(){},;"
  (:t/= :t/+ :t/lparen :t/rparen
   :t/lbrace :t/rbrace :t/comma :t/semicolon :t/eof))

(deftest (:lexer test-2)
  "let five = 5;
let ten = 10;

let add = fn(x, y) {
  x + y;
};

let result = add(five, ten);
!-/*;
5 < 10 > 5;

if (5 < 10) {
    return true;
} else {
    return false;
}
10 == 10;
10 != 9;
"
  (:t/let "five" :t/= 5 #\;
          :t/let "ten" :t/= 10 #\;
          :t/let "add" :t/= :t/function #\( "x" :t/comma "y" #\) #\{
          "x" :t/+ "y" #\;
          #\} #\;
          :t/let "result" :t/= "add" #\( "five" :t/comma "ten" #\) #\;
          :t/! :t/- :t// :t/* #\;
          5 :t/< 10 :t/> 5 #\;
          :t/if #\( 5 :t/< 10 #\) #\{
          :t/return :t/true #\;
          #\} :t/else #\{
          :t/return :t/false #\;
          #\}
          10 :t/== 10 #\;
          10 :t/!= 9 #\;
          :t/eof))

(eval-when ()
  (deftest (:lexer test-fail)
    "abc gf 5 fn =+(){},;"
    (:t/= :t/+ :t/lparen :t/rparen
     :t/lbrace :t/rbrace :t/comma :t/semicolon :t/eof))

  (deftest (:lexer test-fail-2)
    "let abc x + 5;"
    (:t/let "abc" :t/= "x" :t/+ 5 :t/eof)))