| ... | @@ -397,3 +397,65 @@ test "raw pointer and counter" { | ... | @@ -397,3 +397,65 @@ test "raw pointer and counter" { |
| 397 | try expect(buf[2] == 'C'); | 397 | try expect(buf[2] == 'C'); |
| 398 | try expect(buf[3] == 'D'); | 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 | } |