1mod context;
2mod engine;
3mod error;
4mod expr;
5mod lexer;
6mod module;
7mod parser;
8mod plugin;
9mod position;
10mod stmt;
11mod token;
12mod types;
13
14#[cfg(test)]
15mod tests {
16 use crate::engine::Engine;
17 use std::sync::{Arc, RwLock};
18 use crate::lexer::Lexer;
20 use crate::module::Module;
21 use crate::parser::PipelineParser;
22 #[test]
26 fn test_lexer() {
27 let lexer = Lexer::from_script(
28 "main",
29 r#"
30fun add(a:Int,b:Int){
31 return a+b
32}
33 "#,
34 );
35 for (_, pos) in lexer.clone() {
36 println!("{:?}", pos);
37 let line1 = lexer.line(pos.row);
38 println!("{}", line1);
39 let p = String::from(' ');
40 let mut p = p.repeat(pos.col - 1);
41 p.push('↑');
42 println!("{}", p);
43 }
44 }
45 #[test]
46 fn test_parser() {
47 let lexer = Lexer::from_script(
48 "main",
49 r#"
50 val a=123456;
51 println(a);
52 fun test():Unit{
53 println("Hello,Word")
54 }
55 "#,
56 );
57 let m = Module::new("main");
58 let mut parser = PipelineParser::new(lexer, Arc::new(RwLock::new(m)));
59 let s = parser.parse_stmt_blocks().unwrap();
60 println!("{:?}", s);
62 }
64 #[test]
65 fn test_engine() {
66 let mut e = Engine::default();
67 e.compile(
68 r#"
69 fun range(n:Int):Array{
70 let i=0
71 let a=[]
72 while i<n{
73 a.append(i.clone())
74 i=i+1
75 }
76 return a
77 }
78 "#,
79 );
80 e.run(
81 r#"
82 let a=readInt()
83 print(a)
84 "#,
85 );
86 }
87
88 #[test]
89 fn it_works() {}
90}