aboutsummaryrefslogtreecommitdiff
path: root/examples/hello-zig/src
diff options
context:
space:
mode:
Diffstat (limited to 'examples/hello-zig/src')
-rw-r--r--examples/hello-zig/src/main.zig32
-rw-r--r--examples/hello-zig/src/root.zig83
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);
-}