6
4

Using expectEqual

2y 11mon ago by lemmy.world/u/aion in zig

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.

Did you try casting like this? Doesn't read any better though.

std.testing.expectEqual(10, @as(comptime_int, add(3, 7))