Files
spl/stage1/test17_integration.spl
2026-07-05 21:45:43 +08:00

101 lines
2.1 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* ===== 模块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;
}