Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 1 | // $G $F.go && $L $F.$A && ./$A.out |
| 2 | |
| 3 | // Copyright 2009 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 | |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 7 | package main |
| 8 | |
Rob Pike | 62b06fa | 2008-12-20 16:07:43 -0800 | [diff] [blame] | 9 | import ( |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 10 | "fmt" |
Russ Cox | 408f0b1 | 2012-01-26 16:25:07 -0500 | [diff] [blame] | 11 | "math" |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 12 | "strconv" |
Russ Cox | 6ebf8a6 | 2012-01-30 13:41:38 -0500 | [diff] [blame] | 13 | "time" |
Rob Pike | 62b06fa | 2008-12-20 16:07:43 -0800 | [diff] [blame] | 14 | ) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 15 | |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 16 | const count = 100 |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 17 | |
Russ Cox | 839a684 | 2009-01-20 14:40:40 -0800 | [diff] [blame] | 18 | func P(a []string) string { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 19 | s := "{" |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 20 | for i := 0; i < len(a); i++ { |
| 21 | if i > 0 { |
| 22 | s += "," |
| 23 | } |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 24 | s += `"` + a[i] + `"` |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 25 | } |
Russ Cox | f2b5a07 | 2011-01-19 23:09:00 -0500 | [diff] [blame] | 26 | s += "}" |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 27 | return s |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 28 | } |
| 29 | |
| 30 | func main() { |
Russ Cox | 6ebf8a6 | 2012-01-30 13:41:38 -0500 | [diff] [blame] | 31 | testbasic() |
| 32 | testfloat() |
| 33 | testnan() |
| 34 | } |
| 35 | |
| 36 | func testbasic() { |
Rob Pike | 62b06fa | 2008-12-20 16:07:43 -0800 | [diff] [blame] | 37 | // Test a map literal. |
Russ Cox | f2b5a07 | 2011-01-19 23:09:00 -0500 | [diff] [blame] | 38 | mlit := map[string]int{"0": 0, "1": 1, "2": 2, "3": 3, "4": 4} |
Rob Pike | 62b06fa | 2008-12-20 16:07:43 -0800 | [diff] [blame] | 39 | for i := 0; i < len(mlit); i++ { |
Russ Cox | f2b5a07 | 2011-01-19 23:09:00 -0500 | [diff] [blame] | 40 | s := string([]byte{byte(i) + '0'}) |
Rob Pike | 62b06fa | 2008-12-20 16:07:43 -0800 | [diff] [blame] | 41 | if mlit[s] != i { |
Rob Pike | 61f3302 | 2009-01-15 13:48:11 -0800 | [diff] [blame] | 42 | fmt.Printf("mlit[%s] = %d\n", s, mlit[s]) |
Rob Pike | 62b06fa | 2008-12-20 16:07:43 -0800 | [diff] [blame] | 43 | } |
| 44 | } |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 45 | |
Russ Cox | f2b5a07 | 2011-01-19 23:09:00 -0500 | [diff] [blame] | 46 | mib := make(map[int]bool) |
| 47 | mii := make(map[int]int) |
| 48 | mfi := make(map[float32]int) |
| 49 | mif := make(map[int]float32) |
| 50 | msi := make(map[string]int) |
| 51 | mis := make(map[int]string) |
| 52 | mss := make(map[string]string) |
| 53 | mspa := make(map[string][]string) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 54 | // BUG need an interface map both ways too |
| 55 | |
| 56 | type T struct { |
Russ Cox | f2b5a07 | 2011-01-19 23:09:00 -0500 | [diff] [blame] | 57 | i int64 // can't use string here; struct values are only compared at the top level |
| 58 | f float32 |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 59 | } |
Russ Cox | f2b5a07 | 2011-01-19 23:09:00 -0500 | [diff] [blame] | 60 | mipT := make(map[int]*T) |
| 61 | mpTi := make(map[*T]int) |
| 62 | mit := make(map[int]T) |
| 63 | // mti := make(map[T] int) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 64 | |
Russ Cox | f2b5a07 | 2011-01-19 23:09:00 -0500 | [diff] [blame] | 65 | type M map[int]int |
| 66 | mipM := make(map[int]M) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 67 | |
Russ Cox | f2b5a07 | 2011-01-19 23:09:00 -0500 | [diff] [blame] | 68 | var apT [2 * count]*T |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 69 | |
| 70 | for i := 0; i < count; i++ { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 71 | s := strconv.Itoa(i) |
Russ Cox | f2b5a07 | 2011-01-19 23:09:00 -0500 | [diff] [blame] | 72 | s10 := strconv.Itoa(i * 10) |
| 73 | f := float32(i) |
| 74 | t := T{int64(i), f} |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 75 | apT[i] = new(T) |
| 76 | apT[i].i = int64(i) |
| 77 | apT[i].f = f |
Russ Cox | f2b5a07 | 2011-01-19 23:09:00 -0500 | [diff] [blame] | 78 | apT[2*i] = new(T) // need twice as many entries as we use, for the nonexistence check |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 79 | apT[2*i].i = int64(i) |
| 80 | apT[2*i].f = f |
Russ Cox | f2b5a07 | 2011-01-19 23:09:00 -0500 | [diff] [blame] | 81 | m := M{i: i + 1} |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 82 | mib[i] = (i != 0) |
Russ Cox | f2b5a07 | 2011-01-19 23:09:00 -0500 | [diff] [blame] | 83 | mii[i] = 10 * i |
| 84 | mfi[float32(i)] = 10 * i |
| 85 | mif[i] = 10.0 * f |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 86 | mis[i] = s |
| 87 | msi[s] = i |
| 88 | mss[s] = s10 |
| 89 | mss[s] = s10 |
| 90 | as := make([]string, 2) |
Russ Cox | f2b5a07 | 2011-01-19 23:09:00 -0500 | [diff] [blame] | 91 | as[0] = s10 |
| 92 | as[1] = s10 |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 93 | mspa[s] = as |
| 94 | mipT[i] = apT[i] |
| 95 | mpTi[apT[i]] = i |
| 96 | mipM[i] = m |
| 97 | mit[i] = t |
Russ Cox | f2b5a07 | 2011-01-19 23:09:00 -0500 | [diff] [blame] | 98 | // mti[t] = i |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 99 | } |
| 100 | |
| 101 | // test len |
| 102 | if len(mib) != count { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 103 | fmt.Printf("len(mib) = %d\n", len(mib)) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 104 | } |
| 105 | if len(mii) != count { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 106 | fmt.Printf("len(mii) = %d\n", len(mii)) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 107 | } |
| 108 | if len(mfi) != count { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 109 | fmt.Printf("len(mfi) = %d\n", len(mfi)) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 110 | } |
| 111 | if len(mif) != count { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 112 | fmt.Printf("len(mif) = %d\n", len(mif)) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 113 | } |
| 114 | if len(msi) != count { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 115 | fmt.Printf("len(msi) = %d\n", len(msi)) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 116 | } |
| 117 | if len(mis) != count { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 118 | fmt.Printf("len(mis) = %d\n", len(mis)) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 119 | } |
| 120 | if len(mss) != count { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 121 | fmt.Printf("len(mss) = %d\n", len(mss)) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 122 | } |
| 123 | if len(mspa) != count { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 124 | fmt.Printf("len(mspa) = %d\n", len(mspa)) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 125 | } |
| 126 | if len(mipT) != count { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 127 | fmt.Printf("len(mipT) = %d\n", len(mipT)) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 128 | } |
| 129 | if len(mpTi) != count { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 130 | fmt.Printf("len(mpTi) = %d\n", len(mpTi)) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 131 | } |
Russ Cox | f2b5a07 | 2011-01-19 23:09:00 -0500 | [diff] [blame] | 132 | // if len(mti) != count { |
| 133 | // fmt.Printf("len(mti) = %d\n", len(mti)) |
| 134 | // } |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 135 | if len(mipM) != count { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 136 | fmt.Printf("len(mipM) = %d\n", len(mipM)) |
Rob Pike | 62b06fa | 2008-12-20 16:07:43 -0800 | [diff] [blame] | 137 | } |
Russ Cox | f2b5a07 | 2011-01-19 23:09:00 -0500 | [diff] [blame] | 138 | // if len(mti) != count { |
| 139 | // fmt.Printf("len(mti) = %d\n", len(mti)) |
| 140 | // } |
Rob Pike | 62b06fa | 2008-12-20 16:07:43 -0800 | [diff] [blame] | 141 | if len(mit) != count { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 142 | fmt.Printf("len(mit) = %d\n", len(mit)) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 143 | } |
Russ Cox | 08ca30b | 2008-12-19 03:05:37 -0800 | [diff] [blame] | 144 | |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 145 | // test construction directly |
| 146 | for i := 0; i < count; i++ { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 147 | s := strconv.Itoa(i) |
Russ Cox | f2b5a07 | 2011-01-19 23:09:00 -0500 | [diff] [blame] | 148 | s10 := strconv.Itoa(i * 10) |
| 149 | f := float32(i) |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 150 | // BUG m := M(i, i+1) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 151 | if mib[i] != (i != 0) { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 152 | fmt.Printf("mib[%d] = %t\n", i, mib[i]) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 153 | } |
Russ Cox | f2b5a07 | 2011-01-19 23:09:00 -0500 | [diff] [blame] | 154 | if mii[i] != 10*i { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 155 | fmt.Printf("mii[%d] = %d\n", i, mii[i]) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 156 | } |
Russ Cox | f2b5a07 | 2011-01-19 23:09:00 -0500 | [diff] [blame] | 157 | if mfi[f] != 10*i { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 158 | fmt.Printf("mfi[%d] = %d\n", i, mfi[f]) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 159 | } |
Russ Cox | f2b5a07 | 2011-01-19 23:09:00 -0500 | [diff] [blame] | 160 | if mif[i] != 10.0*f { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 161 | fmt.Printf("mif[%d] = %g\n", i, mif[i]) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 162 | } |
Russ Cox | f2b5a07 | 2011-01-19 23:09:00 -0500 | [diff] [blame] | 163 | if mis[i] != s { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 164 | fmt.Printf("mis[%d] = %s\n", i, mis[i]) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 165 | } |
Russ Cox | f2b5a07 | 2011-01-19 23:09:00 -0500 | [diff] [blame] | 166 | if msi[s] != i { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 167 | fmt.Printf("msi[%s] = %d\n", s, msi[s]) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 168 | } |
Rob Pike | 62b06fa | 2008-12-20 16:07:43 -0800 | [diff] [blame] | 169 | if mss[s] != s10 { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 170 | fmt.Printf("mss[%s] = %g\n", s, mss[s]) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 171 | } |
Russ Cox | ebd27d6 | 2009-10-09 11:18:32 -0700 | [diff] [blame] | 172 | for j := 0; j < len(mspa[s]); j++ { |
Rob Pike | 62b06fa | 2008-12-20 16:07:43 -0800 | [diff] [blame] | 173 | if mspa[s][j] != s10 { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 174 | fmt.Printf("mspa[%s][%d] = %s\n", s, j, mspa[s][j]) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 175 | } |
| 176 | } |
Russ Cox | f2b5a07 | 2011-01-19 23:09:00 -0500 | [diff] [blame] | 177 | if mipT[i].i != int64(i) || mipT[i].f != f { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 178 | fmt.Printf("mipT[%d] = %v\n", i, mipT[i]) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 179 | } |
Russ Cox | f2b5a07 | 2011-01-19 23:09:00 -0500 | [diff] [blame] | 180 | if mpTi[apT[i]] != i { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 181 | fmt.Printf("mpTi[apT[%d]] = %d\n", i, mpTi[apT[i]]) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 182 | } |
Russ Cox | f2b5a07 | 2011-01-19 23:09:00 -0500 | [diff] [blame] | 183 | // if(mti[t] != i) { |
| 184 | // fmt.Printf("mti[%s] = %s\n", s, mti[t]) |
| 185 | // } |
| 186 | if mipM[i][i] != i+1 { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 187 | fmt.Printf("mipM[%d][%d] = %d\n", i, i, mipM[i][i]) |
Rob Pike | 62b06fa | 2008-12-20 16:07:43 -0800 | [diff] [blame] | 188 | } |
Russ Cox | f2b5a07 | 2011-01-19 23:09:00 -0500 | [diff] [blame] | 189 | // if(mti[t] != i) { |
| 190 | // fmt.Printf("mti[%v] = %d\n", t, mti[t]) |
| 191 | // } |
| 192 | if mit[i].i != int64(i) || mit[i].f != f { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 193 | fmt.Printf("mit[%d] = {%d %g}\n", i, mit[i].i, mit[i].f) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 194 | } |
| 195 | } |
| 196 | |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 197 | // test existence with tuple check |
| 198 | // failed lookups yield a false value for the boolean. |
| 199 | for i := 0; i < count; i++ { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 200 | s := strconv.Itoa(i) |
Russ Cox | f2b5a07 | 2011-01-19 23:09:00 -0500 | [diff] [blame] | 201 | f := float32(i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 202 | { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 203 | _, b := mib[i] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 204 | if !b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 205 | fmt.Printf("tuple existence decl: mib[%d]\n", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 206 | } |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 207 | _, b = mib[i] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 208 | if !b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 209 | fmt.Printf("tuple existence assign: mib[%d]\n", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 210 | } |
| 211 | } |
| 212 | { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 213 | _, b := mii[i] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 214 | if !b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 215 | fmt.Printf("tuple existence decl: mii[%d]\n", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 216 | } |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 217 | _, b = mii[i] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 218 | if !b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 219 | fmt.Printf("tuple existence assign: mii[%d]\n", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 220 | } |
| 221 | } |
| 222 | { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 223 | _, b := mfi[f] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 224 | if !b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 225 | fmt.Printf("tuple existence decl: mfi[%d]\n", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 226 | } |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 227 | _, b = mfi[f] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 228 | if !b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 229 | fmt.Printf("tuple existence assign: mfi[%d]\n", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 230 | } |
| 231 | } |
| 232 | { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 233 | _, b := mif[i] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 234 | if !b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 235 | fmt.Printf("tuple existence decl: mif[%d]\n", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 236 | } |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 237 | _, b = mif[i] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 238 | if !b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 239 | fmt.Printf("tuple existence assign: mif[%d]\n", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 240 | } |
| 241 | } |
| 242 | { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 243 | _, b := mis[i] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 244 | if !b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 245 | fmt.Printf("tuple existence decl: mis[%d]\n", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 246 | } |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 247 | _, b = mis[i] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 248 | if !b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 249 | fmt.Printf("tuple existence assign: mis[%d]\n", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 250 | } |
| 251 | } |
| 252 | { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 253 | _, b := msi[s] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 254 | if !b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 255 | fmt.Printf("tuple existence decl: msi[%d]\n", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 256 | } |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 257 | _, b = msi[s] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 258 | if !b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 259 | fmt.Printf("tuple existence assign: msi[%d]\n", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 260 | } |
| 261 | } |
| 262 | { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 263 | _, b := mss[s] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 264 | if !b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 265 | fmt.Printf("tuple existence decl: mss[%d]\n", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 266 | } |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 267 | _, b = mss[s] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 268 | if !b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 269 | fmt.Printf("tuple existence assign: mss[%d]\n", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 270 | } |
| 271 | } |
| 272 | { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 273 | _, b := mspa[s] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 274 | if !b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 275 | fmt.Printf("tuple existence decl: mspa[%d]\n", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 276 | } |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 277 | _, b = mspa[s] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 278 | if !b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 279 | fmt.Printf("tuple existence assign: mspa[%d]\n", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 280 | } |
| 281 | } |
| 282 | { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 283 | _, b := mipT[i] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 284 | if !b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 285 | fmt.Printf("tuple existence decl: mipT[%d]\n", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 286 | } |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 287 | _, b = mipT[i] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 288 | if !b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 289 | fmt.Printf("tuple existence assign: mipT[%d]\n", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 290 | } |
| 291 | } |
| 292 | { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 293 | _, b := mpTi[apT[i]] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 294 | if !b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 295 | fmt.Printf("tuple existence decl: mpTi[apT[%d]]\n", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 296 | } |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 297 | _, b = mpTi[apT[i]] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 298 | if !b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 299 | fmt.Printf("tuple existence assign: mpTi[apT[%d]]\n", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 300 | } |
| 301 | } |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 302 | { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 303 | _, b := mipM[i] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 304 | if !b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 305 | fmt.Printf("tuple existence decl: mipM[%d]\n", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 306 | } |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 307 | _, b = mipM[i] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 308 | if !b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 309 | fmt.Printf("tuple existence assign: mipM[%d]\n", i) |
Rob Pike | 62b06fa | 2008-12-20 16:07:43 -0800 | [diff] [blame] | 310 | } |
| 311 | } |
| 312 | { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 313 | _, b := mit[i] |
Rob Pike | 62b06fa | 2008-12-20 16:07:43 -0800 | [diff] [blame] | 314 | if !b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 315 | fmt.Printf("tuple existence decl: mit[%d]\n", i) |
Rob Pike | 62b06fa | 2008-12-20 16:07:43 -0800 | [diff] [blame] | 316 | } |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 317 | _, b = mit[i] |
Rob Pike | 62b06fa | 2008-12-20 16:07:43 -0800 | [diff] [blame] | 318 | if !b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 319 | fmt.Printf("tuple existence assign: mit[%d]\n", i) |
Rob Pike | 62b06fa | 2008-12-20 16:07:43 -0800 | [diff] [blame] | 320 | } |
| 321 | } |
Russ Cox | f2b5a07 | 2011-01-19 23:09:00 -0500 | [diff] [blame] | 322 | // { |
| 323 | // _, b := mti[t] |
| 324 | // if !b { |
| 325 | // fmt.Printf("tuple existence decl: mti[%d]\n", i) |
| 326 | // } |
| 327 | // _, b = mti[t] |
| 328 | // if !b { |
| 329 | // fmt.Printf("tuple existence assign: mti[%d]\n", i) |
| 330 | // } |
| 331 | // } |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 332 | } |
| 333 | |
| 334 | // test nonexistence with tuple check |
| 335 | // failed lookups yield a false value for the boolean. |
| 336 | for i := count; i < 2*count; i++ { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 337 | s := strconv.Itoa(i) |
Russ Cox | f2b5a07 | 2011-01-19 23:09:00 -0500 | [diff] [blame] | 338 | f := float32(i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 339 | { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 340 | _, b := mib[i] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 341 | if b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 342 | fmt.Printf("tuple nonexistence decl: mib[%d]", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 343 | } |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 344 | _, b = mib[i] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 345 | if b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 346 | fmt.Printf("tuple nonexistence assign: mib[%d]", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 347 | } |
| 348 | } |
| 349 | { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 350 | _, b := mii[i] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 351 | if b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 352 | fmt.Printf("tuple nonexistence decl: mii[%d]", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 353 | } |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 354 | _, b = mii[i] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 355 | if b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 356 | fmt.Printf("tuple nonexistence assign: mii[%d]", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 357 | } |
| 358 | } |
| 359 | { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 360 | _, b := mfi[f] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 361 | if b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 362 | fmt.Printf("tuple nonexistence decl: mfi[%d]", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 363 | } |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 364 | _, b = mfi[f] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 365 | if b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 366 | fmt.Printf("tuple nonexistence assign: mfi[%d]", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 367 | } |
| 368 | } |
| 369 | { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 370 | _, b := mif[i] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 371 | if b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 372 | fmt.Printf("tuple nonexistence decl: mif[%d]", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 373 | } |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 374 | _, b = mif[i] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 375 | if b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 376 | fmt.Printf("tuple nonexistence assign: mif[%d]", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 377 | } |
| 378 | } |
| 379 | { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 380 | _, b := mis[i] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 381 | if b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 382 | fmt.Printf("tuple nonexistence decl: mis[%d]", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 383 | } |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 384 | _, b = mis[i] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 385 | if b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 386 | fmt.Printf("tuple nonexistence assign: mis[%d]", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 387 | } |
| 388 | } |
| 389 | { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 390 | _, b := msi[s] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 391 | if b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 392 | fmt.Printf("tuple nonexistence decl: msi[%d]", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 393 | } |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 394 | _, b = msi[s] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 395 | if b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 396 | fmt.Printf("tuple nonexistence assign: msi[%d]", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 397 | } |
| 398 | } |
| 399 | { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 400 | _, b := mss[s] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 401 | if b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 402 | fmt.Printf("tuple nonexistence decl: mss[%d]", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 403 | } |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 404 | _, b = mss[s] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 405 | if b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 406 | fmt.Printf("tuple nonexistence assign: mss[%d]", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 407 | } |
| 408 | } |
| 409 | { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 410 | _, b := mspa[s] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 411 | if b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 412 | fmt.Printf("tuple nonexistence decl: mspa[%d]", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 413 | } |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 414 | _, b = mspa[s] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 415 | if b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 416 | fmt.Printf("tuple nonexistence assign: mspa[%d]", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 417 | } |
| 418 | } |
| 419 | { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 420 | _, b := mipT[i] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 421 | if b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 422 | fmt.Printf("tuple nonexistence decl: mipT[%d]", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 423 | } |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 424 | _, b = mipT[i] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 425 | if b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 426 | fmt.Printf("tuple nonexistence assign: mipT[%d]", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 427 | } |
| 428 | } |
| 429 | { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 430 | _, b := mpTi[apT[i]] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 431 | if b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 432 | fmt.Printf("tuple nonexistence decl: mpTi[apt[%d]]", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 433 | } |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 434 | _, b = mpTi[apT[i]] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 435 | if b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 436 | fmt.Printf("tuple nonexistence assign: mpTi[apT[%d]]", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 437 | } |
| 438 | } |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 439 | { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 440 | _, b := mipM[i] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 441 | if b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 442 | fmt.Printf("tuple nonexistence decl: mipM[%d]", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 443 | } |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 444 | _, b = mipM[i] |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 445 | if b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 446 | fmt.Printf("tuple nonexistence assign: mipM[%d]", i) |
Rob Pike | 62b06fa | 2008-12-20 16:07:43 -0800 | [diff] [blame] | 447 | } |
| 448 | } |
Russ Cox | f2b5a07 | 2011-01-19 23:09:00 -0500 | [diff] [blame] | 449 | // { |
| 450 | // _, b := mti[t] |
| 451 | // if b { |
| 452 | // fmt.Printf("tuple nonexistence decl: mti[%d]", i) |
| 453 | // } |
| 454 | // _, b = mti[t] |
| 455 | // if b { |
| 456 | // fmt.Printf("tuple nonexistence assign: mti[%d]", i) |
| 457 | // } |
| 458 | // } |
Rob Pike | 62b06fa | 2008-12-20 16:07:43 -0800 | [diff] [blame] | 459 | { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 460 | _, b := mit[i] |
Rob Pike | 62b06fa | 2008-12-20 16:07:43 -0800 | [diff] [blame] | 461 | if b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 462 | fmt.Printf("tuple nonexistence decl: mit[%d]", i) |
Rob Pike | 62b06fa | 2008-12-20 16:07:43 -0800 | [diff] [blame] | 463 | } |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 464 | _, b = mit[i] |
Rob Pike | 62b06fa | 2008-12-20 16:07:43 -0800 | [diff] [blame] | 465 | if b { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 466 | fmt.Printf("tuple nonexistence assign: mit[%d]", i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 467 | } |
| 468 | } |
| 469 | } |
Russ Cox | 08ca30b | 2008-12-19 03:05:37 -0800 | [diff] [blame] | 470 | |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 471 | // tests for structured map element updates |
| 472 | for i := 0; i < count; i++ { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 473 | s := strconv.Itoa(i) |
Russ Cox | f2b5a07 | 2011-01-19 23:09:00 -0500 | [diff] [blame] | 474 | mspa[s][i%2] = "deleted" |
| 475 | if mspa[s][i%2] != "deleted" { |
| 476 | fmt.Printf("update mspa[%s][%d] = %s\n", s, i%2, mspa[s][i%2]) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 477 | } |
Rob Pike | 62b06fa | 2008-12-20 16:07:43 -0800 | [diff] [blame] | 478 | |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 479 | mipT[i].i += 1 |
Rob Pike | 62b06fa | 2008-12-20 16:07:43 -0800 | [diff] [blame] | 480 | if mipT[i].i != int64(i)+1 { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 481 | fmt.Printf("update mipT[%d].i = %d\n", i, mipT[i].i) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 482 | } |
Russ Cox | f2b5a07 | 2011-01-19 23:09:00 -0500 | [diff] [blame] | 483 | mipT[i].f = float32(i + 1) |
| 484 | if mipT[i].f != float32(i+1) { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 485 | fmt.Printf("update mipT[%d].f = %g\n", i, mipT[i].f) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 486 | } |
Rob Pike | 62b06fa | 2008-12-20 16:07:43 -0800 | [diff] [blame] | 487 | |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 488 | mipM[i][i]++ |
Russ Cox | f2b5a07 | 2011-01-19 23:09:00 -0500 | [diff] [blame] | 489 | if mipM[i][i] != (i+1)+1 { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 490 | fmt.Printf("update mipM[%d][%d] = %i\n", i, i, mipM[i][i]) |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 491 | } |
| 492 | } |
Russ Cox | ae54cf7 | 2009-09-15 12:42:24 -0700 | [diff] [blame] | 493 | |
Russ Cox | 8614561 | 2009-03-23 18:32:37 -0700 | [diff] [blame] | 494 | // test range on nil map |
Russ Cox | f2b5a07 | 2011-01-19 23:09:00 -0500 | [diff] [blame] | 495 | var mnil map[string]int |
Russ Cox | ae54cf7 | 2009-09-15 12:42:24 -0700 | [diff] [blame] | 496 | for _, _ = range mnil { |
Rob Pike | 4f61fc9 | 2010-09-04 10:36:13 +1000 | [diff] [blame] | 497 | panic("range mnil") |
Russ Cox | 8614561 | 2009-03-23 18:32:37 -0700 | [diff] [blame] | 498 | } |
Russ Cox | 408f0b1 | 2012-01-26 16:25:07 -0500 | [diff] [blame] | 499 | } |
| 500 | |
| 501 | func testfloat() { |
| 502 | // Test floating point numbers in maps. |
| 503 | // Two map keys refer to the same entry if the keys are ==. |
| 504 | // The special cases, then, are that +0 == -0 and that NaN != NaN. |
| 505 | |
| 506 | { |
| 507 | var ( |
| 508 | pz = float32(0) |
| 509 | nz = math.Float32frombits(1 << 31) |
| 510 | nana = float32(math.NaN()) |
| 511 | nanb = math.Float32frombits(math.Float32bits(nana) ^ 2) |
| 512 | ) |
| 513 | |
| 514 | m := map[float32]string{ |
| 515 | pz: "+0", |
| 516 | nana: "NaN", |
| 517 | nanb: "NaN", |
| 518 | } |
| 519 | if m[pz] != "+0" { |
| 520 | fmt.Println("float32 map cannot read back m[+0]:", m[pz]) |
| 521 | } |
| 522 | if m[nz] != "+0" { |
| 523 | fmt.Println("float32 map does not treat", pz, "and", nz, "as equal for read") |
| 524 | fmt.Println("float32 map does not treat -0 and +0 as equal for read") |
| 525 | } |
| 526 | m[nz] = "-0" |
| 527 | if m[pz] != "-0" { |
| 528 | fmt.Println("float32 map does not treat -0 and +0 as equal for write") |
| 529 | } |
| 530 | if _, ok := m[nana]; ok { |
| 531 | fmt.Println("float32 map allows NaN lookup (a)") |
| 532 | } |
| 533 | if _, ok := m[nanb]; ok { |
| 534 | fmt.Println("float32 map allows NaN lookup (b)") |
| 535 | } |
| 536 | if len(m) != 3 { |
| 537 | fmt.Println("float32 map should have 3 entries:", m) |
| 538 | } |
| 539 | m[nana] = "NaN" |
| 540 | m[nanb] = "NaN" |
| 541 | if len(m) != 5 { |
| 542 | fmt.Println("float32 map should have 5 entries:", m) |
| 543 | } |
| 544 | } |
| 545 | |
| 546 | { |
| 547 | var ( |
| 548 | pz = float64(0) |
| 549 | nz = math.Float64frombits(1 << 63) |
| 550 | nana = float64(math.NaN()) |
| 551 | nanb = math.Float64frombits(math.Float64bits(nana) ^ 2) |
| 552 | ) |
| 553 | |
| 554 | m := map[float64]string{ |
| 555 | pz: "+0", |
| 556 | nana: "NaN", |
| 557 | nanb: "NaN", |
| 558 | } |
| 559 | if m[nz] != "+0" { |
| 560 | fmt.Println("float64 map does not treat -0 and +0 as equal for read") |
| 561 | } |
| 562 | m[nz] = "-0" |
| 563 | if m[pz] != "-0" { |
| 564 | fmt.Println("float64 map does not treat -0 and +0 as equal for write") |
| 565 | } |
| 566 | if _, ok := m[nana]; ok { |
| 567 | fmt.Println("float64 map allows NaN lookup (a)") |
| 568 | } |
| 569 | if _, ok := m[nanb]; ok { |
| 570 | fmt.Println("float64 map allows NaN lookup (b)") |
| 571 | } |
| 572 | if len(m) != 3 { |
| 573 | fmt.Println("float64 map should have 3 entries:", m) |
| 574 | } |
| 575 | m[nana] = "NaN" |
| 576 | m[nanb] = "NaN" |
| 577 | if len(m) != 5 { |
| 578 | fmt.Println("float64 map should have 5 entries:", m) |
| 579 | } |
| 580 | } |
| 581 | |
| 582 | { |
| 583 | var ( |
| 584 | pz = complex64(0) |
| 585 | nz = complex(0, math.Float32frombits(1<<31)) |
| 586 | nana = complex(5, float32(math.NaN())) |
| 587 | nanb = complex(5, math.Float32frombits(math.Float32bits(float32(math.NaN()))^2)) |
| 588 | ) |
| 589 | |
| 590 | m := map[complex64]string{ |
| 591 | pz: "+0", |
| 592 | nana: "NaN", |
| 593 | nanb: "NaN", |
| 594 | } |
| 595 | if m[nz] != "+0" { |
| 596 | fmt.Println("complex64 map does not treat -0 and +0 as equal for read") |
| 597 | } |
| 598 | m[nz] = "-0" |
| 599 | if m[pz] != "-0" { |
| 600 | fmt.Println("complex64 map does not treat -0 and +0 as equal for write") |
| 601 | } |
| 602 | if _, ok := m[nana]; ok { |
| 603 | fmt.Println("complex64 map allows NaN lookup (a)") |
| 604 | } |
| 605 | if _, ok := m[nanb]; ok { |
| 606 | fmt.Println("complex64 map allows NaN lookup (b)") |
| 607 | } |
| 608 | if len(m) != 3 { |
| 609 | fmt.Println("complex64 map should have 3 entries:", m) |
| 610 | } |
| 611 | m[nana] = "NaN" |
| 612 | m[nanb] = "NaN" |
| 613 | if len(m) != 5 { |
| 614 | fmt.Println("complex64 map should have 5 entries:", m) |
| 615 | } |
| 616 | } |
| 617 | |
| 618 | { |
| 619 | var ( |
| 620 | pz = complex128(0) |
| 621 | nz = complex(0, math.Float64frombits(1<<63)) |
| 622 | nana = complex(5, float64(math.NaN())) |
| 623 | nanb = complex(5, math.Float64frombits(math.Float64bits(float64(math.NaN()))^2)) |
| 624 | ) |
| 625 | |
| 626 | m := map[complex128]string{ |
| 627 | pz: "+0", |
| 628 | nana: "NaN", |
| 629 | nanb: "NaN", |
| 630 | } |
| 631 | if m[nz] != "+0" { |
| 632 | fmt.Println("complex128 map does not treat -0 and +0 as equal for read") |
| 633 | } |
| 634 | m[nz] = "-0" |
| 635 | if m[pz] != "-0" { |
| 636 | fmt.Println("complex128 map does not treat -0 and +0 as equal for write") |
| 637 | } |
| 638 | if _, ok := m[nana]; ok { |
| 639 | fmt.Println("complex128 map allows NaN lookup (a)") |
| 640 | } |
| 641 | if _, ok := m[nanb]; ok { |
| 642 | fmt.Println("complex128 map allows NaN lookup (b)") |
| 643 | } |
| 644 | if len(m) != 3 { |
| 645 | fmt.Println("complex128 map should have 3 entries:", m) |
| 646 | } |
| 647 | m[nana] = "NaN" |
| 648 | m[nanb] = "NaN" |
| 649 | if len(m) != 5 { |
| 650 | fmt.Println("complex128 map should have 5 entries:", m) |
| 651 | } |
| 652 | } |
Rob Pike | 2738f42 | 2008-08-11 13:32:13 -0700 | [diff] [blame] | 653 | } |
Russ Cox | 6ebf8a6 | 2012-01-30 13:41:38 -0500 | [diff] [blame] | 654 | |
| 655 | func testnan() { |
| 656 | // Test that NaNs in maps don't go quadratic. |
| 657 | t := func(n int) time.Duration { |
| 658 | t0 := time.Now() |
| 659 | m := map[float64]int{} |
| 660 | nan := math.NaN() |
| 661 | for i := 0; i < n; i++ { |
| 662 | m[nan] = 1 |
| 663 | } |
| 664 | if len(m) != n { |
| 665 | panic("wrong size map after nan insertion") |
| 666 | } |
| 667 | return time.Since(t0) |
| 668 | } |
| 669 | |
Brad Fitzpatrick | 69a5b23 | 2012-02-02 11:49:28 -0800 | [diff] [blame] | 670 | // Depending on the machine and OS, this test might be too fast |
| 671 | // to measure with accurate enough granularity. On failure, |
| 672 | // make it run longer, hoping that the timing granularity |
| 673 | // is eventually sufficient. |
| 674 | |
| 675 | n := 30000 // 0.02 seconds on a MacBook Air |
| 676 | fails := 0 |
| 677 | for { |
| 678 | t1 := t(n) |
| 679 | t2 := t(2 * n) |
| 680 | // should be 2x (linear); allow up to 3x |
| 681 | if t2 < 3*t1 { |
| 682 | return |
| 683 | } |
| 684 | fails++ |
| 685 | if fails == 4 { |
| 686 | fmt.Printf("too slow: %d inserts: %v; %d inserts: %v\n", n, t1, 2*n, t2) |
| 687 | return |
| 688 | } |
| 689 | n *= 2 |
Russ Cox | 6ebf8a6 | 2012-01-30 13:41:38 -0500 | [diff] [blame] | 690 | } |
| 691 | } |