blob: 4905f6e11fc51704e10f1958b5138c2482577c72 [file] [log] [blame]
Rob Pike2738f422008-08-11 13:32:13 -07001// $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 Pike2738f422008-08-11 13:32:13 -07007package main
8
Rob Pike62b06fa2008-12-20 16:07:43 -08009import (
10 "fmt";
11 "strconv";
12)
Rob Pike2738f422008-08-11 13:32:13 -070013
Russ Coxebd27d62009-10-09 11:18:32 -070014const count = 100;
Rob Pike2738f422008-08-11 13:32:13 -070015
Russ Cox839a6842009-01-20 14:40:40 -080016func P(a []string) string {
Rob Pike2738f422008-08-11 13:32:13 -070017 s := "{";
18 for i := 0; i < len(a); i++ {
19 if i > 0 {
20 s += ","
21 }
22 s += `"` + a[i] + `"`;
23 }
24 s +="}";
25 return s;
26}
27
28func main() {
Rob Pike62b06fa2008-12-20 16:07:43 -080029 // Test a map literal.
Russ Coxbe2edb52009-03-03 08:39:12 -080030 mlit := map[string] int { "0":0, "1":1, "2":2, "3":3, "4":4 };
Rob Pike62b06fa2008-12-20 16:07:43 -080031 for i := 0; i < len(mlit); i++ {
Russ Coxbe2edb52009-03-03 08:39:12 -080032 s := string([]byte{byte(i)+'0'});
Rob Pike62b06fa2008-12-20 16:07:43 -080033 if mlit[s] != i {
Rob Pike61f33022009-01-15 13:48:11 -080034 fmt.Printf("mlit[%s] = %d\n", s, mlit[s])
Rob Pike62b06fa2008-12-20 16:07:43 -080035 }
36 }
Rob Pike2738f422008-08-11 13:32:13 -070037
Russ Cox55645042009-01-06 15:19:02 -080038 mib := make(map[int] bool);
39 mii := make(map[int] int);
40 mfi := make(map[float] int);
41 mif := make(map[int] float);
42 msi := make(map[string] int);
43 mis := make(map[int] string);
44 mss := make(map[string] string);
45 mspa := make(map[string] []string);
Rob Pike2738f422008-08-11 13:32:13 -070046 // BUG need an interface map both ways too
47
48 type T struct {
Rob Pike62b06fa2008-12-20 16:07:43 -080049 i int64; // can't use string here; struct values are only compared at the top level
Rob Pike2738f422008-08-11 13:32:13 -070050 f float;
51 };
Russ Cox55645042009-01-06 15:19:02 -080052 mipT := make(map[int] *T);
53 mpTi := make(map[*T] int);
54 mit := make(map[int] T);
Russ Coxa7f6d402009-01-26 09:56:42 -080055// mti := make(map[T] int);
Rob Pike2738f422008-08-11 13:32:13 -070056
Russ Cox08ca30b2008-12-19 03:05:37 -080057 type M map[int] int;
Russ Cox55645042009-01-06 15:19:02 -080058 mipM := make(map[int] M);
Rob Pike2738f422008-08-11 13:32:13 -070059
Rob Pike2738f422008-08-11 13:32:13 -070060 var apT [2*count]*T;
61
62 for i := 0; i < count; i++ {
Russ Cox8a7cbad2009-01-15 17:22:17 -080063 s := strconv.Itoa(i);
64 s10 := strconv.Itoa(i*10);
Rob Pike2738f422008-08-11 13:32:13 -070065 f := float(i);
Russ Coxbe2edb52009-03-03 08:39:12 -080066 t := T{int64(i),f};
Russ Cox55645042009-01-06 15:19:02 -080067 apT[i] = new(T);
Rob Pike62b06fa2008-12-20 16:07:43 -080068 apT[i].i = int64(i);
Rob Pike2738f422008-08-11 13:32:13 -070069 apT[i].f = f;
Russ Cox55645042009-01-06 15:19:02 -080070 apT[2*i] = new(T); // need twice as many entries as we use, for the nonexistence check
Rob Pike62b06fa2008-12-20 16:07:43 -080071 apT[2*i].i = int64(i);
Rob Pike2738f422008-08-11 13:32:13 -070072 apT[2*i].f = f;
Russ Coxbe2edb52009-03-03 08:39:12 -080073 m := M{i: i+1};
Rob Pike2738f422008-08-11 13:32:13 -070074 mib[i] = (i != 0);
75 mii[i] = 10*i;
76 mfi[float(i)] = 10*i;
77 mif[i] = 10.0*f;
78 mis[i] = s;
Rob Pike62b06fa2008-12-20 16:07:43 -080079 msi[s] = i;
80 mss[s] = s10;
81 mss[s] = s10;
Russ Coxebd27d62009-10-09 11:18:32 -070082 as := make([]string, 2);
Rob Pike62b06fa2008-12-20 16:07:43 -080083 as[0] = s10;
84 as[1] = s10;
85 mspa[s] = as;
86 mipT[i] = apT[i];
Rob Pike2738f422008-08-11 13:32:13 -070087 mpTi[apT[i]] = i;
Rob Pike2738f422008-08-11 13:32:13 -070088 mipM[i] = m;
Rob Pike62b06fa2008-12-20 16:07:43 -080089 mit[i] = t;
Russ Coxa7f6d402009-01-26 09:56:42 -080090 // mti[t] = i;
Rob Pike2738f422008-08-11 13:32:13 -070091 }
92
93 // test len
94 if len(mib) != count {
Rob Pike61f33022009-01-15 13:48:11 -080095 fmt.Printf("len(mib) = %d\n", len(mib));
Rob Pike2738f422008-08-11 13:32:13 -070096 }
97 if len(mii) != count {
Rob Pike61f33022009-01-15 13:48:11 -080098 fmt.Printf("len(mii) = %d\n", len(mii));
Rob Pike2738f422008-08-11 13:32:13 -070099 }
100 if len(mfi) != count {
Rob Pike61f33022009-01-15 13:48:11 -0800101 fmt.Printf("len(mfi) = %d\n", len(mfi));
Rob Pike2738f422008-08-11 13:32:13 -0700102 }
103 if len(mif) != count {
Rob Pike61f33022009-01-15 13:48:11 -0800104 fmt.Printf("len(mif) = %d\n", len(mif));
Rob Pike2738f422008-08-11 13:32:13 -0700105 }
106 if len(msi) != count {
Rob Pike61f33022009-01-15 13:48:11 -0800107 fmt.Printf("len(msi) = %d\n", len(msi));
Rob Pike2738f422008-08-11 13:32:13 -0700108 }
109 if len(mis) != count {
Rob Pike61f33022009-01-15 13:48:11 -0800110 fmt.Printf("len(mis) = %d\n", len(mis));
Rob Pike2738f422008-08-11 13:32:13 -0700111 }
112 if len(mss) != count {
Rob Pike61f33022009-01-15 13:48:11 -0800113 fmt.Printf("len(mss) = %d\n", len(mss));
Rob Pike2738f422008-08-11 13:32:13 -0700114 }
115 if len(mspa) != count {
Rob Pike61f33022009-01-15 13:48:11 -0800116 fmt.Printf("len(mspa) = %d\n", len(mspa));
Rob Pike2738f422008-08-11 13:32:13 -0700117 }
118 if len(mipT) != count {
Rob Pike61f33022009-01-15 13:48:11 -0800119 fmt.Printf("len(mipT) = %d\n", len(mipT));
Rob Pike2738f422008-08-11 13:32:13 -0700120 }
121 if len(mpTi) != count {
Rob Pike61f33022009-01-15 13:48:11 -0800122 fmt.Printf("len(mpTi) = %d\n", len(mpTi));
Rob Pike2738f422008-08-11 13:32:13 -0700123 }
Russ Coxa7f6d402009-01-26 09:56:42 -0800124// if len(mti) != count {
125// fmt.Printf("len(mti) = %d\n", len(mti));
126// }
Rob Pike2738f422008-08-11 13:32:13 -0700127 if len(mipM) != count {
Rob Pike61f33022009-01-15 13:48:11 -0800128 fmt.Printf("len(mipM) = %d\n", len(mipM));
Rob Pike62b06fa2008-12-20 16:07:43 -0800129 }
Russ Coxa7f6d402009-01-26 09:56:42 -0800130// if len(mti) != count {
131// fmt.Printf("len(mti) = %d\n", len(mti));
132// }
Rob Pike62b06fa2008-12-20 16:07:43 -0800133 if len(mit) != count {
Rob Pike61f33022009-01-15 13:48:11 -0800134 fmt.Printf("len(mit) = %d\n", len(mit));
Rob Pike2738f422008-08-11 13:32:13 -0700135 }
Russ Cox08ca30b2008-12-19 03:05:37 -0800136
Rob Pike2738f422008-08-11 13:32:13 -0700137 // test construction directly
138 for i := 0; i < count; i++ {
Russ Cox8a7cbad2009-01-15 17:22:17 -0800139 s := strconv.Itoa(i);
140 s10 := strconv.Itoa(i*10);
Rob Pike2738f422008-08-11 13:32:13 -0700141 f := float(i);
Rob Pike2738f422008-08-11 13:32:13 -0700142 // BUG m := M(i, i+1);
143 if mib[i] != (i != 0) {
Rob Pike61f33022009-01-15 13:48:11 -0800144 fmt.Printf("mib[%d] = %t\n", i, mib[i]);
Rob Pike2738f422008-08-11 13:32:13 -0700145 }
146 if(mii[i] != 10*i) {
Rob Pike61f33022009-01-15 13:48:11 -0800147 fmt.Printf("mii[%d] = %d\n", i, mii[i]);
Rob Pike2738f422008-08-11 13:32:13 -0700148 }
149 if(mfi[f] != 10*i) {
Rob Pike61f33022009-01-15 13:48:11 -0800150 fmt.Printf("mfi[%d] = %d\n", i, mfi[f]);
Rob Pike2738f422008-08-11 13:32:13 -0700151 }
152 if(mif[i] != 10.0*f) {
Rob Pike61f33022009-01-15 13:48:11 -0800153 fmt.Printf("mif[%d] = %g\n", i, mif[i]);
Rob Pike2738f422008-08-11 13:32:13 -0700154 }
155 if(mis[i] != s) {
Rob Pike61f33022009-01-15 13:48:11 -0800156 fmt.Printf("mis[%d] = %s\n", i, mis[i]);
Rob Pike2738f422008-08-11 13:32:13 -0700157 }
158 if(msi[s] != i) {
Rob Pike61f33022009-01-15 13:48:11 -0800159 fmt.Printf("msi[%s] = %d\n", s, msi[s]);
Rob Pike2738f422008-08-11 13:32:13 -0700160 }
Rob Pike62b06fa2008-12-20 16:07:43 -0800161 if mss[s] != s10 {
Rob Pike61f33022009-01-15 13:48:11 -0800162 fmt.Printf("mss[%s] = %g\n", s, mss[s]);
Rob Pike2738f422008-08-11 13:32:13 -0700163 }
Russ Coxebd27d62009-10-09 11:18:32 -0700164 for j := 0; j < len(mspa[s]); j++ {
Rob Pike62b06fa2008-12-20 16:07:43 -0800165 if mspa[s][j] != s10 {
Rob Pike61f33022009-01-15 13:48:11 -0800166 fmt.Printf("mspa[%s][%d] = %s\n", s, j, mspa[s][j]);
Rob Pike2738f422008-08-11 13:32:13 -0700167 }
168 }
Rob Pike62b06fa2008-12-20 16:07:43 -0800169 if(mipT[i].i != int64(i) || mipT[i].f != f) {
Rob Pike61f33022009-01-15 13:48:11 -0800170 fmt.Printf("mipT[%d] = %v\n", i, mipT[i]);
Rob Pike2738f422008-08-11 13:32:13 -0700171 }
172 if(mpTi[apT[i]] != i) {
Rob Pike61f33022009-01-15 13:48:11 -0800173 fmt.Printf("mpTi[apT[%d]] = %d\n", i, mpTi[apT[i]]);
Rob Pike2738f422008-08-11 13:32:13 -0700174 }
Russ Coxa7f6d402009-01-26 09:56:42 -0800175 // if(mti[t] != i) {
176 // fmt.Printf("mti[%s] = %s\n", s, mti[t]);
177 // }
Rob Pike2738f422008-08-11 13:32:13 -0700178 if (mipM[i][i] != i + 1) {
Rob Pike61f33022009-01-15 13:48:11 -0800179 fmt.Printf("mipM[%d][%d] = %d\n", i, i, mipM[i][i]);
Rob Pike62b06fa2008-12-20 16:07:43 -0800180 }
Russ Coxa7f6d402009-01-26 09:56:42 -0800181 // if(mti[t] != i) {
182 // fmt.Printf("mti[%v] = %d\n", t, mti[t]);
183 // }
Rob Pike62b06fa2008-12-20 16:07:43 -0800184 if(mit[i].i != int64(i) || mit[i].f != f) {
Rob Pike61f33022009-01-15 13:48:11 -0800185 fmt.Printf("mit[%d] = {%d %g}\n", i, mit[i].i, mit[i].f);
Rob Pike2738f422008-08-11 13:32:13 -0700186 }
187 }
188
Rob Pike2738f422008-08-11 13:32:13 -0700189 // test existence with tuple check
190 // failed lookups yield a false value for the boolean.
191 for i := 0; i < count; i++ {
Russ Cox8a7cbad2009-01-15 17:22:17 -0800192 s := strconv.Itoa(i);
Rob Pike2738f422008-08-11 13:32:13 -0700193 f := float(i);
Rob Pike2738f422008-08-11 13:32:13 -0700194 {
Russ Coxae54cf72009-09-15 12:42:24 -0700195 _, b := mib[i];
Rob Pike2738f422008-08-11 13:32:13 -0700196 if !b {
Rob Pike61f33022009-01-15 13:48:11 -0800197 fmt.Printf("tuple existence decl: mib[%d]\n", i);
Rob Pike2738f422008-08-11 13:32:13 -0700198 }
Russ Coxae54cf72009-09-15 12:42:24 -0700199 _, b = mib[i];
Rob Pike2738f422008-08-11 13:32:13 -0700200 if !b {
Rob Pike61f33022009-01-15 13:48:11 -0800201 fmt.Printf("tuple existence assign: mib[%d]\n", i);
Rob Pike2738f422008-08-11 13:32:13 -0700202 }
203 }
204 {
Russ Coxae54cf72009-09-15 12:42:24 -0700205 _, b := mii[i];
Rob Pike2738f422008-08-11 13:32:13 -0700206 if !b {
Rob Pike61f33022009-01-15 13:48:11 -0800207 fmt.Printf("tuple existence decl: mii[%d]\n", i);
Rob Pike2738f422008-08-11 13:32:13 -0700208 }
Russ Coxae54cf72009-09-15 12:42:24 -0700209 _, b = mii[i];
Rob Pike2738f422008-08-11 13:32:13 -0700210 if !b {
Rob Pike61f33022009-01-15 13:48:11 -0800211 fmt.Printf("tuple existence assign: mii[%d]\n", i);
Rob Pike2738f422008-08-11 13:32:13 -0700212 }
213 }
214 {
Russ Coxae54cf72009-09-15 12:42:24 -0700215 _, b := mfi[f];
Rob Pike2738f422008-08-11 13:32:13 -0700216 if !b {
Rob Pike61f33022009-01-15 13:48:11 -0800217 fmt.Printf("tuple existence decl: mfi[%d]\n", i);
Rob Pike2738f422008-08-11 13:32:13 -0700218 }
Russ Coxae54cf72009-09-15 12:42:24 -0700219 _, b = mfi[f];
Rob Pike2738f422008-08-11 13:32:13 -0700220 if !b {
Rob Pike61f33022009-01-15 13:48:11 -0800221 fmt.Printf("tuple existence assign: mfi[%d]\n", i);
Rob Pike2738f422008-08-11 13:32:13 -0700222 }
223 }
224 {
Russ Coxae54cf72009-09-15 12:42:24 -0700225 _, b := mif[i];
Rob Pike2738f422008-08-11 13:32:13 -0700226 if !b {
Rob Pike61f33022009-01-15 13:48:11 -0800227 fmt.Printf("tuple existence decl: mif[%d]\n", i);
Rob Pike2738f422008-08-11 13:32:13 -0700228 }
Russ Coxae54cf72009-09-15 12:42:24 -0700229 _, b = mif[i];
Rob Pike2738f422008-08-11 13:32:13 -0700230 if !b {
Rob Pike61f33022009-01-15 13:48:11 -0800231 fmt.Printf("tuple existence assign: mif[%d]\n", i);
Rob Pike2738f422008-08-11 13:32:13 -0700232 }
233 }
234 {
Russ Coxae54cf72009-09-15 12:42:24 -0700235 _, b := mis[i];
Rob Pike2738f422008-08-11 13:32:13 -0700236 if !b {
Rob Pike61f33022009-01-15 13:48:11 -0800237 fmt.Printf("tuple existence decl: mis[%d]\n", i);
Rob Pike2738f422008-08-11 13:32:13 -0700238 }
Russ Coxae54cf72009-09-15 12:42:24 -0700239 _, b = mis[i];
Rob Pike2738f422008-08-11 13:32:13 -0700240 if !b {
Rob Pike61f33022009-01-15 13:48:11 -0800241 fmt.Printf("tuple existence assign: mis[%d]\n", i);
Rob Pike2738f422008-08-11 13:32:13 -0700242 }
243 }
244 {
Russ Coxae54cf72009-09-15 12:42:24 -0700245 _, b := msi[s];
Rob Pike2738f422008-08-11 13:32:13 -0700246 if !b {
Rob Pike61f33022009-01-15 13:48:11 -0800247 fmt.Printf("tuple existence decl: msi[%d]\n", i);
Rob Pike2738f422008-08-11 13:32:13 -0700248 }
Russ Coxae54cf72009-09-15 12:42:24 -0700249 _, b = msi[s];
Rob Pike2738f422008-08-11 13:32:13 -0700250 if !b {
Rob Pike61f33022009-01-15 13:48:11 -0800251 fmt.Printf("tuple existence assign: msi[%d]\n", i);
Rob Pike2738f422008-08-11 13:32:13 -0700252 }
253 }
254 {
Russ Coxae54cf72009-09-15 12:42:24 -0700255 _, b := mss[s];
Rob Pike2738f422008-08-11 13:32:13 -0700256 if !b {
Rob Pike61f33022009-01-15 13:48:11 -0800257 fmt.Printf("tuple existence decl: mss[%d]\n", i);
Rob Pike2738f422008-08-11 13:32:13 -0700258 }
Russ Coxae54cf72009-09-15 12:42:24 -0700259 _, b = mss[s];
Rob Pike2738f422008-08-11 13:32:13 -0700260 if !b {
Rob Pike61f33022009-01-15 13:48:11 -0800261 fmt.Printf("tuple existence assign: mss[%d]\n", i);
Rob Pike2738f422008-08-11 13:32:13 -0700262 }
263 }
264 {
Russ Coxae54cf72009-09-15 12:42:24 -0700265 _, b := mspa[s];
Rob Pike2738f422008-08-11 13:32:13 -0700266 if !b {
Rob Pike61f33022009-01-15 13:48:11 -0800267 fmt.Printf("tuple existence decl: mspa[%d]\n", i);
Rob Pike2738f422008-08-11 13:32:13 -0700268 }
Russ Coxae54cf72009-09-15 12:42:24 -0700269 _, b = mspa[s];
Rob Pike2738f422008-08-11 13:32:13 -0700270 if !b {
Rob Pike61f33022009-01-15 13:48:11 -0800271 fmt.Printf("tuple existence assign: mspa[%d]\n", i);
Rob Pike2738f422008-08-11 13:32:13 -0700272 }
273 }
274 {
Russ Coxae54cf72009-09-15 12:42:24 -0700275 _, b := mipT[i];
Rob Pike2738f422008-08-11 13:32:13 -0700276 if !b {
Rob Pike61f33022009-01-15 13:48:11 -0800277 fmt.Printf("tuple existence decl: mipT[%d]\n", i);
Rob Pike2738f422008-08-11 13:32:13 -0700278 }
Russ Coxae54cf72009-09-15 12:42:24 -0700279 _, b = mipT[i];
Rob Pike2738f422008-08-11 13:32:13 -0700280 if !b {
Rob Pike61f33022009-01-15 13:48:11 -0800281 fmt.Printf("tuple existence assign: mipT[%d]\n", i);
Rob Pike2738f422008-08-11 13:32:13 -0700282 }
283 }
284 {
Russ Coxae54cf72009-09-15 12:42:24 -0700285 _, b := mpTi[apT[i]];
Rob Pike2738f422008-08-11 13:32:13 -0700286 if !b {
Rob Pike61f33022009-01-15 13:48:11 -0800287 fmt.Printf("tuple existence decl: mpTi[apT[%d]]\n", i);
Rob Pike2738f422008-08-11 13:32:13 -0700288 }
Russ Coxae54cf72009-09-15 12:42:24 -0700289 _, b = mpTi[apT[i]];
Rob Pike2738f422008-08-11 13:32:13 -0700290 if !b {
Rob Pike61f33022009-01-15 13:48:11 -0800291 fmt.Printf("tuple existence assign: mpTi[apT[%d]]\n", i);
Rob Pike2738f422008-08-11 13:32:13 -0700292 }
293 }
Rob Pike2738f422008-08-11 13:32:13 -0700294 {
Russ Coxae54cf72009-09-15 12:42:24 -0700295 _, b := mipM[i];
Rob Pike2738f422008-08-11 13:32:13 -0700296 if !b {
Rob Pike61f33022009-01-15 13:48:11 -0800297 fmt.Printf("tuple existence decl: mipM[%d]\n", i);
Rob Pike2738f422008-08-11 13:32:13 -0700298 }
Russ Coxae54cf72009-09-15 12:42:24 -0700299 _, b = mipM[i];
Rob Pike2738f422008-08-11 13:32:13 -0700300 if !b {
Rob Pike61f33022009-01-15 13:48:11 -0800301 fmt.Printf("tuple existence assign: mipM[%d]\n", i);
Rob Pike62b06fa2008-12-20 16:07:43 -0800302 }
303 }
304 {
Russ Coxae54cf72009-09-15 12:42:24 -0700305 _, b := mit[i];
Rob Pike62b06fa2008-12-20 16:07:43 -0800306 if !b {
Rob Pike61f33022009-01-15 13:48:11 -0800307 fmt.Printf("tuple existence decl: mit[%d]\n", i);
Rob Pike62b06fa2008-12-20 16:07:43 -0800308 }
Russ Coxae54cf72009-09-15 12:42:24 -0700309 _, b = mit[i];
Rob Pike62b06fa2008-12-20 16:07:43 -0800310 if !b {
Rob Pike61f33022009-01-15 13:48:11 -0800311 fmt.Printf("tuple existence assign: mit[%d]\n", i);
Rob Pike62b06fa2008-12-20 16:07:43 -0800312 }
313 }
Russ Coxa7f6d402009-01-26 09:56:42 -0800314// {
Russ Coxae54cf72009-09-15 12:42:24 -0700315// _, b := mti[t];
Russ Coxa7f6d402009-01-26 09:56:42 -0800316// if !b {
317// fmt.Printf("tuple existence decl: mti[%d]\n", i);
318// }
Russ Coxae54cf72009-09-15 12:42:24 -0700319// _, b = mti[t];
Russ Coxa7f6d402009-01-26 09:56:42 -0800320// if !b {
321// fmt.Printf("tuple existence assign: mti[%d]\n", i);
322// }
323// }
Rob Pike2738f422008-08-11 13:32:13 -0700324 }
325
326 // test nonexistence with tuple check
327 // failed lookups yield a false value for the boolean.
328 for i := count; i < 2*count; i++ {
Russ Cox8a7cbad2009-01-15 17:22:17 -0800329 s := strconv.Itoa(i);
Rob Pike2738f422008-08-11 13:32:13 -0700330 f := float(i);
Rob Pike2738f422008-08-11 13:32:13 -0700331 {
Russ Coxae54cf72009-09-15 12:42:24 -0700332 _, b := mib[i];
Rob Pike2738f422008-08-11 13:32:13 -0700333 if b {
Rob Pike61f33022009-01-15 13:48:11 -0800334 fmt.Printf("tuple nonexistence decl: mib[%d]", i);
Rob Pike2738f422008-08-11 13:32:13 -0700335 }
Russ Coxae54cf72009-09-15 12:42:24 -0700336 _, b = mib[i];
Rob Pike2738f422008-08-11 13:32:13 -0700337 if b {
Rob Pike61f33022009-01-15 13:48:11 -0800338 fmt.Printf("tuple nonexistence assign: mib[%d]", i);
Rob Pike2738f422008-08-11 13:32:13 -0700339 }
340 }
341 {
Russ Coxae54cf72009-09-15 12:42:24 -0700342 _, b := mii[i];
Rob Pike2738f422008-08-11 13:32:13 -0700343 if b {
Rob Pike61f33022009-01-15 13:48:11 -0800344 fmt.Printf("tuple nonexistence decl: mii[%d]", i);
Rob Pike2738f422008-08-11 13:32:13 -0700345 }
Russ Coxae54cf72009-09-15 12:42:24 -0700346 _, b = mii[i];
Rob Pike2738f422008-08-11 13:32:13 -0700347 if b {
Rob Pike61f33022009-01-15 13:48:11 -0800348 fmt.Printf("tuple nonexistence assign: mii[%d]", i);
Rob Pike2738f422008-08-11 13:32:13 -0700349 }
350 }
351 {
Russ Coxae54cf72009-09-15 12:42:24 -0700352 _, b := mfi[f];
Rob Pike2738f422008-08-11 13:32:13 -0700353 if b {
Rob Pike61f33022009-01-15 13:48:11 -0800354 fmt.Printf("tuple nonexistence decl: mfi[%d]", i);
Rob Pike2738f422008-08-11 13:32:13 -0700355 }
Russ Coxae54cf72009-09-15 12:42:24 -0700356 _, b = mfi[f];
Rob Pike2738f422008-08-11 13:32:13 -0700357 if b {
Rob Pike61f33022009-01-15 13:48:11 -0800358 fmt.Printf("tuple nonexistence assign: mfi[%d]", i);
Rob Pike2738f422008-08-11 13:32:13 -0700359 }
360 }
361 {
Russ Coxae54cf72009-09-15 12:42:24 -0700362 _, b := mif[i];
Rob Pike2738f422008-08-11 13:32:13 -0700363 if b {
Rob Pike61f33022009-01-15 13:48:11 -0800364 fmt.Printf("tuple nonexistence decl: mif[%d]", i);
Rob Pike2738f422008-08-11 13:32:13 -0700365 }
Russ Coxae54cf72009-09-15 12:42:24 -0700366 _, b = mif[i];
Rob Pike2738f422008-08-11 13:32:13 -0700367 if b {
Rob Pike61f33022009-01-15 13:48:11 -0800368 fmt.Printf("tuple nonexistence assign: mif[%d]", i);
Rob Pike2738f422008-08-11 13:32:13 -0700369 }
370 }
371 {
Russ Coxae54cf72009-09-15 12:42:24 -0700372 _, b := mis[i];
Rob Pike2738f422008-08-11 13:32:13 -0700373 if b {
Rob Pike61f33022009-01-15 13:48:11 -0800374 fmt.Printf("tuple nonexistence decl: mis[%d]", i);
Rob Pike2738f422008-08-11 13:32:13 -0700375 }
Russ Coxae54cf72009-09-15 12:42:24 -0700376 _, b = mis[i];
Rob Pike2738f422008-08-11 13:32:13 -0700377 if b {
Rob Pike61f33022009-01-15 13:48:11 -0800378 fmt.Printf("tuple nonexistence assign: mis[%d]", i);
Rob Pike2738f422008-08-11 13:32:13 -0700379 }
380 }
381 {
Russ Coxae54cf72009-09-15 12:42:24 -0700382 _, b := msi[s];
Rob Pike2738f422008-08-11 13:32:13 -0700383 if b {
Rob Pike61f33022009-01-15 13:48:11 -0800384 fmt.Printf("tuple nonexistence decl: msi[%d]", i);
Rob Pike2738f422008-08-11 13:32:13 -0700385 }
Russ Coxae54cf72009-09-15 12:42:24 -0700386 _, b = msi[s];
Rob Pike2738f422008-08-11 13:32:13 -0700387 if b {
Rob Pike61f33022009-01-15 13:48:11 -0800388 fmt.Printf("tuple nonexistence assign: msi[%d]", i);
Rob Pike2738f422008-08-11 13:32:13 -0700389 }
390 }
391 {
Russ Coxae54cf72009-09-15 12:42:24 -0700392 _, b := mss[s];
Rob Pike2738f422008-08-11 13:32:13 -0700393 if b {
Rob Pike61f33022009-01-15 13:48:11 -0800394 fmt.Printf("tuple nonexistence decl: mss[%d]", i);
Rob Pike2738f422008-08-11 13:32:13 -0700395 }
Russ Coxae54cf72009-09-15 12:42:24 -0700396 _, b = mss[s];
Rob Pike2738f422008-08-11 13:32:13 -0700397 if b {
Rob Pike61f33022009-01-15 13:48:11 -0800398 fmt.Printf("tuple nonexistence assign: mss[%d]", i);
Rob Pike2738f422008-08-11 13:32:13 -0700399 }
400 }
401 {
Russ Coxae54cf72009-09-15 12:42:24 -0700402 _, b := mspa[s];
Rob Pike2738f422008-08-11 13:32:13 -0700403 if b {
Rob Pike61f33022009-01-15 13:48:11 -0800404 fmt.Printf("tuple nonexistence decl: mspa[%d]", i);
Rob Pike2738f422008-08-11 13:32:13 -0700405 }
Russ Coxae54cf72009-09-15 12:42:24 -0700406 _, b = mspa[s];
Rob Pike2738f422008-08-11 13:32:13 -0700407 if b {
Rob Pike61f33022009-01-15 13:48:11 -0800408 fmt.Printf("tuple nonexistence assign: mspa[%d]", i);
Rob Pike2738f422008-08-11 13:32:13 -0700409 }
410 }
411 {
Russ Coxae54cf72009-09-15 12:42:24 -0700412 _, b := mipT[i];
Rob Pike2738f422008-08-11 13:32:13 -0700413 if b {
Rob Pike61f33022009-01-15 13:48:11 -0800414 fmt.Printf("tuple nonexistence decl: mipT[%d]", i);
Rob Pike2738f422008-08-11 13:32:13 -0700415 }
Russ Coxae54cf72009-09-15 12:42:24 -0700416 _, b = mipT[i];
Rob Pike2738f422008-08-11 13:32:13 -0700417 if b {
Rob Pike61f33022009-01-15 13:48:11 -0800418 fmt.Printf("tuple nonexistence assign: mipT[%d]", i);
Rob Pike2738f422008-08-11 13:32:13 -0700419 }
420 }
421 {
Russ Coxae54cf72009-09-15 12:42:24 -0700422 _, b := mpTi[apT[i]];
Rob Pike2738f422008-08-11 13:32:13 -0700423 if b {
Rob Pike61f33022009-01-15 13:48:11 -0800424 fmt.Printf("tuple nonexistence decl: mpTi[apt[%d]]", i);
Rob Pike2738f422008-08-11 13:32:13 -0700425 }
Russ Coxae54cf72009-09-15 12:42:24 -0700426 _, b = mpTi[apT[i]];
Rob Pike2738f422008-08-11 13:32:13 -0700427 if b {
Rob Pike61f33022009-01-15 13:48:11 -0800428 fmt.Printf("tuple nonexistence assign: mpTi[apT[%d]]", i);
Rob Pike2738f422008-08-11 13:32:13 -0700429 }
430 }
Rob Pike2738f422008-08-11 13:32:13 -0700431 {
Russ Coxae54cf72009-09-15 12:42:24 -0700432 _, b := mipM[i];
Rob Pike2738f422008-08-11 13:32:13 -0700433 if b {
Rob Pike61f33022009-01-15 13:48:11 -0800434 fmt.Printf("tuple nonexistence decl: mipM[%d]", i);
Rob Pike2738f422008-08-11 13:32:13 -0700435 }
Russ Coxae54cf72009-09-15 12:42:24 -0700436 _, b = mipM[i];
Rob Pike2738f422008-08-11 13:32:13 -0700437 if b {
Rob Pike61f33022009-01-15 13:48:11 -0800438 fmt.Printf("tuple nonexistence assign: mipM[%d]", i);
Rob Pike62b06fa2008-12-20 16:07:43 -0800439 }
440 }
Russ Coxa7f6d402009-01-26 09:56:42 -0800441// {
Russ Coxae54cf72009-09-15 12:42:24 -0700442// _, b := mti[t];
Russ Coxa7f6d402009-01-26 09:56:42 -0800443// if b {
444// fmt.Printf("tuple nonexistence decl: mti[%d]", i);
445// }
Russ Coxae54cf72009-09-15 12:42:24 -0700446// _, b = mti[t];
Russ Coxa7f6d402009-01-26 09:56:42 -0800447// if b {
448// fmt.Printf("tuple nonexistence assign: mti[%d]", i);
449// }
450// }
Rob Pike62b06fa2008-12-20 16:07:43 -0800451 {
Russ Coxae54cf72009-09-15 12:42:24 -0700452 _, b := mit[i];
Rob Pike62b06fa2008-12-20 16:07:43 -0800453 if b {
Rob Pike61f33022009-01-15 13:48:11 -0800454 fmt.Printf("tuple nonexistence decl: mit[%d]", i);
Rob Pike62b06fa2008-12-20 16:07:43 -0800455 }
Russ Coxae54cf72009-09-15 12:42:24 -0700456 _, b = mit[i];
Rob Pike62b06fa2008-12-20 16:07:43 -0800457 if b {
Rob Pike61f33022009-01-15 13:48:11 -0800458 fmt.Printf("tuple nonexistence assign: mit[%d]", i);
Rob Pike2738f422008-08-11 13:32:13 -0700459 }
460 }
461 }
Russ Cox08ca30b2008-12-19 03:05:37 -0800462
Rob Pike2738f422008-08-11 13:32:13 -0700463
464 // tests for structured map element updates
465 for i := 0; i < count; i++ {
Russ Cox8a7cbad2009-01-15 17:22:17 -0800466 s := strconv.Itoa(i);
Rob Pike2738f422008-08-11 13:32:13 -0700467 mspa[s][i % 2] = "deleted";
468 if mspa[s][i % 2] != "deleted" {
Rob Pike61f33022009-01-15 13:48:11 -0800469 fmt.Printf("update mspa[%s][%d] = %s\n", s, i %2, mspa[s][i % 2]);
Rob Pike2738f422008-08-11 13:32:13 -0700470 }
Rob Pike62b06fa2008-12-20 16:07:43 -0800471
472 mipT[i].i += 1;
473 if mipT[i].i != int64(i)+1 {
Rob Pike61f33022009-01-15 13:48:11 -0800474 fmt.Printf("update mipT[%d].i = %d\n", i, mipT[i].i);
Rob Pike2738f422008-08-11 13:32:13 -0700475 }
476 mipT[i].f = float(i + 1);
477 if (mipT[i].f != float(i + 1)) {
Rob Pike61f33022009-01-15 13:48:11 -0800478 fmt.Printf("update mipT[%d].f = %g\n", i, mipT[i].f);
Rob Pike2738f422008-08-11 13:32:13 -0700479 }
Rob Pike62b06fa2008-12-20 16:07:43 -0800480
Rob Pike2738f422008-08-11 13:32:13 -0700481 mipM[i][i]++;
482 if mipM[i][i] != (i + 1) + 1 {
Rob Pike61f33022009-01-15 13:48:11 -0800483 fmt.Printf("update mipM[%d][%d] = %i\n", i, i, mipM[i][i]);
Rob Pike2738f422008-08-11 13:32:13 -0700484 }
485 }
Russ Coxae54cf72009-09-15 12:42:24 -0700486
Russ Cox86145612009-03-23 18:32:37 -0700487 // test range on nil map
488 var mnil map[string] int;
Russ Coxae54cf72009-09-15 12:42:24 -0700489 for _, _ = range mnil {
Russ Cox86145612009-03-23 18:32:37 -0700490 panic("range mnil");
491 }
Rob Pike2738f422008-08-11 13:32:13 -0700492}