diff options
Diffstat (limited to 'examples/hello-zig/src')
| -rw-r--r-- | examples/hello-zig/src/main.zig | 32 | ||||
| -rw-r--r-- | examples/hello-zig/src/root.zig | 83 |
2 files changed, 0 insertions, 115 deletions
diff --git a/examples/hello-zig/src/main.zig b/examples/hello-zig/src/main.zig deleted file mode 100644 index 74eb590..0000000 --- a/examples/hello-zig/src/main.zig +++ /dev/null @@ -1,32 +0,0 @@ -const std = @import("std"); -const hello_zig = @import("hello_zig"); - -pub fn main() !void { - var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); - defer arena.deinit(); - - const allocator = arena.allocator(); - const args = try std.process.argsAlloc(allocator); - const name = if (args.len > 1) args[1] else "Nova"; - - var greeter = hello_zig.Greeter{ - .name = name, - .punctuation = '!', - }; - - const stdout = std.fs.File.stdout().deprecatedWriter(); - try greeter.write(stdout, .verbose); - - const sample_values = [_]i32{ -3, -2, 0, 1, 2, 3, 4 }; - var squares = try hello_zig.collectEvenSquares(allocator, &sample_values); - defer squares.deinit(allocator); - - std.debug.print("even squares: {any}\n", .{squares.items}); -} - -test "main module can compute a summary" { - const greeting = try hello_zig.describeNumber(std.testing.allocator, 42); - defer std.testing.allocator.free(greeting); - - try std.testing.expect(std.mem.startsWith(u8, greeting, "positive")); -} diff --git a/examples/hello-zig/src/root.zig b/examples/hello-zig/src/root.zig deleted file mode 100644 index f6600ac..0000000 --- a/examples/hello-zig/src/root.zig +++ /dev/null @@ -1,83 +0,0 @@ -const std = @import("std"); - -pub const OutputStyle = enum { - compact, - verbose, -}; - -pub const NumberKind = union(enum) { - negative: i64, - zero, - positive: u64, -}; - -pub const Greeter = struct { - name: []const u8, - punctuation: u8 = '!', - - pub fn write(self: Greeter, writer: anytype, style: OutputStyle) !void { - switch (style) { - .compact => try writer.print("hello, {s}{c}\n", .{ self.name, self.punctuation }), - .verbose => { - try writer.print( - \\hello, {s}{c} - \\this sample is here to exercise Zig syntax support in Nova. - \\ - , .{ self.name, self.punctuation }); - }, - } - } -}; - -pub fn classifyNumber(value: i64) NumberKind { - if (value == 0) return .zero; - if (value < 0) return .{ .negative = value }; - return .{ .positive = @intCast(value) }; -} - -pub fn describeNumber(allocator: std.mem.Allocator, value: i64) ![]u8 { - return switch (classifyNumber(value)) { - .zero => std.fmt.allocPrint(allocator, "zero", .{}), - .negative => |negative| std.fmt.allocPrint(allocator, "negative({d})", .{negative}), - .positive => |positive| std.fmt.allocPrint(allocator, "positive({d})", .{positive}), - }; -} - -pub fn collectEvenSquares( - allocator: std.mem.Allocator, - values: []const i32, -) !std.ArrayList(i32) { - var result: std.ArrayList(i32) = .empty; - errdefer result.deinit(allocator); - - for (values) |value| { - if (@mod(value, 2) != 0) continue; - try result.append(allocator, value * value); - } - - return result; -} - -test "classifyNumber covers the main branches" { - try std.testing.expectEqual(NumberKind{ .negative = -5 }, classifyNumber(-5)); - try std.testing.expectEqual(NumberKind.zero, classifyNumber(0)); - try std.testing.expectEqual(NumberKind{ .positive = 9 }, classifyNumber(9)); -} - -test "collectEvenSquares keeps only even numbers" { - const values = [_]i32{ -4, -3, 0, 1, 2, 7 }; - var result = try collectEvenSquares(std.testing.allocator, &values); - defer result.deinit(std.testing.allocator); - - try std.testing.expectEqualSlices(i32, &.{ 16, 0, 4 }, result.items); -} - -test "Greeter.write renders verbose output" { - var list: std.ArrayList(u8) = .empty; - defer list.deinit(std.testing.allocator); - - const writer = list.writer(std.testing.allocator); - try (Greeter{ .name = "Zig" }).write(writer, .verbose); - - try std.testing.expect(std.mem.indexOf(u8, list.items, "exercise Zig syntax support") != null); -} |
