From 4b6f66fd512c254b5a82220dc77411fe391dd258 Mon Sep 17 00:00:00 2001 From: David Czihak Date: Sat, 9 May 2026 13:01:50 +0200 Subject: Chore: Rework examples for thorough extension testing --- examples/multi-step/src/lib.zig | 67 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 examples/multi-step/src/lib.zig (limited to 'examples/multi-step/src/lib.zig') diff --git a/examples/multi-step/src/lib.zig b/examples/multi-step/src/lib.zig new file mode 100644 index 0000000..ea244c1 --- /dev/null +++ b/examples/multi-step/src/lib.zig @@ -0,0 +1,67 @@ +const std = @import("std"); + +/// Returns the sum of a slice of i32 values. +pub fn sum(values: []const i32) i64 { + var total: i64 = 0; + for (values) |v| total += v; + return total; +} + +/// Returns the product of a slice of i32 values. +/// Returns 1 for an empty slice (identity element). +pub fn product(values: []const i32) i64 { + var result: i64 = 1; + for (values) |v| result *= v; + return result; +} + +/// Returns the minimum value, or null for an empty slice. +pub fn min(values: []const i32) ?i32 { + if (values.len == 0) return null; + var m = values[0]; + for (values[1..]) |v| { + if (v < m) m = v; + } + return m; +} + +/// Returns the maximum value, or null for an empty slice. +pub fn max(values: []const i32) ?i32 { + if (values.len == 0) return null; + var m = values[0]; + for (values[1..]) |v| { + if (v > m) m = v; + } + return m; +} + +test "sum empty" { + try std.testing.expectEqual(@as(i64, 0), sum(&.{})); +} + +test "sum positive values" { + try std.testing.expectEqual(@as(i64, 15), sum(&.{ 1, 2, 3, 4, 5 })); +} + +test "sum with negatives" { + try std.testing.expectEqual(@as(i64, 0), sum(&.{ -3, -2, -1, 0, 1, 2, 3 })); +} + +test "product empty" { + try std.testing.expectEqual(@as(i64, 1), product(&.{})); +} + +test "product small" { + try std.testing.expectEqual(@as(i64, 120), product(&.{ 1, 2, 3, 4, 5 })); +} + +test "min and max" { + const data = [_]i32{ 3, 1, 4, 1, 5, 9, 2, 6 }; + try std.testing.expectEqual(@as(?i32, 1), min(&data)); + try std.testing.expectEqual(@as(?i32, 9), max(&data)); +} + +test "min max empty" { + try std.testing.expectEqual(@as(?i32, null), min(&.{})); + try std.testing.expectEqual(@as(?i32, null), max(&.{})); +} -- cgit v1.3