authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-06-08 15:17:53-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-06-08 15:17:53-07:00
log93d7fd95477b4a4803b52d5f52d3da9bda1926c8
tree4a398541fb57a7af68c45602e58ec0d5fa462632
parent29dd9a58808f54423af8202049419f20aa362711

test harness: fix sort comparator

It was returning "true" for lessThan() when the objects were in fact equal.

1 files changed, 13 insertions(+), 9 deletions(-)

src/test.zig+13-9
...@@ -490,9 +490,7 @@ fn getTestFileNameParts(name: []const u8) struct {...@@ -490,9 +490,7 @@ fn getTestFileNameParts(name: []const u8) struct {
490490
491/// Sort test filenames in-place, so that incremental test cases ("foo.0.zig",491/// Sort test filenames in-place, so that incremental test cases ("foo.0.zig",
492/// "foo.1.zig", etc.) are contiguous and appear in numerical order.492/// "foo.1.zig", etc.) are contiguous and appear in numerical order.
493fn sortTestFilenames(493fn sortTestFilenames(filenames: [][]const u8) void {
494 filenames: [][]const u8,
495) void {
496 const Context = struct {494 const Context = struct {
497 pub fn lessThan(_: @This(), a: []const u8, b: []const u8) bool {495 pub fn lessThan(_: @This(), a: []const u8, b: []const u8) bool {
498 const a_parts = getTestFileNameParts(a);496 const a_parts = getTestFileNameParts(a);
...@@ -505,14 +503,20 @@ fn sortTestFilenames(...@@ -505,14 +503,20 @@ fn sortTestFilenames(
505 .eq => switch (std.mem.order(u8, a_parts.file_ext, b_parts.file_ext)) {503 .eq => switch (std.mem.order(u8, a_parts.file_ext, b_parts.file_ext)) {
506 .lt => true,504 .lt => true,
507 .gt => false,505 .gt => false,
508 .eq => b: { // a and b differ only in their ".X" part506 .eq => {
507 // a and b differ only in their ".X" part
509508
510 // Sort "<base_name>.<file_ext>" before any "<base_name>.X.<file_ext>"509 // Sort "<base_name>.<file_ext>" before any "<base_name>.X.<file_ext>"
511 if (a_parts.test_index == null) break :b true;510 if (a_parts.test_index) |a_index| {
512 if (b_parts.test_index == null) break :b false;511 if (b_parts.test_index) |b_index| {
513512 // Make sure that incremental tests appear in linear order
514 // Make sure that incremental tests appear in linear order513 return a_index < b_index;
515 return a_parts.test_index.? < b_parts.test_index.?;514 } else {
515 return false;
516 }
517 } else {
518 return b_parts.test_index != null;
519 }
516 },520 },
517 },521 },
518 };522 };