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  }