func TestStringKeyOMapInsertion(t *testing.T) { wordForWord := omap.NewCaseFoldedKeyed() for _, word := range []string{"one", "Two", "THREE", "four", "Five"} { wordForWord.Insert(word, word) } var words []string wordForWord.Do(func(_, value interface{}) { words = append(words, value.(string)) }) actual, expected := strings.Join(words, ""), "FivefouroneTHREETwo" if actual != expected { t.Errorf("%q != %q", actual, expected) } }
func main() { words := []string{"Puttering", "About", "in", "a", "Small", "Land"} wordForWord := omap.NewCaseFoldedKeyed() fmt.Println(wordForWord.Len(), "words") for _, word := range words { wordForWord.Insert(word, strings.ToUpper(word)) } wordForWord.Do(func(key, value interface{}) { fmt.Printf("%v→%v\n", key, value) }) fmt.Println("length before deleting:", wordForWord.Len()) _, containsSmall := wordForWord.Find("small") fmt.Println("contains small:", containsSmall) for _, key := range []string{"big", "medium", "small"} { fmt.Printf("%t ", wordForWord.Delete(key)) } _, containsSmall = wordForWord.Find("small") fmt.Println("\nlength after deleting: ", wordForWord.Len()) fmt.Println("contains small:", containsSmall) showMap(wordForWord, words, "words", 20) searchMap(wordForWord, "small", "big") fmt.Println() distanceForPoint := omap.New(func(a, b interface{}) bool { α, β := a.(*Point), b.(*Point) if α.X != β.X { return α.X < β.X } return α.Y < β.Y }) fmt.Println(distanceForPoint.Len(), "points") points := []*Point{{3, 1}, {1, 2}, {2, 3}, {1, 3}, {3, 2}, {2, 1}, {2, 2}} for _, point := range points { distance := math.Hypot(float64(point.X), float64(point.Y)) distanceForPoint.Insert(point, distance) } distanceForPoint.Do(func(key, value interface{}) { fmt.Printf("%v → %.2v\n", key, value) }) // No &distanceForPoint because it is already a pointer showMap(distanceForPoint, points, "points", 5) searchMap(distanceForPoint, &Point{1, 1}, &Point{3, 2}) }