github.com/angenalZZZ/gofunc@v0.0.0-20210507121333-48ff1be3917b/f/arrays_test.go (about) 1 package f_test 2 3 import ( 4 "github.com/angenalZZZ/gofunc/f" 5 "testing" 6 ) 7 8 func TestEach(t *testing.T) { 9 t.Parallel() 10 acc := 0 11 data := []interface{}{1, 2, 3, 4, 5} 12 var fn f.Iterator = func(value interface{}, index int) { 13 acc = acc + value.(int) 14 } 15 f.Each(data, fn) 16 if acc != 15 { 17 t.Errorf("Expected Each(..) to be %v, got %v", 15, acc) 18 } 19 } 20 21 func ExampleEach() { 22 data := []interface{}{1, 2, 3, 4, 5} 23 var fn f.Iterator = func(value interface{}, index int) { 24 println(value.(int)) 25 } 26 f.Each(data, fn) 27 } 28 29 func TestMaps(t *testing.T) { 30 t.Parallel() 31 data := []interface{}{1, 2, 3, 4, 5} 32 var fn f.ResultIterator = func(value interface{}, index int) interface{} { 33 return value.(int) * 3 34 } 35 result := f.Maps(data, fn) 36 for i, d := range result { 37 if d != fn(data[i], i) { 38 t.Errorf("Expected Map(..) to be %v, got %v", fn(data[i], i), d) 39 } 40 } 41 } 42 43 func ExampleMaps() { 44 data := []interface{}{1, 2, 3, 4, 5} 45 var fn f.ResultIterator = func(value interface{}, index int) interface{} { 46 return value.(int) * 3 47 } 48 _ = f.Maps(data, fn) // result = []interface{}{1, 6, 9, 12, 15} 49 } 50 51 func TestFind(t *testing.T) { 52 t.Parallel() 53 findElement := 96 54 data := []interface{}{1, 2, 3, 4, findElement, 5} 55 var fn1 f.ConditionIterator = func(value interface{}, index int) bool { 56 return value.(int) == findElement 57 } 58 var fn2 f.ConditionIterator = func(value interface{}, index int) bool { 59 value, _ = value.(string) 60 return value == "govalidator" 61 } 62 val1 := f.Find(data, fn1) 63 val2 := f.Find(data, fn2) 64 if val1 != findElement { 65 t.Errorf("Expected Find(..) to be %v, got %v", findElement, val1) 66 } 67 if val2 != nil { 68 t.Errorf("Expected Find(..) to be %v, got %v", nil, val2) 69 } 70 } 71 72 func TestFilter(t *testing.T) { 73 t.Parallel() 74 data := []interface{}{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} 75 answer := []interface{}{2, 4, 6, 8, 10} 76 var fn f.ConditionIterator = func(value interface{}, index int) bool { 77 return value.(int)%2 == 0 78 } 79 result := f.Filter(data, fn) 80 for i := range result { 81 if result[i] != answer[i] { 82 t.Errorf("Expected Filter(..) to be %v, got %v", answer[i], result[i]) 83 } 84 } 85 } 86 87 func ExampleFilter() { 88 data := []interface{}{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} 89 var fn f.ConditionIterator = func(value interface{}, index int) bool { 90 return value.(int)%2 == 0 91 } 92 _ = f.Filter(data, fn) // result = []interface{}{2, 4, 6, 8, 10} 93 } 94 95 func TestCount(t *testing.T) { 96 t.Parallel() 97 data := []interface{}{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} 98 count := 5 99 var fn f.ConditionIterator = func(value interface{}, index int) bool { 100 return value.(int)%2 == 0 101 } 102 result := f.Count(data, fn) 103 if result != count { 104 t.Errorf("Expected Count(..) to be %v, got %v", count, result) 105 } 106 } 107 108 func ExampleCount() { 109 data := []interface{}{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} 110 var fn f.ConditionIterator = func(value interface{}, index int) bool { 111 return value.(int)%2 == 0 112 } 113 _ = f.Count(data, fn) // result = 5 114 }