| ... | @@ -282,4 +282,66 @@ pub fn addCases(ctx: *TestContext) !void { | ... | @@ -282,4 +282,66 @@ pub fn addCases(ctx: *TestContext) !void { |
| 282 | "123456", | 282 | "123456", |
| 283 | ); | 283 | ); |
| 284 | } | 284 | } |
| | 285 | |
| | 286 | { |
| | 287 | var case = ctx.exe("if statements", linux_arm); |
| | 288 | // Simple if statement in assert |
| | 289 | case.addCompareOutput( |
| | 290 | \\export fn _start() noreturn { |
| | 291 | \\ var x: u32 = 123; |
| | 292 | \\ var y: u32 = 42; |
| | 293 | \\ assert(x > y); |
| | 294 | \\ exit(); |
| | 295 | \\} |
| | 296 | \\ |
| | 297 | \\fn assert(ok: bool) void { |
| | 298 | \\ if (!ok) unreachable; |
| | 299 | \\} |
| | 300 | \\ |
| | 301 | \\fn exit() noreturn { |
| | 302 | \\ asm volatile ("svc #0" |
| | 303 | \\ : |
| | 304 | \\ : [number] "{r7}" (1), |
| | 305 | \\ [arg1] "{r0}" (0) |
| | 306 | \\ : "memory" |
| | 307 | \\ ); |
| | 308 | \\ unreachable; |
| | 309 | \\} |
| | 310 | , |
| | 311 | "", |
| | 312 | ); |
| | 313 | } |
| | 314 | |
| | 315 | { |
| | 316 | var case = ctx.exe("while loops", linux_arm); |
| | 317 | // Simple while loop with assert |
| | 318 | case.addCompareOutput( |
| | 319 | \\export fn _start() noreturn { |
| | 320 | \\ var x: u32 = 2020; |
| | 321 | \\ var i: u32 = 0; |
| | 322 | \\ while (x > 0) { |
| | 323 | \\ x -= 2; |
| | 324 | \\ i += 1; |
| | 325 | \\ } |
| | 326 | \\ assert(i == 1010); |
| | 327 | \\ exit(); |
| | 328 | \\} |
| | 329 | \\ |
| | 330 | \\fn assert(ok: bool) void { |
| | 331 | \\ if (!ok) unreachable; |
| | 332 | \\} |
| | 333 | \\ |
| | 334 | \\fn exit() noreturn { |
| | 335 | \\ asm volatile ("svc #0" |
| | 336 | \\ : |
| | 337 | \\ : [number] "{r7}" (1), |
| | 338 | \\ [arg1] "{r0}" (0) |
| | 339 | \\ : "memory" |
| | 340 | \\ ); |
| | 341 | \\ unreachable; |
| | 342 | \\} |
| | 343 | , |
| | 344 | "", |
| | 345 | ); |
| | 346 | } |
| 285 | } | 347 | } |