lex_test.nx source
↩ module page · 39 lines · 1204 B
1// lex_test.nx -- self-test for lex.nx.
2
3import "lex_kinds.nx"
4import "lex.nx"
5
6
7// ===== self-test ===================================================
8//
9// Tokenize a small NishiLang source snippet; verify token count and
10// the kinds of a few specific tokens.
11
12func main() -> i64 {
13 let src: *u8 = "func add(a: i64, b: i64) -> i64 { return a + b }"
14 let toks: *Tok = lex_source(src, 256)
15
16 // Expected token sequence (17 tokens + EOF):
17 // func(10) add(2) ((67) a(2) :(64) i64(2) ,(66) b(2) :(64) i64(2) )(68)
18 // ->(61) i64(2) {(69) return(23) a(2) +(40) b(2) }(70) EOF(0)
19 //
20 // We check a handful of positions.
21
22 let t_base: i64 = toks as i64
23 let t0: *Tok = (t_base + 0 * TOK_BYTES) as *Tok
24 if t0.kind != TK_FUNC { return 1 }
25
26 let t1: *Tok = (t_base + 1 * TOK_BYTES) as *Tok
27 if t1.kind != TK_IDENT { return 2 }
28
29 let t2: *Tok = (t_base + 2 * TOK_BYTES) as *Tok
30 if t2.kind != TK_LPAREN { return 3 }
31
32 let t11: *Tok = (t_base + 11 * TOK_BYTES) as *Tok
33 if t11.kind != TK_ARROW { return 4 }
34
35 let t14: *Tok = (t_base + 14 * TOK_BYTES) as *Tok
36 if t14.kind != TK_RETURN { return 5 }
37
38 return 0
39}