| ... | ... | @@ -397,3 +397,65 @@ test "raw pointer and counter" { |
| 397 | 397 | try expect(buf[2] == 'C'); |
| 398 | 398 | try expect(buf[3] == 'D'); |
| 399 | 399 | } |
| 400 | |
| 401 | test "inline for with slice as the comptime-known" { |
| 402 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 403 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 404 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 405 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 406 | |
| 407 | const comptime_slice = "hello"; |
| 408 | var runtime_i: usize = 3; |
| 409 | |
| 410 | const S = struct { |
| 411 | var ok: usize = 0; |
| 412 | fn check(comptime a: u8, b: usize) !void { |
| 413 | if (a == 'l') { |
| 414 | try expect(b == 3); |
| 415 | ok += 1; |
| 416 | } else if (a == 'o') { |
| 417 | try expect(b == 4); |
| 418 | ok += 1; |
| 419 | } else { |
| 420 | @compileError("fail"); |
| 421 | } |
| 422 | } |
| 423 | }; |
| 424 | |
| 425 | inline for (comptime_slice[3..5], runtime_i..5) |a, b| { |
| 426 | try S.check(a, b); |
| 427 | } |
| 428 | |
| 429 | try expect(S.ok == 2); |
| 430 | } |
| 431 | |
| 432 | test "inline for with counter as the comptime-known" { |
| 433 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 434 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 435 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 436 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 437 | |
| 438 | var runtime_slice = "hello"; |
| 439 | var runtime_i: usize = 3; |
| 440 | |
| 441 | const S = struct { |
| 442 | var ok: usize = 0; |
| 443 | fn check(a: u8, comptime b: usize) !void { |
| 444 | if (b == 3) { |
| 445 | try expect(a == 'l'); |
| 446 | ok += 1; |
| 447 | } else if (b == 4) { |
| 448 | try expect(a == 'o'); |
| 449 | ok += 1; |
| 450 | } else { |
| 451 | @compileError("fail"); |
| 452 | } |
| 453 | } |
| 454 | }; |
| 455 | |
| 456 | inline for (runtime_slice[runtime_i..5], 3..5) |a, b| { |
| 457 | try S.check(a, b); |
| 458 | } |
| 459 | |
| 460 | try expect(S.ok == 2); |
| 461 | } |