reflect: add test for map[interface{}]T
Этот коммит содержится в:
		
							родитель
							
								
									7201b13085
								
							
						
					
					
						коммит
						360f6904f5
					
				
					 1 изменённых файлов: 59 добавлений и 0 удалений
				
			
		| 
						 | 
					@ -192,6 +192,65 @@ func TestTinyMap(t *testing.T) {
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// For an interface type, it returns the number of exported and unexported methods.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type counter interface {
 | 
				
			||||||
 | 
						count() int
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type count struct {
 | 
				
			||||||
 | 
						i int
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (c *count) count() int {
 | 
				
			||||||
 | 
						return c.i
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestMapInterfaceKeys(t *testing.T) {
 | 
				
			||||||
 | 
						m := make(map[interface{}]int)
 | 
				
			||||||
 | 
						for i := 0; i < 20; i++ {
 | 
				
			||||||
 | 
							c := &count{i}
 | 
				
			||||||
 | 
							m[c] = i
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for k, v := range m {
 | 
				
			||||||
 | 
							if got := m[k]; got != v {
 | 
				
			||||||
 | 
								t.Error("lookup failure got", got, "want", v)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						refm := ValueOf(m)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						keys := refm.MapKeys()
 | 
				
			||||||
 | 
						if len(keys) != 20 {
 | 
				
			||||||
 | 
							t.Error("failed to look up 20 keys")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						for _, k := range keys {
 | 
				
			||||||
 | 
							c := k.Interface().(*count)
 | 
				
			||||||
 | 
							e := refm.MapIndex(k)
 | 
				
			||||||
 | 
							if e.Interface().(int) != c.i {
 | 
				
			||||||
 | 
								t.Error("reflect lookup failure:", c.i)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						it := refm.MapRange()
 | 
				
			||||||
 | 
						var totalKeys int
 | 
				
			||||||
 | 
						for it.Next() {
 | 
				
			||||||
 | 
							totalKeys++
 | 
				
			||||||
 | 
							k := it.Key()
 | 
				
			||||||
 | 
							v := it.Value().Interface().(int)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							c := k.Interface().(*count)
 | 
				
			||||||
 | 
							if v != c.i || refm.MapIndex(k).Interface().(int) != c.i {
 | 
				
			||||||
 | 
								t.Error("reflect iter lookup failure:", c.i)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if totalKeys != 20 {
 | 
				
			||||||
 | 
							t.Errorf("failed to get 20 keys")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestMapInterfaceElem(t *testing.T) {
 | 
					func TestMapInterfaceElem(t *testing.T) {
 | 
				
			||||||
	m := make(map[string]interface{})
 | 
						m := make(map[string]interface{})
 | 
				
			||||||
	refm := ValueOf(m)
 | 
						refm := ValueOf(m)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Загрузка…
	
	Создание таблицы
		
		Сослаться в новой задаче