package main
import "fmt"
func f1() {
var j int
var s = map[int]int{123:10, 258:20}
var s2 = map[int]int{1:100, 2:200}
for _, v := range s {
j += v
for _, v2 := range s2{
j += v2
for _, v := range s {
j += v
}
}
}
assert(j == 750)
}
func f2() {
j := 0
for i := 0; i < 1000; i++ {
j += 1
}
assert(j == 1000)
}
func f3() {
i := 0
i += 'a'
i += 'b'
i += 'c'
i += 'd'
var j, k, j2, k2 int
for _, c := range "abcd" {
j += int(c)
}
for i := range "abcd" {
k += i
}
for i, c := range "abcd" {
j2 += int(c)
k2 += i
}
assert(i == j)
assert(6 == k)
assert(j2 == j)
assert(k2 == k)
}
func range_set() {
s := []int{1, 2}
for i, _ := range s {
s[i] = 5
}
assert(s[0] == 5)
var s1 = map[int]int{1:2, 3: 888}
for i, _ := range s1 {
s1[i] = 100
}
assert(s1[0] == 0)
assert(s1[1] == 100)
}
func break_cont() {
j := 0
for i := 0; i < 1000; i++ {
if i >= 10 {
break
}
j += 1
}
assert(j == 10)
j = 0
for i := 0; i < 10; i++ {
j += 1
if i >= 6 {
continue
}
j -= 1
}
assert(j == 4)
}
func break_cont_2() {
j := 0
s := []int{3,3,3,3,3}
for i, r := range s {
if i >= 4 {
break
}
j += r
}
assert(j == 3 * 4)
j = 0
k := 0
for i, r := range s {
k = i
if i >= 2 {
continue
}
j += r
}
assert(j == 3 * 2)
assert(k == 4)
}
func break_cont_3() {
j := 0
for i := 0; i < 100; {
i += 1
if i >= 10 {
continue
}
j += 1
}
assert(j == 10 - 1)
j = 0
a, b := 60, 80
for i := 0; i < 100000; i++ {
j += 1
if i >= a {
if i >= b {
break
}
continue
}
j -= 1
}
assert(j == b - a + 1)
}
func break_label() {
total := 0
OuterLoop:
for i := 0; i < 10; i++ {
for j := 0; j < 10; j++ {
total += 1
if j == 5 {
break OuterLoop
}
}
}
fmt.Println(total)
assert(total == 6)
total = 0
OuterLoop2:
for i := 0; i < 10; i++ {
for j := 0; j < 10; j++ {
total += 1
if j == 5 {
continue OuterLoop2
}
}
}
fmt.Println(total)
assert(total == 60)
total = 0
for i := 0; i < 10; i++ {
for j := 0; j < 10; j++ {
total += 1
if j == 5 {
break
}
}
}
fmt.Println(total)
assert(total == 60)
total = 0
for i := 0; i < 10; i++ {
for j := 0; j < 10; j++ {
total += 1
if j == 5 {
continue
}
}
}
fmt.Println(total)
assert(total == 100)
}
func break_select() {
quit := make(chan int, 1)
total := 0
quit <- 888
FOR1:
for i := 0; i < 10; i++ {
total += 3
select {
case v, ok := <-quit:
assert(v == 888)
assert(ok)
fmt.Println("quit recv:", v, ok)
break
default:
fmt.Println("default")
break FOR1
}
}
assert(total == 2 * 3)
}
func main() {
f1()
f2()
f3()
range_set()
break_cont()
break_cont_2()
break_label()
break_select()
}