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