diff options
Diffstat (limited to 'challenge-308/deadmarshal/zig/ch2/src')
| -rw-r--r-- | challenge-308/deadmarshal/zig/ch2/src/main.zig | 38 | ||||
| -rw-r--r-- | challenge-308/deadmarshal/zig/ch2/src/root.zig | 10 |
2 files changed, 48 insertions, 0 deletions
diff --git a/challenge-308/deadmarshal/zig/ch2/src/main.zig b/challenge-308/deadmarshal/zig/ch2/src/main.zig new file mode 100644 index 0000000000..b13741cdf2 --- /dev/null +++ b/challenge-308/deadmarshal/zig/ch2/src/main.zig @@ -0,0 +1,38 @@ +const std = @import("std"); + +fn decodeXor( + allocator: std.mem.Allocator, + arr: []const u32, + first: u32, +) ![]u32 { + const res = try allocator.alloc(u32, arr.len + 1); + errdefer allocator.free(res); + res[0] = first; + for (0..arr.len) |i| { + res[i + 1] = res[i] ^ arr[i]; + } + return res; +} + +pub fn main() !void { + var gpa = std.heap.GeneralPurposeAllocator(.{}){}; + defer { + std.debug.assert(gpa.detectLeaks() == false); + std.debug.assert(gpa.deinit() == .ok); + } + const allocator = gpa.allocator(); + + const a1: []const u32 = &.{ 1, 2, 3 }; + const a2: []const u32 = &.{ 6, 2, 7, 3 }; + + const res1 = try decodeXor(allocator, a1, 1); + const res2 = try decodeXor(allocator, a2, 4); + + std.debug.print("{any}\n", .{res1}); + std.debug.print("{any}\n", .{res2}); + + defer { + allocator.free(res1); + allocator.free(res2); + } +} diff --git a/challenge-308/deadmarshal/zig/ch2/src/root.zig b/challenge-308/deadmarshal/zig/ch2/src/root.zig new file mode 100644 index 0000000000..ecfeade1a3 --- /dev/null +++ b/challenge-308/deadmarshal/zig/ch2/src/root.zig @@ -0,0 +1,10 @@ +const std = @import("std"); +const testing = std.testing; + +export fn add(a: i32, b: i32) i32 { + return a + b; +} + +test "basic add functionality" { + try testing.expect(add(3, 7) == 10); +} |
