github.com/anishathalye/periscope@v0.3.5/internal/par/map_test.go (about) 1 package par 2 3 import ( 4 "fmt" 5 "reflect" 6 "sort" 7 "testing" 8 ) 9 10 func TestMapMapBasic(t *testing.T) { 11 m := map[int]string{ 12 1: "hello", 13 3: "map", 14 5: "skip", 15 } 16 c := Map(m, func(k, v interface{}, emit func(x interface{})) { 17 if v.(string) == "skip" { 18 return 19 } 20 emit(fmt.Sprintf("%d-%d", k.(int), len(v.(string)))) 21 }) 22 var got []string 23 for v := range c { 24 got = append(got, v.(string)) 25 } 26 sort.Strings(got) 27 expected := []string{"1-5", "3-3"} 28 if !reflect.DeepEqual(got, expected) { 29 t.Fatalf("expected %v, got %v", expected, got) 30 } 31 } 32 33 func TestMapMapMultipleEmit(t *testing.T) { 34 m := map[string]string{ 35 "lorem": "ipsum", 36 "dolor": "sit", 37 "amet": "consectetur", 38 "adipiscing": "elit", 39 } 40 mapper := func(k, v interface{}, emit func(x interface{})) { 41 emit(len(k.(string))) 42 emit(len(v.(string))) 43 } 44 var got []int 45 for v := range MapN(m, 4, mapper) { 46 got = append(got, v.(int)) 47 } 48 sort.Ints(got) 49 expected := []int{3, 4, 4, 5, 5, 5, 10, 11} 50 if !reflect.DeepEqual(got, expected) { 51 t.Fatalf("expected %v, got %v", expected, got) 52 } 53 } 54 55 func TestSliceMapBasic(t *testing.T) { 56 s := []int{3, 19, 256, 10} 57 mapper := func(i, v interface{}, emit func(x interface{})) { 58 emit(fmt.Sprintf("%d", i.(int))) 59 emit(fmt.Sprintf("0x%x", v.(int))) 60 } 61 var got []string 62 for v := range Map(s, mapper) { 63 got = append(got, v.(string)) 64 } 65 sort.Strings(got) 66 expected := []string{"0", "0x100", "0x13", "0x3", "0xa", "1", "2", "3"} 67 if !reflect.DeepEqual(got, expected) { 68 t.Fatalf("expected %v, got %v", expected, got) 69 } 70 71 } 72 73 func TestMapChanBasic(t *testing.T) { 74 c := make(chan string) 75 go func() { 76 c <- "the" 77 c <- "quick" 78 c <- "brown" 79 c <- "fox" 80 close(c) 81 }() 82 mapper := func(i, v interface{}, emit func(x interface{})) { 83 emit(i.(int) + len(v.(string))) 84 } 85 var got []int 86 for v := range Map(c, mapper) { 87 got = append(got, v.(int)) 88 } 89 sort.Ints(got) 90 expected := []int{3, 6, 6, 7} 91 if !reflect.DeepEqual(got, expected) { 92 t.Fatalf("expected %v, got %v", expected, got) 93 } 94 }