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() }