stage1 重构测试且成功00-05
This commit is contained in:
100
stage1/test17_integration.spl
Normal file
100
stage1/test17_integration.spl
Normal file
@@ -0,0 +1,100 @@
|
||||
/* ===== 模块8:综合 =====
|
||||
* test17_integration — 综合测试
|
||||
* 难度:3/5
|
||||
* 验证点:多特性组合——指针 + 结构体 + 函数 + 循环 + 数组 + 切片
|
||||
*/
|
||||
#[extern("vm")] fn vm_printf(fmt: *u8, ...) void;
|
||||
|
||||
type Point = struct {
|
||||
x: i32,
|
||||
y: i32,
|
||||
}
|
||||
|
||||
/* 计算点积 */
|
||||
fn dot(a: *Point, b: *Point) i32 {
|
||||
ret a.x * b.x + a.y * b.y;
|
||||
}
|
||||
|
||||
/* 递归斐波那契 */
|
||||
fn fib(n: i32) i32 {
|
||||
if n <= 1 { ret n; }
|
||||
ret fib(n - 1) + fib(n - 2);
|
||||
}
|
||||
|
||||
fn main() i32 {
|
||||
vm_printf("=== integration test ===\n");
|
||||
|
||||
/* 综合:指针 + 结构体 + 函数 */
|
||||
var p1: Point;
|
||||
p1.x = 3;
|
||||
p1.y = 4;
|
||||
|
||||
var p2: Point;
|
||||
p2.x = 5;
|
||||
p2.y = 6;
|
||||
|
||||
var d := dot(&p1, &p2);
|
||||
/* 3*5 + 4*6 = 15 + 24 = 39 */
|
||||
if d != 39 { ret 1; }
|
||||
|
||||
/* 综合:数组 + while 循环 */
|
||||
var arr: [5]i32 = [5]i32{1, 2, 3, 4, 5};
|
||||
var sum: i32 = 0;
|
||||
var i: i32 = 0;
|
||||
while i < 5 {
|
||||
sum = sum + arr[i];
|
||||
i = i + 1;
|
||||
}
|
||||
if sum != 15 { ret 2; }
|
||||
|
||||
/* 综合:切片 + for */
|
||||
var sl: []i32 = arr[1..4];
|
||||
var sl_sum: i32 = 0;
|
||||
for sl as val {
|
||||
sl_sum = sl_sum + val;
|
||||
}
|
||||
if sl_sum != 9 { ret 3; } /* 2+3+4 */
|
||||
|
||||
/* 综合:递归 */
|
||||
var f := fib(10);
|
||||
if f != 55 { ret 4; }
|
||||
|
||||
/* 综合:loop/break/continue */
|
||||
var n: i32 = 0;
|
||||
var count: i32 = 0;
|
||||
loop {
|
||||
n = n + 1;
|
||||
if n == 2 { continue; }
|
||||
count = count + 1;
|
||||
if n >= 5 { break; }
|
||||
}
|
||||
/* 执行 n=1,3,4,5 共 4 次 (n=2 被 continue) */
|
||||
if count != 4 { ret 5; }
|
||||
|
||||
/* 综合:指针修改结构体 */
|
||||
var pp: *Point = &p1;
|
||||
pp.x = 10;
|
||||
pp.y = 20;
|
||||
if p1.x != 10 { ret 6; }
|
||||
if p1.y != 20 { ret 7; }
|
||||
|
||||
/* 综合:嵌套控制流 */
|
||||
var mat: [3]i32 = [3]i32{1, 2, 3};
|
||||
var outer_sum: i32 = 0;
|
||||
var j: i32 = 0;
|
||||
while j < 3 {
|
||||
var k: i32 = 0;
|
||||
while k < 3 {
|
||||
if mat[j] > mat[k] {
|
||||
outer_sum = outer_sum + 1;
|
||||
}
|
||||
k = k + 1;
|
||||
}
|
||||
j = j + 1;
|
||||
}
|
||||
if outer_sum != 9 { ret 8; }
|
||||
|
||||
vm_printf("=== all integration tests passed ===\n");
|
||||
|
||||
ret 0;
|
||||
}
|
||||
Reference in New Issue
Block a user