zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 4578d13b49d16463b870119005877f7b6e10092e (tree)
parent 55304128c086989ad4c08e51c7708d61d544e820
Author: data-man <datamanrb@gmail.com>
Date:   Tue,  7 Jan 2020 19:14:37 +0500

Vector comparison in meta and testing

Diffstat:
Mlib/std/meta.zig | 15+++++++++++++++
Mlib/std/testing.zig | 17++++++++++++++++-
2 files changed, 31 insertions(+), 1 deletion(-)

diff --git a/lib/std/meta.zig b/lib/std/meta.zig @@ -433,6 +433,14 @@ pub fn eql(a: var, b: @TypeOf(a)) bool { if (!eql(e, b[i])) return false; return true; }, + builtin.TypeId.Vector => { + const info = @typeInfo(T).Vector; + var i: usize = 0; + while (i < info.len) : (i += 1) { + if (!eql(a[i], b[i])) return false; + } + return true; + }, builtin.TypeId.Pointer => { const info = @typeInfo(T).Pointer; switch (info.size) { @@ -510,6 +518,13 @@ test "std.meta.eql" { testing.expect(eql(EU.tst(true), EU.tst(true))); testing.expect(eql(EU.tst(false), EU.tst(false))); testing.expect(!eql(EU.tst(false), EU.tst(true))); + + var v1 = @splat(4, @as(u32, 1)); + var v2 = @splat(4, @as(u32, 1)); + var v3 = @splat(4, @as(u32, 2)); + + testing.expect(eql(v1, v2)); + testing.expect(!eql(v1, v3)); } test "intToEnum with error return" { diff --git a/lib/std/testing.zig b/lib/std/testing.zig @@ -56,7 +56,6 @@ pub fn expectEqual(expected: var, actual: @TypeOf(expected)) void { .EnumLiteral, .Enum, .Fn, - .Vector, .ErrorSet, => { if (actual != expected) { @@ -88,6 +87,15 @@ pub fn expectEqual(expected: var, actual: @TypeOf(expected)) void { .Array => |array| expectEqualSlices(array.child, &expected, &actual), + .Vector => |vectorType| { + var i: usize = 0; + while (i < vectorType.len) : (i += 1) { + if (!std.meta.eql(expected[i], actual[i])) { + std.debug.panic("index {} incorrect. expected {}, found {}", .{ i, expected[i], actual[i] }); + } + } + }, + .Struct => |structType| { inline for (structType.fields) |field| { expectEqual(@field(expected, field.name), @field(actual, field.name)); @@ -202,3 +210,10 @@ test "expectEqual nested array" { expectEqual(a, b); } + +test "expectEqual vector" { + var a = @splat(4, @as(u32, 4)); + var b = @splat(4, @as(u32, 4)); + + expectEqual(a, b); +}