authorgravatar for noam@pixelhero.devNoam Preil <noam@pixelhero.dev> 2020-06-14 20:55:49-04:00
committergravatar for noam@pixelhero.devNoam Preil <noam@pixelhero.dev> 2020-06-15 20:33:32-04:00
log71dca252a575a6a09e16dfc8faf8b704e847eb87
treedef217a032cfb61f408f01d61846c9c45f667f8d
parentb6bd51ed69f75930bbf9a80b5b8841d1517a6828
signaturelock-open Commit is signed but in an unrecognized format.

Stage2/Testing: Rename stage -> update


1 files changed, 25 insertions(+), 25 deletions(-)

src-self-hosted/test.zig+25-25
...@@ -82,24 +82,24 @@ pub const TestContext = struct {...@@ -82,24 +82,24 @@ pub const TestContext = struct {
82 };82 };
8383
84 pub const ZIRUpdateType = enum {84 pub const ZIRUpdateType = enum {
85 /// A transformation stage transforms the input ZIR and tests against85 /// A transformation update transforms the input ZIR and tests against
86 /// the expected output86 /// the expected output
87 Transformation,87 Transformation,
88 /// An error stage attempts to compile bad code, and ensures that it88 /// An error update attempts to compile bad code, and ensures that it
89 /// fails to compile, and for the expected reasons89 /// fails to compile, and for the expected reasons
90 Error,90 Error,
91 /// An execution stage compiles and runs the input ZIR, feeding in91 /// An execution update compiles and runs the input ZIR, feeding in
92 /// provided input and ensuring that the outputs match what is expected92 /// provided input and ensuring that the outputs match what is expected
93 Execution,93 Execution,
94 /// A compilation stage checks that the ZIR compiles without any issues94 /// A compilation update checks that the ZIR compiles without any issues
95 Compiles,95 Compiles,
96 };96 };
9797
98 pub const ZIRUpdate = struct {98 pub const ZIRUpdate = struct {
99 /// The input to the current stage. We simulate an incremental update99 /// The input to the current update. We simulate an incremental update
100 /// with the file's contents changed to this value each stage.100 /// with the file's contents changed to this value each update.
101 ///101 ///
102 /// This value can change entirely between stages, which would be akin102 /// This value can change entirely between updates, which would be akin
103 /// to deleting the source file and creating a new one from scratch; or103 /// to deleting the source file and creating a new one from scratch; or
104 /// you can keep it mostly consistent, with small changes, testing the104 /// you can keep it mostly consistent, with small changes, testing the
105 /// effects of the incremental compilation.105 /// effects of the incremental compilation.
...@@ -114,7 +114,7 @@ pub const TestContext = struct {...@@ -114,7 +114,7 @@ pub const TestContext = struct {
114 ///114 ///
115 /// If stdout, stderr, and exit_code are all null, addZIRCase will115 /// If stdout, stderr, and exit_code are all null, addZIRCase will
116 /// discard the test. To test for successful compilation, use a116 /// discard the test. To test for successful compilation, use a
117 /// dedicated Compile stage instead.117 /// dedicated Compile update instead.
118 Execution: struct {118 Execution: struct {
119 stdin: ?[]const u8,119 stdin: ?[]const u8,
120 stdout: ?[]const u8,120 stdout: ?[]const u8,
...@@ -131,9 +131,9 @@ pub const TestContext = struct {...@@ -131,9 +131,9 @@ pub const TestContext = struct {
131 },131 },
132 };132 };
133133
134 /// A ZIRCase consists of a set of *stages*. A stage can transform ZIR,134 /// A ZIRCase consists of a set of *updates*. A update can transform ZIR,
135 /// compile it, ensure that compilation fails, and more. The same Module is135 /// compile it, ensure that compilation fails, and more. The same Module is
136 /// used for each stage, so each stage's source is treated as a single file136 /// used for each update, so each update's source is treated as a single file
137 /// being updated by the test harness and incrementally compiled.137 /// being updated by the test harness and incrementally compiled.
138 pub const ZIRCase = struct {138 pub const ZIRCase = struct {
139 name: []const u8,139 name: []const u8,
...@@ -141,19 +141,19 @@ pub const TestContext = struct {...@@ -141,19 +141,19 @@ pub const TestContext = struct {
141 /// such as QEMU is required for tests to complete.141 /// such as QEMU is required for tests to complete.
142 ///142 ///
143 target: std.zig.CrossTarget,143 target: std.zig.CrossTarget,
144 stages: []const ZIRUpdate,144 updates: []const ZIRUpdate,
145 };145 };
146146
147 pub fn addZIRCase(147 pub fn addZIRCase(
148 ctx: *TestContext,148 ctx: *TestContext,
149 name: []const u8,149 name: []const u8,
150 target: std.zig.CrossTarget,150 target: std.zig.CrossTarget,
151 stages: []const ZIRUpdate,151 updates: []const ZIRUpdate,
152 ) void {152 ) void {
153 const case = ZIRCase{153 const case = ZIRCase{
154 .name = name,154 .name = name,
155 .target = target,155 .target = target,
156 .stages = stages,156 .updates = updates,
157 };157 };
158 ctx.zir_cases.append(case) catch |err| std.debug.panic("Error: {}", .{err});158 ctx.zir_cases.append(case) catch |err| std.debug.panic("Error: {}", .{err});
159 }159 }
...@@ -297,7 +297,7 @@ pub const TestContext = struct {...@@ -297,7 +297,7 @@ pub const TestContext = struct {
297 const root_pkg = try Package.create(allocator, tmp.dir, ".", tmp_src_path);297 const root_pkg = try Package.create(allocator, tmp.dir, ".", tmp_src_path);
298 defer root_pkg.destroy();298 defer root_pkg.destroy();
299299
300 var prg_node = root_node.start(case.name, case.stages.len);300 var prg_node = root_node.start(case.name, case.updates.len);
301 prg_node.activate();301 prg_node.activate();
302 defer prg_node.end();302 defer prg_node.end();
303303
...@@ -318,33 +318,33 @@ pub const TestContext = struct {...@@ -318,33 +318,33 @@ pub const TestContext = struct {
318 });318 });
319 defer module.deinit();319 defer module.deinit();
320320
321 for (case.stages) |s| {321 for (case.updates) |s| {
322 // TODO: remove before committing. This is for ZLS ;)322 // TODO: remove before committing. This is for ZLS ;)
323 const stage: ZIRUpdate = s;323 const update: ZIRUpdate = s;
324324
325 var stage_node = prg_node.start("update", 4);325 var update_node = prg_node.start("update", 4);
326 stage_node.activate();326 update_node.activate();
327 defer stage_node.end();327 defer update_node.end();
328328
329 var sync_node = stage_node.start("write", null);329 var sync_node = update_node.start("write", null);
330 sync_node.activate();330 sync_node.activate();
331 try tmp.dir.writeFile(tmp_src_path, stage.src);331 try tmp.dir.writeFile(tmp_src_path, update.src);
332 sync_node.end();332 sync_node.end();
333333
334 var module_node = stage_node.start("parse/analysis/codegen", null);334 var module_node = update_node.start("parse/analysis/codegen", null);
335 module_node.activate();335 module_node.activate();
336 try module.update();336 try module.update();
337 module_node.end();337 module_node.end();
338338
339 switch (stage.case) {339 switch (update.case) {
340 .Transformation => |expected_output| {340 .Transformation => |expected_output| {
341 var emit_node = stage_node.start("emit", null);341 var emit_node = update_node.start("emit", null);
342 emit_node.activate();342 emit_node.activate();
343 var new_zir_module = try zir.emit(allocator, module);343 var new_zir_module = try zir.emit(allocator, module);
344 defer new_zir_module.deinit(allocator);344 defer new_zir_module.deinit(allocator);
345 emit_node.end();345 emit_node.end();
346346
347 var write_node = stage_node.start("write", null);347 var write_node = update_node.start("write", null);
348 write_node.activate();348 write_node.activate();
349 var out_zir = std.ArrayList(u8).init(allocator);349 var out_zir = std.ArrayList(u8).init(allocator);
350 defer out_zir.deinit();350 defer out_zir.deinit();