diff options
| author | David Czihak <git@dcz.at> | 2026-05-09 13:01:50 +0200 |
|---|---|---|
| committer | David Czihak <git@dcz.at> | 2026-05-09 13:01:50 +0200 |
| commit | 4b6f66fd512c254b5a82220dc77411fe391dd258 (patch) | |
| tree | 7d77d7966e9ad2e296986ea8cfeb607088028195 /examples/snippets/fibonacci.zig | |
| parent | 64e9c56fc665972fdde5234c4fb2f2a882e237dc (diff) | |
Chore: Rework examples for thorough extension testing
Diffstat (limited to 'examples/snippets/fibonacci.zig')
| -rw-r--r-- | examples/snippets/fibonacci.zig | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/examples/snippets/fibonacci.zig b/examples/snippets/fibonacci.zig new file mode 100644 index 0000000..327bbd3 --- /dev/null +++ b/examples/snippets/fibonacci.zig @@ -0,0 +1,41 @@ +const std = @import("std"); + +/// Compute the nth Fibonacci number iteratively. +pub fn fibonacci(n: u64) u64 { + if (n <= 1) return n; + var a: u64 = 0; + var b: u64 = 1; + var i: u64 = 2; + while (i <= n) : (i += 1) { + const next = a + b; + a = b; + b = next; + } + return b; +} + +pub fn main(init: std.process.Init) !void { + const io = init.io; + var buf: [4096]u8 = undefined; + var fw: std.Io.File.Writer = .init(.stdout(), io, &buf); + defer fw.interface.flush() catch {}; + const w = &fw.interface; + + try w.print("Fibonacci sequence (first 12 terms):\n", .{}); + for (0..12) |n| { + try w.print(" fib({d}) = {d}\n", .{ n, fibonacci(n) }); + } +} + +test "fibonacci base cases" { + try std.testing.expectEqual(@as(u64, 0), fibonacci(0)); + try std.testing.expectEqual(@as(u64, 1), fibonacci(1)); + try std.testing.expectEqual(@as(u64, 1), fibonacci(2)); +} + +test "fibonacci sequence" { + const expected = [_]u64{ 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89 }; + for (expected, 0..) |v, n| { + try std.testing.expectEqual(v, fibonacci(n)); + } +} |
