authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-06-28 14:15:30-04:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2022-06-28 14:15:30-04:00
logaa1f9556d0e434e3e127f3460a3d6ee65ef17863
tree8017ab7d5d82e31ba028d7088046a8e5406a73aa
parent975a66080790956bb5591dc8aaef6e7725e72e56
parent914e2d4c99e17b6220d2101a5a26bf16e10a192e
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

Merge pull request #11952 from ziglang/test-harness-improvements

Test harness improvements

3 files changed, 23 insertions(+), 19 deletions(-)

src/test.zig+21-18
......@@ -235,9 +235,9 @@ const TestManifest = struct {
235235 inner: std.mem.SplitIterator(u8),
236236 parse_fn: ParseFn(T),
237237
238 fn next(self: *@This()) ?T {
238 fn next(self: *@This()) !?T {
239239 const next_raw = self.inner.next() orelse return null;
240 return self.parse_fn(next_raw);
240 return try self.parse_fn(next_raw);
241241 }
242242 };
243243 }
......@@ -339,20 +339,20 @@ const TestManifest = struct {
339339 allocator: Allocator,
340340 key: []const u8,
341341 comptime T: type,
342 ) error{OutOfMemory}![]const T {
342 ) ![]const T {
343343 var out = std.ArrayList(T).init(allocator);
344344 defer out.deinit();
345345 var it = self.getConfigForKey(key, T);
346 while (it.next()) |item| {
346 while (try it.next()) |item| {
347347 try out.append(item);
348348 }
349349 return out.toOwnedSlice();
350350 }
351351
352 fn getConfigForKeyAssertSingle(self: TestManifest, key: []const u8, comptime T: type) T {
352 fn getConfigForKeyAssertSingle(self: TestManifest, key: []const u8, comptime T: type) !T {
353353 var it = self.getConfigForKey(key, T);
354 const res = it.next().?;
355 assert(it.next() == null);
354 const res = (try it.next()) orelse unreachable;
355 assert((try it.next()) == null);
356356 return res;
357357 }
358358
......@@ -373,33 +373,36 @@ const TestManifest = struct {
373373 }
374374
375375 fn ParseFn(comptime T: type) type {
376 return fn ([]const u8) ?T;
376 return fn ([]const u8) anyerror!T;
377377 }
378378
379379 fn getDefaultParser(comptime T: type) ParseFn(T) {
380380 switch (@typeInfo(T)) {
381381 .Int => return struct {
382 fn parse(str: []const u8) ?T {
383 return std.fmt.parseInt(T, str, 0) catch null;
382 fn parse(str: []const u8) anyerror!T {
383 return try std.fmt.parseInt(T, str, 0);
384384 }
385385 }.parse,
386386 .Bool => return struct {
387 fn parse(str: []const u8) ?T {
388 const as_int = std.fmt.parseInt(u1, str, 0) catch return null;
387 fn parse(str: []const u8) anyerror!T {
388 const as_int = try std.fmt.parseInt(u1, str, 0);
389389 return as_int > 0;
390390 }
391391 }.parse,
392392 .Enum => return struct {
393 fn parse(str: []const u8) ?T {
394 return std.meta.stringToEnum(T, str);
393 fn parse(str: []const u8) anyerror!T {
394 return std.meta.stringToEnum(T, str) orelse {
395 std.log.err("unknown enum variant for {s}: {s}", .{ @typeName(T), str });
396 return error.UnknownEnumVariant;
397 };
395398 }
396399 }.parse,
397400 .Struct => if (comptime std.mem.eql(u8, @typeName(T), "CrossTarget")) return struct {
398 fn parse(str: []const u8) ?T {
401 fn parse(str: []const u8) anyerror!T {
399402 var opts = CrossTarget.ParseOptions{
400403 .arch_os_abi = str,
401404 };
402 return CrossTarget.parse(opts) catch null;
405 return try CrossTarget.parse(opts);
403406 }
404407 }.parse else @compileError("no default parser for " ++ @typeName(T)),
405408 else => @compileError("no default parser for " ++ @typeName(T)),
......@@ -1128,8 +1131,8 @@ pub const TestContext = struct {
11281131 if (cases.items.len == 0) {
11291132 const backends = try manifest.getConfigForKeyAlloc(ctx.arena, "backend", Backend);
11301133 const targets = try manifest.getConfigForKeyAlloc(ctx.arena, "target", CrossTarget);
1131 const is_test = manifest.getConfigForKeyAssertSingle("is_test", bool);
1132 const output_mode = manifest.getConfigForKeyAssertSingle("output_mode", std.builtin.OutputMode);
1134 const is_test = try manifest.getConfigForKeyAssertSingle("is_test", bool);
1135 const output_mode = try manifest.getConfigForKeyAssertSingle("output_mode", std.builtin.OutputMode);
11331136
11341137 const name_prefix = blk: {
11351138 const ext_index = std.mem.lastIndexOfScalar(u8, current_file.*, '.') orelse
test/cases/llvm/nested_blocks.zig+1-1
......@@ -19,6 +19,6 @@ pub fn main() void {
1919}
2020
2121// run
22// backend=stage2, llvm
22// backend=stage2,llvm
2323// target=x86_64-linux,x86_64-macos
2424//
test/cases/recursive_inline_function.0.zig+1
......@@ -9,4 +9,5 @@ inline fn fibonacci(n: usize) usize {
99}
1010
1111// run
12// target=x86_64-linux,arm-linux,x86_64-macos,wasm32-wasi
1213//