aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorjoachimschmidt557 <joachim.schmidt557@outlook.com>2021-04-09 18:08:57 +0200
committerjoachimschmidt557 <joachim.schmidt557@outlook.com>2021-04-11 10:19:36 +0200
commit4fe575f47bbc10ee56f47bd9e7e1b8dacd35fc41 (patch)
tree06320c8df899d0eec76f49e439d94380178270be /test
parenta6ddc12b33d4df48670e7752228b4257933d79c7 (diff)
downloadzig-4fe575f47bbc10ee56f47bd9e7e1b8dacd35fc41.tar.gz
zig-4fe575f47bbc10ee56f47bd9e7e1b8dacd35fc41.zip
stage2 ARM: Add fibonacci test
Diffstat (limited to 'test')
-rw-r--r--test/stage2/arm.zig39
1 files changed, 39 insertions, 0 deletions
diff --git a/test/stage2/arm.zig b/test/stage2/arm.zig
index 31bbfc3170..f4efbd9b2a 100644
--- a/test/stage2/arm.zig
+++ b/test/stage2/arm.zig
@@ -419,4 +419,43 @@ pub fn addCases(ctx: *TestContext) !void {
"",
);
}
+
+ {
+ var case = ctx.exe("recursive fibonacci", linux_arm);
+ case.addCompareOutput(
+ \\export fn _start() noreturn {
+ \\ assert(fib(0) == 0);
+ \\ assert(fib(1) == 1);
+ \\ assert(fib(2) == 1);
+ \\ assert(fib(3) == 2);
+ \\ assert(fib(10) == 55);
+ \\ assert(fib(20) == 6765);
+ \\ exit();
+ \\}
+ \\
+ \\fn fib(n: u32) u32 {
+ \\ if (n < 2) {
+ \\ return n;
+ \\ } else {
+ \\ return fib(n - 2) + fib(n - 1);
+ \\ }
+ \\}
+ \\
+ \\fn assert(ok: bool) void {
+ \\ if (!ok) unreachable;
+ \\}
+ \\
+ \\fn exit() noreturn {
+ \\ asm volatile ("svc #0"
+ \\ :
+ \\ : [number] "{r7}" (1),
+ \\ [arg1] "{r0}" (0)
+ \\ : "memory"
+ \\ );
+ \\ unreachable;
+ \\}
+ ,
+ "",
+ );
+ }
}