Skip to content
This repository was archived by the owner on Aug 18, 2025. It is now read-only.

Commit be37c19

Browse files
committed
新增多个测试文件,涵盖数组类型、函数指针数组及Lambda闭包的功能测试
1 parent 92374d3 commit be37c19

9 files changed

+515
-0
lines changed

examples/debug_array_type_test.cn

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using lib <io>;
2+
using ns std;
3+
4+
// 调试数组类型测试
5+
6+
fn main() : int {
7+
std::println("=== 调试数组类型测试 ===");
8+
9+
// 测试基本数组类型
10+
numbers : []int = [1, 2, 3];
11+
std::println("基本数组测试通过");
12+
13+
std::println("=== 测试完成 ===");
14+
return 0;
15+
};
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
using lib <io>;
2+
using ns std;
3+
4+
// 调试函数指针数组访问测试
5+
6+
fn add(a : int, b : int) : int {
7+
return a + b;
8+
};
9+
10+
fn subtract(a : int, b : int) : int {
11+
return a - b;
12+
};
13+
14+
fn main() : int {
15+
std::println("=== 调试函数指针数组访问测试 ===");
16+
17+
// 测试函数指针数组初始化
18+
operations : []*fn(int, int) : int = [add, subtract];
19+
std::println("函数指针数组初始化成功");
20+
21+
// 测试数组索引访问
22+
firstOp : *fn(int, int) : int = operations[0];
23+
std::println("数组索引访问成功");
24+
25+
std::println("=== 测试完成 ===");
26+
return 0;
27+
};
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
using lib <io>;
2+
using ns std;
3+
4+
// 调试函数指针数组调用测试
5+
6+
fn add(a : int, b : int) : int {
7+
return a + b;
8+
};
9+
10+
fn subtract(a : int, b : int) : int {
11+
return a - b;
12+
};
13+
14+
fn main() : int {
15+
std::println("=== 调试函数指针数组调用测试 ===");
16+
17+
// 测试函数指针数组初始化
18+
operations : []*fn(int, int) : int = [add, subtract];
19+
std::println("函数指针数组初始化成功");
20+
21+
// 分步测试:先获取函数指针,再调用
22+
firstOp : *fn(int, int) : int = operations[0];
23+
result1 : int = firstOp(10, 5);
24+
std::println("operations[0](10, 5) = " + result1);
25+
26+
secondOp : *fn(int, int) : int = operations[1];
27+
result2 : int = secondOp(10, 5);
28+
std::println("operations[1](10, 5) = " + result2);
29+
30+
std::println("=== 测试完成 ===");
31+
return 0;
32+
};
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
using lib <io>;
2+
using ns std;
3+
4+
// 调试函数指针数组声明测试
5+
6+
fn add(a : int, b : int) : int {
7+
return a + b;
8+
};
9+
10+
fn main() : int {
11+
std::println("=== 调试函数指针数组声明测试 ===");
12+
13+
// 测试函数指针数组类型声明
14+
operations : []*fn(int, int) : int;
15+
std::println("函数指针数组声明成功");
16+
17+
std::println("=== 测试完成 ===");
18+
return 0;
19+
};
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using lib <io>;
2+
using ns std;
3+
4+
// 调试函数指针数组初始化测试
5+
6+
fn add(a : int, b : int) : int {
7+
return a + b;
8+
};
9+
10+
fn subtract(a : int, b : int) : int {
11+
return a - b;
12+
};
13+
14+
fn main() : int {
15+
std::println("=== 调试函数指针数组初始化测试 ===");
16+
17+
// 测试函数指针数组初始化
18+
operations : []*fn(int, int) : int = [add, subtract];
19+
std::println("函数指针数组初始化成功");
20+
21+
std::println("=== 测试完成 ===");
22+
return 0;
23+
};

examples/lambda_closure_test.cn

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
using lib <io>;
2+
using ns std;
3+
4+
// Lambda函数闭包测试
5+
6+
fn main() : int {
7+
std::println("=== Lambda函数闭包测试 ===");
8+
std::println("");
9+
10+
// 测试1:基础闭包
11+
testBasicClosure();
12+
13+
// 测试2:多变量闭包
14+
testMultiVariableClosure();
15+
16+
// 测试3:嵌套作用域闭包
17+
testNestedScopeClosure();
18+
19+
// 测试4:闭包修改外部变量
20+
testClosureModification();
21+
22+
std::println("");
23+
std::println("=== Lambda函数闭包测试完成 ===");
24+
return 0;
25+
};
26+
27+
fn testBasicClosure() : void {
28+
std::println("1. 基础闭包测试");
29+
std::println("===============");
30+
31+
// 外部变量
32+
multiplier : int = 3;
33+
34+
// Lambda函数捕获外部变量
35+
multiply : *fn(int) : int = (x => x * multiplier);
36+
37+
result1 : int = multiply(5);
38+
std::println("multiply(5) = " + result1 + " (应该是 15)");
39+
40+
result2 : int = multiply(7);
41+
std::println("multiply(7) = " + result2 + " (应该是 21)");
42+
43+
std::println("");
44+
};
45+
46+
fn testMultiVariableClosure() : void {
47+
std::println("2. 多变量闭包测试");
48+
std::println("=================");
49+
50+
// 多个外部变量
51+
base : int = 10;
52+
offset : int = 5;
53+
54+
// Lambda函数捕获多个外部变量
55+
calculate : *fn(int) : int = (x => x + base + offset);
56+
57+
result1 : int = calculate(3);
58+
std::println("calculate(3) = " + result1 + " (应该是 18)");
59+
60+
result2 : int = calculate(7);
61+
std::println("calculate(7) = " + result2 + " (应该是 22)");
62+
63+
std::println("");
64+
};
65+
66+
fn testNestedScopeClosure() : void {
67+
std::println("3. 嵌套作用域闭包测试");
68+
std::println("=====================");
69+
70+
// 外部作用域变量
71+
outerVar : int = 100;
72+
73+
// 创建返回Lambda的函数
74+
createAdder : *fn(int) : *fn(int) : int = getAdderFunction();
75+
76+
// 使用返回的Lambda
77+
adder : *fn(int) : int = createAdder(outerVar);
78+
result : int = adder(25);
79+
std::println("adder(25) = " + result + " (应该是 125)");
80+
81+
std::println("");
82+
};
83+
84+
fn testClosureModification() : void {
85+
std::println("4. 闭包修改外部变量测试");
86+
std::println("=======================");
87+
88+
// 外部变量
89+
counter : int = 0;
90+
91+
// Lambda函数使用外部变量(只读)
92+
getCounter : *fn() : int = (() => counter);
93+
94+
result1 : int = getCounter();
95+
std::println("getCounter() = " + result1 + " (应该是 0)");
96+
97+
// 修改外部变量
98+
counter = 42;
99+
100+
// 注意:由于闭包是在创建时捕获的,所以仍然是原来的值
101+
result2 : int = getCounter();
102+
std::println("getCounter() = " + result2 + " (仍然是 0,因为闭包捕获了创建时的值)");
103+
104+
std::println("");
105+
};
106+
107+
// 返回Lambda函数的函数
108+
fn getAdderFunction() : *fn(int) : *fn(int) : int {
109+
// 这个函数返回一个Lambda,该Lambda接受一个参数并返回另一个Lambda
110+
return (base => (x => x + base));
111+
};
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using lib <io>;
2+
using ns std;
3+
4+
// 简单函数指针数组测试
5+
6+
fn add(a : int, b : int) : int {
7+
return a + b;
8+
};
9+
10+
fn subtract(a : int, b : int) : int {
11+
return a - b;
12+
};
13+
14+
fn main() : int {
15+
std::println("=== 简单函数指针数组测试 ===");
16+
17+
// 测试函数指针数组类型声明
18+
operations : []*fn(int, int) : int = [add, subtract];
19+
20+
// 测试数组索引访问
21+
result1 : int = operations[0](10, 5);
22+
std::println("operations[0](10, 5) = " + result1);
23+
24+
result2 : int = operations[1](10, 5);
25+
std::println("operations[1](10, 5) = " + result2);
26+
27+
std::println("=== 测试完成 ===");
28+
return 0;
29+
};
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
using lib <io>;
2+
using ns std;
3+
4+
// 简单Lambda函数闭包测试
5+
6+
fn main() : int {
7+
std::println("=== 简单Lambda函数闭包测试 ===");
8+
std::println("");
9+
10+
// 测试1:基础闭包
11+
testBasicClosure();
12+
13+
// 测试2:多变量闭包
14+
testMultiVariableClosure();
15+
16+
std::println("");
17+
std::println("=== Lambda函数闭包测试完成 ===");
18+
return 0;
19+
};
20+
21+
fn testBasicClosure() : void {
22+
std::println("1. 基础闭包测试");
23+
std::println("===============");
24+
25+
// 外部变量
26+
multiplier : int = 3;
27+
28+
// Lambda函数捕获外部变量
29+
multiply : *fn(int) : int = (x => x * multiplier);
30+
31+
result1 : int = multiply(5);
32+
std::println("multiply(5) = " + result1 + " (应该是 15)");
33+
34+
result2 : int = multiply(7);
35+
std::println("multiply(7) = " + result2 + " (应该是 21)");
36+
37+
std::println("");
38+
};
39+
40+
fn testMultiVariableClosure() : void {
41+
std::println("2. 多变量闭包测试");
42+
std::println("=================");
43+
44+
// 多个外部变量
45+
base : int = 10;
46+
offset : int = 5;
47+
48+
// Lambda函数捕获多个外部变量
49+
calculate : *fn(int) : int = (x => x + base + offset);
50+
51+
result1 : int = calculate(3);
52+
std::println("calculate(3) = " + result1 + " (应该是 18)");
53+
54+
result2 : int = calculate(7);
55+
std::println("calculate(7) = " + result2 + " (应该是 22)");
56+
57+
std::println("");
58+
};

0 commit comments

Comments
 (0)