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
use proptest;
proptest!
/* Sprint 86: Comprehensive inline tests for coverage improvement
#[test]
fn test_infer_comprehensive_expressions() {
let mut ctx = InferenceContext::new();
// Test all expression kinds
let test_cases = vec![
// Literals
"42",
"3.15",
"true",
"\"hello\"",
"'c'",
// Binary operations
"1 + 2",
"3 - 1",
"4 * 5",
"10 / 2",
"7 % 3",
// Comparisons
"5 > 3",
"2 < 8",
"4 >= 4",
"3 <= 5",
"1 == 1",
"2 != 3",
// Logical
"true && false",
"true || false",
// Unary
"-5",
"!true",
// Collections
"[1, 2, 3]",
"(1, \"hello\")",
// Function calls
"print(\"test\")",
// Lambda
"x => x + 1",
"(a, b) => a * b",
];
for code in test_cases {
let parser = crate::frontend::parser::Parser::new(code);
if let Ok(ast) = parser.parse() {
let _ = ctx.infer(&ast);
// Reset recursion depth
ctx.recursion_depth = 0;
}
}
}
#[test]
fn test_helper_function_coverage() {
let mut ctx = InferenceContext::new();
// Test fresh_tyvar
let tv1 = ctx.fresh_tyvar();
let tv2 = ctx.fresh_tyvar();
assert_ne!(tv1, tv2);
} */