Skip to content

Instantly share code, notes, and snippets.

@picadoh
Created May 21, 2024 20:53
Show Gist options
  • Save picadoh/4a2da41f12ac177adf62ba6106a777da to your computer and use it in GitHub Desktop.
Save picadoh/4a2da41f12ac177adf62ba6106a777da to your computer and use it in GitHub Desktop.
Zig basic error handling
const std = @import("std");
pub fn main() !void {
const result = divideOrDefault(100, 0, 0);
std.log.info("result = {d}", .{result});
}
fn divideOrDefault(numerator: u32, denominator: u32, default: u32) u32 {
const result = divide(numerator, denominator) catch |err| {
switch (err) {
error.DivideByZero => std.log.warn(
"Error dividing {d} by {d}: {s}. Using default: {}.",
.{numerator, denominator, @errorName(err), default}
),
else => unreachable,
}
return default;
};
return result;
}
fn divide(numerator: u32, denominator: u32) !u32 {
if (denominator == 0) {
return error.DivideByZero;
}
return numerator / denominator;
}
test "should return division result" {
const result = try divide(100, 2);
try std.testing.expectEqual(@as(u32, 50), result);
}
test "should handle division by zero" {
const result = divide(100, 0);
try std.testing.expectEqual(error.DivideByZero, result);
}
test "should handle division with default on error" {
const result = divideOrDefault(100, 0, 0);
try std.testing.expectEqual(0, result);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment