mirror of
https://github.com/ziglang/zig.git
synced 2026-02-12 12:27:41 +00:00
Stage2/Testing: Add convenience wrappers
This commit is contained in:
parent
c88edbc46f
commit
649da2df52
@ -138,6 +138,14 @@ pub const TestContext = struct {
|
||||
return &ctx.cases.items[ctx.cases.items.len - 1];
|
||||
}
|
||||
|
||||
pub fn exe(ctx: *TestContext, name: []const u8, target: std.zig.CrossTarget) *Case {
|
||||
return ctx.addExe(name, target, .Zig);
|
||||
}
|
||||
|
||||
pub fn exeZIR(ctx: *TestContext, name: []const u8, target: std.zig.CrossTarget) *Case {
|
||||
return ctx.addExe(name, target, .ZIR);
|
||||
}
|
||||
|
||||
pub fn addObj(
|
||||
ctx: *TestContext,
|
||||
name: []const u8,
|
||||
@ -154,6 +162,14 @@ pub const TestContext = struct {
|
||||
return &ctx.cases.items[ctx.cases.items.len - 1];
|
||||
}
|
||||
|
||||
pub fn obj(ctx: *TestContext, name: []const u8, target: std.zig.CrossTarget) *Case {
|
||||
return ctx.addObj(name, target, .Zig);
|
||||
}
|
||||
|
||||
pub fn objZIR(ctx: *TestContext, name: []const u8, target: std.zig.CrossTarget) *Case {
|
||||
return ctx.addObj(name, target, .ZIR);
|
||||
}
|
||||
|
||||
pub fn addCompareOutput(
|
||||
ctx: *TestContext,
|
||||
name: []const u8,
|
||||
@ -164,6 +180,24 @@ pub const TestContext = struct {
|
||||
ctx.addExe(name, .{}, T).addCompareOutput(src, expected_stdout);
|
||||
}
|
||||
|
||||
pub fn compareOutput(
|
||||
ctx: *TestContext,
|
||||
name: []const u8,
|
||||
src: [:0]const u8,
|
||||
expected_stdout: []const u8,
|
||||
) void {
|
||||
return ctx.addCompareOutput(name, .Zig, src, expected_stdout);
|
||||
}
|
||||
|
||||
pub fn compareOutputZIR(
|
||||
ctx: *TestContext,
|
||||
name: []const u8,
|
||||
src: [:0]const u8,
|
||||
expected_stdout: []const u8,
|
||||
) void {
|
||||
ctx.addCompareOutput(name, .ZIR, src, expected_stdout);
|
||||
}
|
||||
|
||||
pub fn addTransform(
|
||||
ctx: *TestContext,
|
||||
name: []const u8,
|
||||
@ -175,6 +209,26 @@ pub const TestContext = struct {
|
||||
ctx.addObj(name, target, T).addTransform(src, result);
|
||||
}
|
||||
|
||||
pub fn transform(
|
||||
ctx: *TestContext,
|
||||
name: []const u8,
|
||||
target: std.zig.CrossTarget,
|
||||
src: [:0]const u8,
|
||||
result: [:0]const u8,
|
||||
) void {
|
||||
ctx.addTransform(name, target, .Zig, src, result);
|
||||
}
|
||||
|
||||
pub fn transformZIR(
|
||||
ctx: *TestContext,
|
||||
name: []const u8,
|
||||
target: std.zig.CrossTarget,
|
||||
src: [:0]const u8,
|
||||
result: [:0]const u8,
|
||||
) void {
|
||||
ctx.addTransform(name, target, .ZIR, src, result);
|
||||
}
|
||||
|
||||
pub fn addError(
|
||||
ctx: *TestContext,
|
||||
name: []const u8,
|
||||
@ -186,6 +240,26 @@ pub const TestContext = struct {
|
||||
ctx.addObj(name, target, T).addError(src, expected_errors);
|
||||
}
|
||||
|
||||
pub fn compileError(
|
||||
ctx: *TestContext,
|
||||
name: []const u8,
|
||||
target: std.zig.CrossTarget,
|
||||
src: [:0]const u8,
|
||||
expected_errors: []const []const u8,
|
||||
) void {
|
||||
ctx.addError(name, target, .Zig, src, expected_errors);
|
||||
}
|
||||
|
||||
pub fn compileErrorZIR(
|
||||
ctx: *TestContext,
|
||||
name: []const u8,
|
||||
target: std.zig.CrossTarget,
|
||||
src: [:0]const u8,
|
||||
expected_errors: []const []const u8,
|
||||
) void {
|
||||
ctx.addError(name, target, .ZIR, src, expected_errors);
|
||||
}
|
||||
|
||||
fn init() TestContext {
|
||||
const allocator = std.heap.page_allocator;
|
||||
return .{ .cases = std.ArrayList(Case).init(allocator) };
|
||||
|
||||
@ -17,7 +17,7 @@ pub fn addCases(ctx: *TestContext) !void {
|
||||
}
|
||||
|
||||
{
|
||||
var case = ctx.addExe("hello world with updates", linux_x64, .Zig);
|
||||
var case = ctx.exe("hello world with updates", linux_x64);
|
||||
// Regular old hello world
|
||||
case.addCompareOutput(
|
||||
\\export fn _start() noreturn {
|
||||
|
||||
@ -9,7 +9,7 @@ const linux_x64 = std.zig.CrossTarget{
|
||||
};
|
||||
|
||||
pub fn addCases(ctx: *TestContext) !void {
|
||||
ctx.addError("call undefined local", linux_x64, .ZIR,
|
||||
ctx.compileErrorZIR("call undefined local", linux_x64,
|
||||
\\@noreturn = primitive(noreturn)
|
||||
\\
|
||||
\\@start_fnty = fntype([], @noreturn, cc=Naked)
|
||||
@ -19,7 +19,7 @@ pub fn addCases(ctx: *TestContext) !void {
|
||||
// TODO: address inconsistency in this message and the one in the next test
|
||||
, &[_][]const u8{":5:13: error: unrecognized identifier: %test"});
|
||||
|
||||
ctx.addError("call with non-existent target", linux_x64, .ZIR,
|
||||
ctx.compileErrorZIR("call with non-existent target", linux_x64,
|
||||
\\@noreturn = primitive(noreturn)
|
||||
\\
|
||||
\\@start_fnty = fntype([], @noreturn, cc=Naked)
|
||||
@ -31,7 +31,7 @@ pub fn addCases(ctx: *TestContext) !void {
|
||||
, &[_][]const u8{":5:13: error: decl 'notafunc' not found"});
|
||||
|
||||
// TODO: this error should occur at the call site, not the fntype decl
|
||||
ctx.addError("call naked function", linux_x64, .ZIR,
|
||||
ctx.compileErrorZIR("call naked function", linux_x64,
|
||||
\\@noreturn = primitive(noreturn)
|
||||
\\
|
||||
\\@start_fnty = fntype([], @noreturn, cc=Naked)
|
||||
|
||||
@ -9,7 +9,7 @@ const linux_x64 = std.zig.CrossTarget{
|
||||
};
|
||||
|
||||
pub fn addCases(ctx: *TestContext) !void {
|
||||
ctx.addTransform("referencing decls which appear later in the file", linux_x64, .ZIR,
|
||||
ctx.transformZIR("referencing decls which appear later in the file", linux_x64,
|
||||
\\@void = primitive(void)
|
||||
\\@fnty = fntype([], @void, cc=C)
|
||||
\\
|
||||
@ -32,7 +32,7 @@ pub fn addCases(ctx: *TestContext) !void {
|
||||
\\})
|
||||
\\
|
||||
);
|
||||
ctx.addTransform("elemptr, add, cmp, condbr, return, breakpoint", linux_x64, .ZIR,
|
||||
ctx.transformZIR("elemptr, add, cmp, condbr, return, breakpoint", linux_x64,
|
||||
\\@void = primitive(void)
|
||||
\\@usize = primitive(usize)
|
||||
\\@fnty = fntype([], @void, cc=C)
|
||||
@ -86,7 +86,7 @@ pub fn addCases(ctx: *TestContext) !void {
|
||||
);
|
||||
|
||||
{
|
||||
var case = ctx.addObj("reference cycle with compile error in the cycle", linux_x64, .ZIR);
|
||||
var case = ctx.objZIR("reference cycle with compile error in the cycle", linux_x64);
|
||||
case.addTransform(
|
||||
\\@void = primitive(void)
|
||||
\\@fnty = fntype([], @void, cc=C)
|
||||
@ -207,7 +207,7 @@ pub fn addCases(ctx: *TestContext) !void {
|
||||
return;
|
||||
}
|
||||
|
||||
ctx.addCompareOutput("hello world ZIR", .ZIR,
|
||||
ctx.compareOutputZIR("hello world ZIR",
|
||||
\\@noreturn = primitive(noreturn)
|
||||
\\@void = primitive(void)
|
||||
\\@usize = primitive(usize)
|
||||
@ -265,7 +265,7 @@ pub fn addCases(ctx: *TestContext) !void {
|
||||
\\
|
||||
);
|
||||
|
||||
ctx.addCompareOutput("function call with no args no return value", .ZIR,
|
||||
ctx.compareOutputZIR("function call with no args no return value",
|
||||
\\@noreturn = primitive(noreturn)
|
||||
\\@void = primitive(void)
|
||||
\\@usize = primitive(usize)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user