| ... | ... | @@ -282,4 +282,66 @@ pub fn addCases(ctx: *TestContext) !void { |
| 282 | 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 | } |