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

Commit 6a4b0a1

Browse files
committed
TEST
1 parent afe714c commit 6a4b0a1

12 files changed

+1035
-0
lines changed
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
using lib <io>;
2+
using ns std;
3+
4+
// 复杂函数指针调用测试
5+
6+
// 复杂的函数,包含多种语句类型
7+
fn complexCalculation(a : int, b : int) : int {
8+
temp : int = a * 2;
9+
if (temp > b) {
10+
result : int = temp + b;
11+
return result;
12+
} else {
13+
return a + b;
14+
};
15+
};
16+
17+
// 递归函数
18+
fn factorial(n : int) : int {
19+
if (n <= 1) {
20+
return 1;
21+
} else {
22+
return n * factorial(n - 1);
23+
};
24+
};
25+
26+
// 带局部变量的函数
27+
fn processNumbers(x : int, y : int) : int {
28+
sum : int = x + y;
29+
product : int = x * y;
30+
31+
if (sum > product) {
32+
return sum;
33+
} else {
34+
return product;
35+
};
36+
};
37+
38+
fn main() : int {
39+
std::println("=== 复杂函数指针调用测试 ===");
40+
std::println("");
41+
42+
// 测试1:复杂函数的函数指针调用
43+
testComplexFunctionPointer();
44+
45+
// 测试2:递归函数指针调用
46+
testRecursiveFunctionPointer();
47+
48+
// 测试3:带局部变量的函数指针调用
49+
testLocalVariableFunctionPointer();
50+
51+
// 测试4:复杂Lambda函数
52+
testComplexLambda();
53+
54+
std::println("");
55+
std::println("=== 复杂函数指针调用测试完成 ===");
56+
return 0;
57+
};
58+
59+
fn testComplexFunctionPointer() : void {
60+
std::println("1. 复杂函数指针调用测试");
61+
std::println("=======================");
62+
63+
// 将复杂函数赋值给函数指针
64+
complexFunc : *fn(int, int) : int = complexCalculation;
65+
66+
result1 : int = complexFunc(5, 3);
67+
std::println("complexFunc(5, 3) = " + result1);
68+
69+
result2 : int = complexFunc(2, 10);
70+
std::println("complexFunc(2, 10) = " + result2);
71+
72+
std::println("");
73+
};
74+
75+
fn testRecursiveFunctionPointer() : void {
76+
std::println("2. 递归函数指针调用测试");
77+
std::println("=======================");
78+
79+
// 递归函数的函数指针
80+
factFunc : *fn(int) : int = factorial;
81+
82+
result1 : int = factFunc(5);
83+
std::println("factFunc(5) = " + result1);
84+
85+
result2 : int = factFunc(6);
86+
std::println("factFunc(6) = " + result2);
87+
88+
std::println("");
89+
};
90+
91+
fn testLocalVariableFunctionPointer() : void {
92+
std::println("3. 带局部变量的函数指针调用测试");
93+
std::println("===============================");
94+
95+
// 带局部变量的函数指针
96+
processFunc : *fn(int, int) : int = processNumbers;
97+
98+
result1 : int = processFunc(4, 6);
99+
std::println("processFunc(4, 6) = " + result1);
100+
101+
result2 : int = processFunc(8, 3);
102+
std::println("processFunc(8, 3) = " + result2);
103+
104+
std::println("");
105+
};
106+
107+
fn testComplexLambda() : void {
108+
std::println("4. 复杂Lambda函数测试");
109+
std::println("=====================");
110+
111+
// 复杂的Lambda表达式
112+
complexLambda : *fn(int, int) : int = ((a, b) => a * a + b * b);
113+
114+
result1 : int = complexLambda(3, 4);
115+
std::println("complexLambda(3, 4) = " + result1);
116+
117+
result2 : int = complexLambda(5, 12);
118+
std::println("complexLambda(5, 12) = " + result2);
119+
120+
std::println("");
121+
};
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
using lib <io>;
2+
using ns std;
3+
4+
// 逐步调试复杂函数
5+
6+
// 第一步:带局部变量的函数
7+
fn stepOne(a : int, b : int) : int {
8+
temp : int = a * 2;
9+
return temp;
10+
};
11+
12+
// 第二步:带局部变量和简单if的函数
13+
fn stepTwo(a : int, b : int) : int {
14+
temp : int = a * 2;
15+
if (temp >= 10) {
16+
return temp;
17+
} else {
18+
return b;
19+
};
20+
};
21+
22+
fn main() : int {
23+
std::println("=== 逐步调试复杂函数 ===");
24+
25+
// 测试第一步
26+
std::println("测试第一步:带局部变量");
27+
step1Ptr : *fn(int, int) : int = stepOne;
28+
result1 : int = step1Ptr(5, 3);
29+
std::println("step1Ptr(5, 3) = " + result1);
30+
31+
// 测试第二步
32+
std::println("测试第二步:带局部变量和if");
33+
step2Ptr : *fn(int, int) : int = stepTwo;
34+
result2 : int = step2Ptr(5, 3);
35+
std::println("step2Ptr(5, 3) = " + result2);
36+
37+
result3 : int = step2Ptr(2, 3);
38+
std::println("step2Ptr(2, 3) = " + result3);
39+
40+
std::println("=== 测试完成 ===");
41+
return 0;
42+
};
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
using lib <io>;
2+
using ns std;
3+
4+
// 调试函数指针测试
5+
6+
// 简单的复杂函数
7+
fn simpleComplex(a : int, b : int) : int {
8+
temp : int = a + b;
9+
return temp;
10+
};
11+
12+
fn main() : int {
13+
std::println("=== 调试函数指针测试 ===");
14+
15+
// 直接调用函数
16+
direct_result : int = simpleComplex(5, 3);
17+
std::println("直接调用: simpleComplex(5, 3) = " + direct_result);
18+
19+
// 通过函数指针调用
20+
funcPtr : *fn(int, int) : int = simpleComplex;
21+
ptr_result : int = funcPtr(5, 3);
22+
std::println("函数指针调用: funcPtr(5, 3) = " + ptr_result);
23+
24+
std::println("=== 测试完成 ===");
25+
return 0;
26+
};

examples/debug_if_function_test.cn

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
using lib <io>;
2+
using ns std;
3+
4+
// 调试if语句函数指针测试
5+
6+
// 带if语句的函数
7+
fn ifFunction(a : int, b : int) : int {
8+
if (a > b) {
9+
return a;
10+
} else {
11+
return b;
12+
};
13+
};
14+
15+
fn main() : int {
16+
std::println("=== 调试if语句函数指针测试 ===");
17+
18+
// 直接调用函数
19+
direct_result1 : int = ifFunction(5, 3);
20+
std::println("直接调用: ifFunction(5, 3) = " + direct_result1);
21+
22+
direct_result2 : int = ifFunction(2, 7);
23+
std::println("直接调用: ifFunction(2, 7) = " + direct_result2);
24+
25+
// 通过函数指针调用
26+
funcPtr : *fn(int, int) : int = ifFunction;
27+
ptr_result1 : int = funcPtr(5, 3);
28+
std::println("函数指针调用: funcPtr(5, 3) = " + ptr_result1);
29+
30+
ptr_result2 : int = funcPtr(2, 7);
31+
std::println("函数指针调用: funcPtr(2, 7) = " + ptr_result2);
32+
33+
std::println("=== 测试完成 ===");
34+
return 0;
35+
};

examples/debug_nested_var_test.cn

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
using lib <io>;
2+
using ns std;
3+
4+
// 调试嵌套变量声明
5+
6+
// 带嵌套变量声明的函数
7+
fn nestedVarFunction(a : int, b : int) : int {
8+
temp : int = a * 2;
9+
if (temp > b) {
10+
result : int = temp + b;
11+
return result;
12+
} else {
13+
return a + b;
14+
};
15+
};
16+
17+
fn main() : int {
18+
std::println("=== 调试嵌套变量声明 ===");
19+
20+
// 直接调用
21+
direct1 : int = nestedVarFunction(5, 3);
22+
std::println("直接调用: nestedVarFunction(5, 3) = " + direct1);
23+
24+
direct2 : int = nestedVarFunction(2, 10);
25+
std::println("直接调用: nestedVarFunction(2, 10) = " + direct2);
26+
27+
// 函数指针调用
28+
funcPtr : *fn(int, int) : int = nestedVarFunction;
29+
ptr1 : int = funcPtr(5, 3);
30+
std::println("函数指针: funcPtr(5, 3) = " + ptr1);
31+
32+
ptr2 : int = funcPtr(2, 10);
33+
std::println("函数指针: funcPtr(2, 10) = " + ptr2);
34+
35+
std::println("=== 测试完成 ===");
36+
return 0;
37+
};
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
using lib <io>;
2+
using ns std;
3+
4+
// 调试简单的两次调用测试
5+
6+
fn simpleAdd(a : int, b : int) : int {
7+
return a + b;
8+
};
9+
10+
fn main() : int {
11+
std::println("=== 调试简单的两次调用测试 ===");
12+
13+
// 通过函数指针调用两次
14+
funcPtr : *fn(int, int) : int = simpleAdd;
15+
16+
std::println("第一次调用:");
17+
result1 : int = funcPtr(5, 3);
18+
std::println("funcPtr(5, 3) = " + result1);
19+
20+
std::println("第二次调用:");
21+
result2 : int = funcPtr(2, 7);
22+
std::println("funcPtr(2, 7) = " + result2);
23+
24+
std::println("=== 测试完成 ===");
25+
return 0;
26+
};
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
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 multiply(a : int, b : int) : int {
15+
return a * b;
16+
};
17+
18+
fn divide(a : int, b : int) : int {
19+
if (b != 0) {
20+
return a / b;
21+
} else {
22+
return 0;
23+
};
24+
};
25+
26+
fn main() : int {
27+
std::println("=== 函数指针数组测试 ===");
28+
std::println("");
29+
30+
// 测试1:函数指针数组声明和初始化
31+
testFunctionPointerArrayDeclaration();
32+
33+
// 测试2:函数指针数组访问和调用
34+
testFunctionPointerArrayAccess();
35+
36+
// 测试3:Lambda函数指针数组
37+
testLambdaFunctionPointerArray();
38+
39+
std::println("");
40+
std::println("=== 函数指针数组测试完成 ===");
41+
return 0;
42+
};
43+
44+
fn testFunctionPointerArrayDeclaration() : void {
45+
std::println("1. 函数指针数组声明和初始化测试");
46+
std::println("===============================");
47+
48+
// 声明函数指针数组类型
49+
operations : []*fn(int, int) : int = [add, subtract, multiply, divide];
50+
51+
std::println("✓ 函数指针数组声明成功");
52+
std::println(" 数组包含4个数学运算函数指针");
53+
std::println("");
54+
};
55+
56+
fn testFunctionPointerArrayAccess() : void {
57+
std::println("2. 函数指针数组访问和调用测试");
58+
std::println("=============================");
59+
60+
// 创建函数指针数组
61+
operations : []*fn(int, int) : int = [add, subtract, multiply, divide];
62+
63+
// 通过数组索引访问和调用函数指针
64+
result1 : int = operations[0](10, 5); // add
65+
std::println("operations[0](10, 5) = " + result1);
66+
67+
result2 : int = operations[1](10, 5); // subtract
68+
std::println("operations[1](10, 5) = " + result2);
69+
70+
result3 : int = operations[2](10, 5); // multiply
71+
std::println("operations[2](10, 5) = " + result3);
72+
73+
result4 : int = operations[3](10, 5); // divide
74+
std::println("operations[3](10, 5) = " + result4);
75+
76+
std::println("");
77+
};
78+
79+
fn testLambdaFunctionPointerArray() : void {
80+
std::println("3. Lambda函数指针数组测试");
81+
std::println("=========================");
82+
83+
// 创建Lambda函数指针数组
84+
lambdas : []*fn(int, int) : int = [
85+
((a, b) => a + b),
86+
((a, b) => a - b),
87+
((a, b) => a * b),
88+
((a, b) => a * a + b * b)
89+
];
90+
91+
// 调用Lambda函数指针
92+
result1 : int = lambdas[0](3, 4);
93+
std::println("lambdas[0](3, 4) = " + result1);
94+
95+
result2 : int = lambdas[1](3, 4);
96+
std::println("lambdas[1](3, 4) = " + result2);
97+
98+
result3 : int = lambdas[2](3, 4);
99+
std::println("lambdas[2](3, 4) = " + result3);
100+
101+
result4 : int = lambdas[3](3, 4);
102+
std::println("lambdas[3](3, 4) = " + result4);
103+
104+
std::println("");
105+
};

0 commit comments

Comments
 (0)