authorgravatar for squeek502@hotmail.comRyan Liptak <squeek502@hotmail.com> 2023-08-04 18:00:52-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-08-05 11:54:26-07:00
log90fde14c5f4406c284ec030186172b3db4697258
tree1a5f2ae17ce10105b1d9c97b069f6703cf72a196
parenta91a8df6791b6fe228ad616acd9fbbde46451651

std.testing.expectEqualSlices: On failure, print address for pointer types

When comparing slice elements, `std.meta.eql` is used which only compares pointer address and length to determine equality for pointer types. This previously led to confusing results where `expectEqualSlices` would appear to fail on seemingly equal slices (judging by the output of `expectEqualSlices`. For example: try testing.expectEqualSlices( []const i64, &[_][]const i64{ &[_]i64{ 1, 2, 3 }, &[_]i64{ 5, 5, 5 } }, &[_][]const i64{ &[_]i64{ 1, 2, 3 }, &[_]i64{ 5, 5, 5 } }, ); Previously, this would result in: ============ expected this output: ============= len: 2 (0x2) [0]: { 1, 2, 3 } [1]: { 5, 5, 5 } ============= instead found this: ============== len: 2 (0x2) [0]: { 1, 2, 3 } [1]: { 5, 5, 5 } ================================================ After this commit, it will result in: ============ expected this output: ============= len: 2 (0x2) [0]i64@7ff7e2773758: { 1, 2, 3 } [1]i64@7ff7e2773770: { 5, 5, 5 } ============= instead found this: ============== len: 2 (0x2) [0]i64@7ff7e2773788: { 1, 2, 3 } [1]i64@7ff7e27737a0: { 5, 5, 5 } ================================================

1 files changed, 5 insertions(+), 1 deletions(-)

lib/std/testing.zig+5-1
...@@ -394,7 +394,11 @@ fn SliceDiffer(comptime T: type) type {...@@ -394,7 +394,11 @@ fn SliceDiffer(comptime T: type) type {
394 var full_index = self.start_index + i;394 var full_index = self.start_index + i;
395 const diff = if (i < self.actual.len) !std.meta.eql(self.actual[i], value) else true;395 const diff = if (i < self.actual.len) !std.meta.eql(self.actual[i], value) else true;
396 if (diff) try self.ttyconf.setColor(writer, .red);396 if (diff) try self.ttyconf.setColor(writer, .red);
397 try writer.print("[{}]: {any}\n", .{ full_index, value });397 if (@typeInfo(T) == .Pointer) {
398 try writer.print("[{}]{*}: {any}\n", .{ full_index, value, value });
399 } else {
400 try writer.print("[{}]: {any}\n", .{ full_index, value });
401 }
398 if (diff) try self.ttyconf.setColor(writer, .reset);402 if (diff) try self.ttyconf.setColor(writer, .reset);
399 }403 }
400 }404 }