From 6b5a35e4ff3d2a18eb21be4656eeaa6812e223f1 Mon Sep 17 00:00:00 2001 From: ntrel Date: Sun, 11 Oct 2026 19:02:13 +0200 Subject: [PATCH] Update doc/langref/test_for.zig (#37181) Use -1 element instead of 0, as 0 wouldn't affect sum. Fix 'reslice' wording as example is an array, not a slice. Increase slice length to 2 to demonstrate feature better. Split out "for ranges" test from basics with shorter array. Use usize sum to avoid cast. Improve comments. Reuse sum vars. Reviewed-on: https://codeberg.org/ziglang/zig/pulls/37181 Reviewed-by: Andrew Kelley --- doc/langref/test_for.zig | 42 +++++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/doc/langref/test_for.zig b/doc/langref/test_for.zig index d2d40db58fda67705cb38ec234e595ded20d86a5..24c6fe713232c4db3bf63088db184595e87b7d23 100644 --- a/doc/langref/test_for.zig +++ b/doc/langref/test_for.zig @@ -1,41 +1,47 @@ const expectEqual = @import("std").testing.expectEqual; test "for basics" { - const items = [_]i32{ 4, 5, 3, 4, 0 }; + const items = [_]i32{ 4, 5, 3, -1, 4 }; var sum: i32 = 0; // For loops iterate over slices and arrays. for (items) |value| { // Break and continue are supported. - if (value == 0) { + if (value < 0) { continue; } sum += value; } try expectEqual(16, sum); - // To iterate over a portion of a slice, reslice. - for (items[0..1]) |value| { + // Use slicing to iterate over a portion of a slice or array. + sum = 0; + for (items[0..2]) |value| { sum += value; } - try expectEqual(20, sum); + try expectEqual(9, sum); +} - // To access the index of iteration, specify a second condition as well - // as a second capture value. - var sum2: i32 = 0; - for (items, 0..) |_, i| { +test "for ranges" { + const items = [_]u8{1, 2, 3}; + var sum: usize = 0; + + // To access the index of iteration, specify an unbounded range as the + // second condition, as well as a second capture value. + for (items, 0..) |e, i| { try expectEqual(usize, @TypeOf(i)); - sum2 += @as(i32, @intCast(i)); + sum += i; + try expectEqual(e, i + 1); } - try expectEqual(10, sum2); + try expectEqual(3, sum); // 0 + 1 + 2 - // To iterate over consecutive integers, use the range syntax. - // Unbounded range is always a compile error. - var sum3: usize = 0; + // To iterate over consecutive integers, use bounded range syntax. + // A lone unbounded range is a compile error. + sum = 0; for (0..5) |i| { - sum3 += i; + sum += i; } - try expectEqual(10, sum3); + try expectEqual(10, sum); } test "multi object for" { @@ -44,8 +50,8 @@ test "multi object for" { var count: usize = 0; // Iterate over multiple objects. - // All lengths must be equal at the start of the loop, otherwise detectable - // illegal behavior occurs. + // All bounded objects must have equal lengths. + // There must be at least one bounded object. for (items, items2) |i, j| { count += i + j; } -- 2.54.0