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 {
490490
491491/// Sort test filenames in-place, so that incremental test cases ("foo.0.zig",
492492/// "foo.1.zig", etc.) are contiguous and appear in numerical order.
493fn sortTestFilenames(
494 filenames: [][]const u8,
495) void {
493fn sortTestFilenames(filenames: [][]const u8) void {
496494 const Context = struct {
497495 pub fn lessThan(_: @This(), a: []const u8, b: []const u8) bool {
498496 const a_parts = getTestFileNameParts(a);
......@@ -505,14 +503,20 @@ fn sortTestFilenames(
505503 .eq => switch (std.mem.order(u8, a_parts.file_ext, b_parts.file_ext)) {
506504 .lt => true,
507505 .gt => false,
508 .eq => b: { // a and b differ only in their ".X" part
506 .eq => {
507 // a and b differ only in their ".X" part
509508
510509 // Sort "<base_name>.<file_ext>" before any "<base_name>.X.<file_ext>"
511 if (a_parts.test_index == null) break :b true;
512 if (b_parts.test_index == null) break :b false;
513
514 // Make sure that incremental tests appear in linear order
515 return a_parts.test_index.? < b_parts.test_index.?;
510 if (a_parts.test_index) |a_index| {
511 if (b_parts.test_index) |b_index| {
512 // Make sure that incremental tests appear in linear order
513 return a_index < b_index;
514 } else {
515 return false;
516 }
517 } else {
518 return b_parts.test_index != null;
519 }
516520 },
517521 },
518522 };