1// run
2
3// Copyright 2023 The Go Authors. All rights reserved.
4// Use of this source code is governed by a BSD-style
5// license that can be found in the LICENSE file.
6
7// Test the 'for range' construct ranging over integers.
8
9package main
10
11func testint1() {
12	bad := false
13	j := 0
14	for i := range int(4) {
15		if i != j {
16			println("range var", i, "want", j)
17			bad = true
18		}
19		j++
20	}
21	if j != 4 {
22		println("wrong count ranging over 4:", j)
23		bad = true
24	}
25	if bad {
26		panic("testint1")
27	}
28}
29
30func testint2() {
31	bad := false
32	j := 0
33	for i := range 4 {
34		if i != j {
35			println("range var", i, "want", j)
36			bad = true
37		}
38		j++
39	}
40	if j != 4 {
41		println("wrong count ranging over 4:", j)
42		bad = true
43	}
44	if bad {
45		panic("testint2")
46	}
47}
48
49func testint3() {
50	bad := false
51	type MyInt int
52	j := MyInt(0)
53	for i := range MyInt(4) {
54		if i != j {
55			println("range var", i, "want", j)
56			bad = true
57		}
58		j++
59	}
60	if j != 4 {
61		println("wrong count ranging over 4:", j)
62		bad = true
63	}
64	if bad {
65		panic("testint3")
66	}
67}
68
69// Issue #63378.
70func testint4() {
71	for i := range -1 {
72		_ = i
73		panic("must not be executed")
74	}
75}
76
77// Issue #64471.
78func testint5() {
79	for i := range 'a' {
80		var _ *rune = &i // ensure i has type rune
81	}
82}
83
84func main() {
85	testint1()
86	testint2()
87	testint3()
88	testint4()
89	testint5()
90}
91