authorgravatar for noam@pixelhero.devNoam Preil <noam@pixelhero.dev> 2020-06-26 02:42:02-04:00
committergravatar for noam@pixelhero.devNoam Preil <noam@pixelhero.dev> 2020-06-26 02:42:02-04:00
log649da2df5234f504f2f22afe9e0b4cf7eeb9ef35
tree2e7873b9d8bdead87e2d3698e6462d7d86133b54
parentc88edbc46fbbdc5a97c9703d09097af5f8d2a653
signaturelock-open Commit is signed but in an unrecognized format.

Stage2/Testing: Add convenience wrappers


4 files changed, 83 insertions(+), 9 deletions(-)

src-self-hosted/test.zig+74
......@@ -138,6 +138,14 @@ pub const TestContext = struct {
138138 return &ctx.cases.items[ctx.cases.items.len - 1];
139139 }
140140
141 pub fn exe(ctx: *TestContext, name: []const u8, target: std.zig.CrossTarget) *Case {
142 return ctx.addExe(name, target, .Zig);
143 }
144
145 pub fn exeZIR(ctx: *TestContext, name: []const u8, target: std.zig.CrossTarget) *Case {
146 return ctx.addExe(name, target, .ZIR);
147 }
148
141149 pub fn addObj(
142150 ctx: *TestContext,
143151 name: []const u8,
......@@ -154,6 +162,14 @@ pub const TestContext = struct {
154162 return &ctx.cases.items[ctx.cases.items.len - 1];
155163 }
156164
165 pub fn obj(ctx: *TestContext, name: []const u8, target: std.zig.CrossTarget) *Case {
166 return ctx.addObj(name, target, .Zig);
167 }
168
169 pub fn objZIR(ctx: *TestContext, name: []const u8, target: std.zig.CrossTarget) *Case {
170 return ctx.addObj(name, target, .ZIR);
171 }
172
157173 pub fn addCompareOutput(
158174 ctx: *TestContext,
159175 name: []const u8,
......@@ -164,6 +180,24 @@ pub const TestContext = struct {
164180 ctx.addExe(name, .{}, T).addCompareOutput(src, expected_stdout);
165181 }
166182
183 pub fn compareOutput(
184 ctx: *TestContext,
185 name: []const u8,
186 src: [:0]const u8,
187 expected_stdout: []const u8,
188 ) void {
189 return ctx.addCompareOutput(name, .Zig, src, expected_stdout);
190 }
191
192 pub fn compareOutputZIR(
193 ctx: *TestContext,
194 name: []const u8,
195 src: [:0]const u8,
196 expected_stdout: []const u8,
197 ) void {
198 ctx.addCompareOutput(name, .ZIR, src, expected_stdout);
199 }
200
167201 pub fn addTransform(
168202 ctx: *TestContext,
169203 name: []const u8,
......@@ -175,6 +209,26 @@ pub const TestContext = struct {
175209 ctx.addObj(name, target, T).addTransform(src, result);
176210 }
177211
212 pub fn transform(
213 ctx: *TestContext,
214 name: []const u8,
215 target: std.zig.CrossTarget,
216 src: [:0]const u8,
217 result: [:0]const u8,
218 ) void {
219 ctx.addTransform(name, target, .Zig, src, result);
220 }
221
222 pub fn transformZIR(
223 ctx: *TestContext,
224 name: []const u8,
225 target: std.zig.CrossTarget,
226 src: [:0]const u8,
227 result: [:0]const u8,
228 ) void {
229 ctx.addTransform(name, target, .ZIR, src, result);
230 }
231
178232 pub fn addError(
179233 ctx: *TestContext,
180234 name: []const u8,
......@@ -186,6 +240,26 @@ pub const TestContext = struct {
186240 ctx.addObj(name, target, T).addError(src, expected_errors);
187241 }
188242
243 pub fn compileError(
244 ctx: *TestContext,
245 name: []const u8,
246 target: std.zig.CrossTarget,
247 src: [:0]const u8,
248 expected_errors: []const []const u8,
249 ) void {
250 ctx.addError(name, target, .Zig, src, expected_errors);
251 }
252
253 pub fn compileErrorZIR(
254 ctx: *TestContext,
255 name: []const u8,
256 target: std.zig.CrossTarget,
257 src: [:0]const u8,
258 expected_errors: []const []const u8,
259 ) void {
260 ctx.addError(name, target, .ZIR, src, expected_errors);
261 }
262
189263 fn init() TestContext {
190264 const allocator = std.heap.page_allocator;
191265 return .{ .cases = std.ArrayList(Case).init(allocator) };
test/stage2/compare_output.zig+1-1
......@@ -17,7 +17,7 @@ pub fn addCases(ctx: *TestContext) !void {
1717 }
1818
1919 {
20 var case = ctx.addExe("hello world with updates", linux_x64, .Zig);
20 var case = ctx.exe("hello world with updates", linux_x64);
2121 // Regular old hello world
2222 case.addCompareOutput(
2323 \\export fn _start() noreturn {
test/stage2/compile_errors.zig+3-3
......@@ -9,7 +9,7 @@ const linux_x64 = std.zig.CrossTarget{
99};
1010
1111pub fn addCases(ctx: *TestContext) !void {
12 ctx.addError("call undefined local", linux_x64, .ZIR,
12 ctx.compileErrorZIR("call undefined local", linux_x64,
1313 \\@noreturn = primitive(noreturn)
1414 \\
1515 \\@start_fnty = fntype([], @noreturn, cc=Naked)
......@@ -19,7 +19,7 @@ pub fn addCases(ctx: *TestContext) !void {
1919 // TODO: address inconsistency in this message and the one in the next test
2020 , &[_][]const u8{":5:13: error: unrecognized identifier: %test"});
2121
22 ctx.addError("call with non-existent target", linux_x64, .ZIR,
22 ctx.compileErrorZIR("call with non-existent target", linux_x64,
2323 \\@noreturn = primitive(noreturn)
2424 \\
2525 \\@start_fnty = fntype([], @noreturn, cc=Naked)
......@@ -31,7 +31,7 @@ pub fn addCases(ctx: *TestContext) !void {
3131 , &[_][]const u8{":5:13: error: decl 'notafunc' not found"});
3232
3333 // TODO: this error should occur at the call site, not the fntype decl
34 ctx.addError("call naked function", linux_x64, .ZIR,
34 ctx.compileErrorZIR("call naked function", linux_x64,
3535 \\@noreturn = primitive(noreturn)
3636 \\
3737 \\@start_fnty = fntype([], @noreturn, cc=Naked)
test/stage2/zir.zig+5-5
......@@ -9,7 +9,7 @@ const linux_x64 = std.zig.CrossTarget{
99};
1010
1111pub fn addCases(ctx: *TestContext) !void {
12 ctx.addTransform("referencing decls which appear later in the file", linux_x64, .ZIR,
12 ctx.transformZIR("referencing decls which appear later in the file", linux_x64,
1313 \\@void = primitive(void)
1414 \\@fnty = fntype([], @void, cc=C)
1515 \\
......@@ -32,7 +32,7 @@ pub fn addCases(ctx: *TestContext) !void {
3232 \\})
3333 \\
3434 );
35 ctx.addTransform("elemptr, add, cmp, condbr, return, breakpoint", linux_x64, .ZIR,
35 ctx.transformZIR("elemptr, add, cmp, condbr, return, breakpoint", linux_x64,
3636 \\@void = primitive(void)
3737 \\@usize = primitive(usize)
3838 \\@fnty = fntype([], @void, cc=C)
......@@ -86,7 +86,7 @@ pub fn addCases(ctx: *TestContext) !void {
8686 );
8787
8888 {
89 var case = ctx.addObj("reference cycle with compile error in the cycle", linux_x64, .ZIR);
89 var case = ctx.objZIR("reference cycle with compile error in the cycle", linux_x64);
9090 case.addTransform(
9191 \\@void = primitive(void)
9292 \\@fnty = fntype([], @void, cc=C)
......@@ -207,7 +207,7 @@ pub fn addCases(ctx: *TestContext) !void {
207207 return;
208208 }
209209
210 ctx.addCompareOutput("hello world ZIR", .ZIR,
210 ctx.compareOutputZIR("hello world ZIR",
211211 \\@noreturn = primitive(noreturn)
212212 \\@void = primitive(void)
213213 \\@usize = primitive(usize)
......@@ -265,7 +265,7 @@ pub fn addCases(ctx: *TestContext) !void {
265265 \\
266266 );
267267
268 ctx.addCompareOutput("function call with no args no return value", .ZIR,
268 ctx.compareOutputZIR("function call with no args no return value",
269269 \\@noreturn = primitive(noreturn)
270270 \\@void = primitive(void)
271271 \\@usize = primitive(usize)