| Server IP : 157.230.181.24 / Your IP : 216.73.217.11 Web Server : Apache/2.4.58 (Ubuntu) System : Linux conductive 6.8.0-117-generic #117-Ubuntu SMP PREEMPT_DYNAMIC Tue May 5 19:26:24 UTC 2026 x86_64 User : ( 1000) PHP Version : 8.3.31 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /usr/lib/go-1.22/test/ |
Upload File : |
// run
// Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Ensure that range loops over maps with delete statements
// have the requisite side-effects.
package main
import (
"fmt"
"os"
)
func checkcleared() {
m := make(map[byte]int)
m[1] = 1
m[2] = 2
for k := range m {
delete(m, k)
}
l := len(m)
if want := 0; l != want {
fmt.Printf("len after map clear = %d want %d\n", l, want)
os.Exit(1)
}
m[0] = 0 // To have non empty map and avoid internal map code fast paths.
n := 0
for range m {
n++
}
if want := 1; n != want {
fmt.Printf("number of keys found = %d want %d\n", n, want)
os.Exit(1)
}
}
func checkloopvars() {
k := 0
m := make(map[int]int)
m[42] = 0
for k = range m {
delete(m, k)
}
if want := 42; k != want {
fmt.Printf("var after range with side-effect = %d want %d\n", k, want)
os.Exit(1)
}
}
func checksideeffects() {
var x int
f := func() int {
x++
return 0
}
m := make(map[int]int)
m[0] = 0
m[1] = 1
for k := range m {
delete(m, k+f())
}
if want := 2; x != want {
fmt.Printf("var after range with side-effect = %d want %d\n", x, want)
os.Exit(1)
}
var n int
m = make(map[int]int)
m[0] = 0
m[1] = 1
for k := range m {
delete(m, k)
n++
}
if want := 2; n != want {
fmt.Printf("counter for range with side-effect = %d want %d\n", n, want)
os.Exit(1)
}
}
func main() {
checkcleared()
checkloopvars()
checksideeffects()
}