]> Cypherpunks.ru repositories - gostls13.git/blobdiff - test/bigmap.go
cmd/compile/internal/inline: score call sites exposed by inlines
[gostls13.git] / test / bigmap.go
index 57330d559de03e8810f7fbc11a8001e7f223d543..c5e4f91e11951964d5889363edcf002e7a3cdc46 100644 (file)
@@ -4,6 +4,10 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// Internally a map holds elements in up to 255 bytes of key+value.
+// When key or value or both are too large, it uses pointers to key+value
+// instead.  Test all the combinations.
+
 package main
 
 func seq(x, y int) [1000]byte {
@@ -31,4 +35,105 @@ func main() {
        cmp(m[1], seq(11, 13))
        cmp(m[2], seq(2, 9))
        cmp(m[3], seq(3, 17))
+       
+
+       {
+               type T [1]byte
+               type V [1]byte
+               m := make(map[T]V)
+               m[T{}] = V{1}
+               m[T{1}] = V{2}
+               if x, y := m[T{}][0], m[T{1}][0]; x != 1 || y != 2 {
+                       println(x, y)
+                       panic("bad map")
+               }
+       }
+       {
+               type T [100]byte
+               type V [1]byte
+               m := make(map[T]V)
+               m[T{}] = V{1}
+               m[T{1}] = V{2}
+               if x, y := m[T{}][0], m[T{1}][0]; x != 1 || y != 2 {
+                       println(x, y)
+                       panic("bad map")
+               }
+       }
+       {
+               type T [1]byte
+               type V [100]byte
+               m := make(map[T]V)
+               m[T{}] = V{1}
+               m[T{1}] = V{2}
+               if x, y := m[T{}][0], m[T{1}][0]; x != 1 || y != 2 {
+                       println(x, y)
+                       panic("bad map")
+               }
+       }
+       {
+               type T [1000]byte
+               type V [1]byte
+               m := make(map[T]V)
+               m[T{}] = V{1}
+               m[T{1}] = V{2}
+               if x, y := m[T{}][0], m[T{1}][0]; x != 1 || y != 2 {
+                       println(x, y)
+                       panic("bad map")
+               }
+       }
+       {
+               type T [1]byte
+               type V [1000]byte
+               m := make(map[T]V)
+               m[T{}] = V{1}
+               m[T{1}] = V{2}
+               if x, y := m[T{}][0], m[T{1}][0]; x != 1 || y != 2 {
+                       println(x, y)
+                       panic("bad map")
+               }
+       }
+       {
+               type T [1000]byte
+               type V [1000]byte
+               m := make(map[T]V)
+               m[T{}] = V{1}
+               m[T{1}] = V{2}
+               if x, y := m[T{}][0], m[T{1}][0]; x != 1 || y != 2 {
+                       println(x, y)
+                       panic("bad map")
+               }
+       }
+       {
+               type T [200]byte
+               type V [1]byte
+               m := make(map[T]V)
+               m[T{}] = V{1}
+               m[T{1}] = V{2}
+               if x, y := m[T{}][0], m[T{1}][0]; x != 1 || y != 2 {
+                       println(x, y)
+                       panic("bad map")
+               }
+       }
+       {
+               type T [1]byte
+               type V [200]byte
+               m := make(map[T]V)
+               m[T{}] = V{1}
+               m[T{1}] = V{2}
+               if x, y := m[T{}][0], m[T{1}][0]; x != 1 || y != 2 {
+                       println(x, y)
+                       panic("bad map")
+               }
+       }
+       {
+               type T [200]byte
+               type V [200]byte
+               m := make(map[T]V)
+               m[T{}] = V{1}
+               m[T{1}] = V{2}
+               if x, y := m[T{}][0], m[T{1}][0]; x != 1 || y != 2 {
+                       println(x, y)
+                       panic("bad map")
+               }
+       }
 }