Commit 4578d13b49

data-man <datamanrb@gmail.com>
2020-01-07 15:14:37
Vector comparison in meta and testing
1 parent 5530412
Changed files (2)
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" {
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);
+}