Is this the best way to use expectEqual
?
fn add(a: i64, b: i64) i64 {
return a + b;
}
test "basic test" {
try std.testing.expectEqual(@as(i64, 10), add(3, 7));
}
Without the @as
the test doesn’t even compile:
./src/main.zig:12:40: error: expected type 'comptime_int', found 'i64'
try std.testing.expectEqual(10, add(3, 7));
Having to use @as
seems makes the test less readable. It seems to me inferring the type of expected
from the type of actual
would make more sense.
Should work if “10” is also declared as a variable with type “i64” I think?
Sure, you could do:
const ten: i64 = 10;
try std.testing.expectEqual(ten, add(3, 7));
Is there a way to write an i64
literal?
If we look at the signature expectEqual(expected: anytype, actual: @TypeOf(expected)) !void
, notice that the second arg’s type depends on the first arg’s type.
To avoid using @as
coercion, we can just swap the passing arguments. comptime_int
can be inferred as i64
, not the other way around. And that makes sense because literal values are unsized.
I am not sure if there is already an issue for this. But I usually just switch expected with actual in the arguments. As you mentioned, reading the failing test output is then harder obviously.