diff --git a/examples/0052-basic-slice-range-bounds.sx b/examples/0052-basic-slice-range-bounds.sx new file mode 100644 index 0000000..66e94cb --- /dev/null +++ b/examples/0052-basic-slice-range-bounds.sx @@ -0,0 +1,32 @@ +// Slice range bound markers — same matrix as for-header ranges: each side +// of `..` takes `=` (inclusive) or `<` (exclusive), defaults 0-inclusive +// start / exclusive end. Prefix form takes markers too ([..=2], [<..3]); +// [..] is the whole slice; bounds are arbitrary expressions; strings slice +// through the same path. + +#import "modules/std.sx"; + +dump :: (s: []s64, tag: string) { + print("{}: ", tag); + for s (v) { print("{} ", v); } + print("(len {})\n", s.len); +} + +main :: () -> s32 { + xs : [6]s64 = .[10, 11, 12, 13, 14, 15]; + full : []s64 = xs[0..6]; + + dump(full[1..=3], "1..=3"); // 11 12 13 + dump(full[0<..<4], "0<..<4"); // 11 12 13 + dump(full[..=2], "..=2"); // 10 11 12 + dump(full[<..3], "<..3"); // 11 12 + dump(full[2<..], "2<.."); // 13 14 15 + dump(full[..], ".."); // all six + x := 3; + dump(full[x-1..=x+1], "x-1..=x+1"); // 12 13 14 + + s := "abcdef"; + print("str 1..=3: {}\n", s[1..=3]); // bcd + print("str 0<..<4: {}\n", s[0<..<4]); // bcd + 0 +} diff --git a/examples/expected/0052-basic-slice-range-bounds.exit b/examples/expected/0052-basic-slice-range-bounds.exit new file mode 100644 index 0000000..573541a --- /dev/null +++ b/examples/expected/0052-basic-slice-range-bounds.exit @@ -0,0 +1 @@ +0 diff --git a/examples/expected/0052-basic-slice-range-bounds.stderr b/examples/expected/0052-basic-slice-range-bounds.stderr new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/examples/expected/0052-basic-slice-range-bounds.stderr @@ -0,0 +1 @@ + diff --git a/examples/expected/0052-basic-slice-range-bounds.stdout b/examples/expected/0052-basic-slice-range-bounds.stdout new file mode 100644 index 0000000..fdf1b10 --- /dev/null +++ b/examples/expected/0052-basic-slice-range-bounds.stdout @@ -0,0 +1,9 @@ +1..=3: 11 12 13 (len 3) +0<..<4: 11 12 13 (len 3) +..=2: 10 11 12 (len 3) +<..3: 11 12 (len 2) +2<..: 13 14 15 (len 3) +..: 10 11 12 13 14 15 (len 6) +x-1..=x+1: 12 13 14 (len 3) +str 1..=3: bcd +str 0<..<4: bcd diff --git a/readme.md b/readme.md index 2fa7919..461d4b4 100644 --- a/readme.md +++ b/readme.md @@ -347,6 +347,7 @@ for 1..=5, 0.. (a, b) { print("{}:{}\n", a, b); } // a: 1..5, b follows for items (val) => total += val; // arrow body for 0<..