| ... | @@ -120,6 +120,10 @@ pub const TestContext = struct { | ... | @@ -120,6 +120,10 @@ pub const TestContext = struct { |
| 120 | } | 120 | } |
| 121 | self.updates.append(.{ .src = src, .case = .{ .Error = array } }) catch unreachable; | 121 | self.updates.append(.{ .src = src, .case = .{ .Error = array } }) catch unreachable; |
| 122 | } | 122 | } |
| | 123 | |
| | 124 | pub fn compiles(self: *Case, src: [:0]const u8) void { |
| | 125 | self.addError(src, &[_][]const u8{}); |
| | 126 | } |
| 123 | }; | 127 | }; |
| 124 | | 128 | |
| 125 | pub fn addExe( | 129 | pub fn addExe( |
| ... | @@ -260,6 +264,34 @@ pub const TestContext = struct { | ... | @@ -260,6 +264,34 @@ pub const TestContext = struct { |
| 260 | ctx.addError(name, target, .ZIR, src, expected_errors); | 264 | ctx.addError(name, target, .ZIR, src, expected_errors); |
| 261 | } | 265 | } |
| 262 | | 266 | |
| | 267 | pub fn addCompiles( |
| | 268 | ctx: *TestContext, |
| | 269 | name: []const u8, |
| | 270 | target: std.zig.CrossTarget, |
| | 271 | T: TestType, |
| | 272 | src: [:0]const u8, |
| | 273 | ) void { |
| | 274 | ctx.addObj(name, target, T).compiles(src); |
| | 275 | } |
| | 276 | |
| | 277 | pub fn compiles( |
| | 278 | ctx: *TestContext, |
| | 279 | name: []const u8, |
| | 280 | target: std.zig.CrossTarget, |
| | 281 | src: [:0]const u8, |
| | 282 | ) void { |
| | 283 | ctx.addCompiles(name, target, .Zig, src); |
| | 284 | } |
| | 285 | |
| | 286 | pub fn compilesZIR( |
| | 287 | ctx: *TestContext, |
| | 288 | name: []const u8, |
| | 289 | target: std.zig.CrossTarget, |
| | 290 | src: [:0]const u8, |
| | 291 | ) void { |
| | 292 | ctx.addCompiles(name, target, .ZIR, src); |
| | 293 | } |
| | 294 | |
| 263 | fn init() TestContext { | 295 | fn init() TestContext { |
| 264 | const allocator = std.heap.page_allocator; | 296 | const allocator = std.heap.page_allocator; |
| 265 | return .{ .cases = std.ArrayList(Case).init(allocator) }; | 297 | return .{ .cases = std.ArrayList(Case).init(allocator) }; |