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; }