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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
//! Unit tests
use crate::utils::testcase;
use crate::{eval, value};
use tokay_macros;
#[test]
// Simple testcase for testcase
fn test_case() {
testcase(
r#"
print("Hello " + Int)
#---
#23
#---
#Hello 23
"#,
)
}
#[test]
// Testing examples provided in the examples folder
fn examples() {
assert_eq!(
eval(
include_str!("../examples/planets.tok"),
"Mercury Venus Earth Mars",
None
),
Ok(value!([
"Hello Mercury",
"Hello Venus",
"Hello World",
"Hello Mars"
]))
);
/*
assert_eq!(
run(
include_str!("../examples/planets2.tok"),
"Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune"
),
Ok(Some(value!([
"Mercury",
"Venus (neighbour)",
"Home",
"Mars (neighbour)",
"Jupiter",
"Saturn",
"Uranus",
"Neptune"
])))
);
*/
assert_eq!(
eval(include_str!("../examples/expr.tok"), "1+2*3+4", None),
Ok(value!(11))
);
// todo: Would be nice to test against stdout
assert_eq!(
eval(
include_str!("../examples/expr_with_ast.tok"),
"1+2*3+4",
None
),
Ok(value![void])
);
assert_eq!(
eval(
include_str!("../examples/expr_with_spaces.tok"),
"1 + \t 2 \n * 3 + 4",
None
),
Ok(value!(11))
);
assert_eq!(
eval(include_str!("../examples/factorial.tok"), "", None),
Ok(value!(24))
);
}
tokay_macros::tokay_tests!("tests/*.tok");