package main
// Range over integers (Go 1.22).
import "fmt"
func f() {
s := "AB"
for range 5 {
s += s
}
if s != "ABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB" {
panic(s)
}
var t []int
for i := range 10 {
t = append(t, i)
}
if got, want := fmt.Sprint(t), "[0 1 2 3 4 5 6 7 8 9]"; got != want {
panic(got)
}
var u []uint
for i := range uint(3) {
u = append(u, i)
}
if got, want := fmt.Sprint(u), "[0 1 2]"; got != want {
panic(got)
}
for i := range 0 {
panic(i)
}
for i := range int(-1) {
panic(i)
}
for _, test := range []struct {
x int
b, c bool
want string
}{
{-1, false, false, "[-123 -123]"},
{0, false, false, "[-123 -123]"},
{1, false, false, "[-123 0 333 333]"},
{2, false, false, "[-123 0 333 1 333 333]"},
{2, false, true, "[-123 0 222 1 222 222]"},
{2, true, false, "[-123 0 111 111]"},
{3, false, false, "[-123 0 333 1 333 2 333 333]"},
} {
got := fmt.Sprint(valueSequence(test.x, test.b, test.c))
if got != test.want {
panic(fmt.Sprint(test, got))
}
}
}
// valueSequence returns a sequence of the values of i.
// b causes an early break and c causes a continue.
func valueSequence(x int, b, c bool) []int {
var vals []int
var i int = -123
vals = append(vals, i)
for i = range x {
vals = append(vals, i)
if b {
i = 111
vals = append(vals, i)
break
} else if c {
i = 222
vals = append(vals, i)
continue
}
i = 333
vals = append(vals, i)
}
vals = append(vals, i)
return vals
}
func main() { f() }