github.com/yanyiwu/go@v0.0.0-20150106053140-03d6637dbb7f/test/bigmap.go (about) 1 // run 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 7 // Internally a map holds elements in up to 255 bytes of key+value. 8 // When key or value or both are too large, it uses pointers to key+value 9 // instead. Test all the combinations. 10 11 package main 12 13 func seq(x, y int) [1000]byte { 14 var r [1000]byte 15 for i := 0; i < len(r); i++ { 16 r[i] = byte(x + i*y) 17 } 18 return r 19 } 20 21 func cmp(x, y [1000]byte) { 22 for i := 0; i < len(x); i++ { 23 if x[i] != y[i] { 24 panic("BUG mismatch") 25 } 26 } 27 } 28 29 func main() { 30 m := make(map[int][1000]byte) 31 m[1] = seq(11, 13) 32 m[2] = seq(2, 9) 33 m[3] = seq(3, 17) 34 35 cmp(m[1], seq(11, 13)) 36 cmp(m[2], seq(2, 9)) 37 cmp(m[3], seq(3, 17)) 38 39 40 { 41 type T [1]byte 42 type V [1]byte 43 m := make(map[T]V) 44 m[T{}] = V{1} 45 m[T{1}] = V{2} 46 if x, y := m[T{}][0], m[T{1}][0]; x != 1 || y != 2 { 47 println(x, y) 48 panic("bad map") 49 } 50 } 51 { 52 type T [100]byte 53 type V [1]byte 54 m := make(map[T]V) 55 m[T{}] = V{1} 56 m[T{1}] = V{2} 57 if x, y := m[T{}][0], m[T{1}][0]; x != 1 || y != 2 { 58 println(x, y) 59 panic("bad map") 60 } 61 } 62 { 63 type T [1]byte 64 type V [100]byte 65 m := make(map[T]V) 66 m[T{}] = V{1} 67 m[T{1}] = V{2} 68 if x, y := m[T{}][0], m[T{1}][0]; x != 1 || y != 2 { 69 println(x, y) 70 panic("bad map") 71 } 72 } 73 { 74 type T [1000]byte 75 type V [1]byte 76 m := make(map[T]V) 77 m[T{}] = V{1} 78 m[T{1}] = V{2} 79 if x, y := m[T{}][0], m[T{1}][0]; x != 1 || y != 2 { 80 println(x, y) 81 panic("bad map") 82 } 83 } 84 { 85 type T [1]byte 86 type V [1000]byte 87 m := make(map[T]V) 88 m[T{}] = V{1} 89 m[T{1}] = V{2} 90 if x, y := m[T{}][0], m[T{1}][0]; x != 1 || y != 2 { 91 println(x, y) 92 panic("bad map") 93 } 94 } 95 { 96 type T [1000]byte 97 type V [1000]byte 98 m := make(map[T]V) 99 m[T{}] = V{1} 100 m[T{1}] = V{2} 101 if x, y := m[T{}][0], m[T{1}][0]; x != 1 || y != 2 { 102 println(x, y) 103 panic("bad map") 104 } 105 } 106 { 107 type T [200]byte 108 type V [1]byte 109 m := make(map[T]V) 110 m[T{}] = V{1} 111 m[T{1}] = V{2} 112 if x, y := m[T{}][0], m[T{1}][0]; x != 1 || y != 2 { 113 println(x, y) 114 panic("bad map") 115 } 116 } 117 { 118 type T [1]byte 119 type V [200]byte 120 m := make(map[T]V) 121 m[T{}] = V{1} 122 m[T{1}] = V{2} 123 if x, y := m[T{}][0], m[T{1}][0]; x != 1 || y != 2 { 124 println(x, y) 125 panic("bad map") 126 } 127 } 128 { 129 type T [200]byte 130 type V [200]byte 131 m := make(map[T]V) 132 m[T{}] = V{1} 133 m[T{1}] = V{2} 134 if x, y := m[T{}][0], m[T{1}][0]; x != 1 || y != 2 { 135 println(x, y) 136 panic("bad map") 137 } 138 } 139 }