github.com/m4gshm/gollections@v0.0.10/collection/mutable/ordered/map_/test/map_test.go (about) 1 package test 2 3 import ( 4 "testing" 5 6 "github.com/m4gshm/gollections/c" 7 "github.com/m4gshm/gollections/collection/mutable/map_" 8 "github.com/m4gshm/gollections/collection/mutable/ordered" 9 omap "github.com/m4gshm/gollections/collection/mutable/ordered/map_" 10 "github.com/m4gshm/gollections/k" 11 "github.com/m4gshm/gollections/slice" 12 "github.com/stretchr/testify/assert" 13 ) 14 15 func Test_Map_Iterate(t *testing.T) { 16 ordered := omap.Of(k.V(1, "1"), k.V(1, "1"), k.V(2, "2"), k.V(4, "4"), k.V(3, "3"), k.V(1, "1")) 17 assert.Equal(t, 4, len(ordered.Map())) 18 19 expectedK := slice.Of(1, 2, 4, 3) 20 expectedV := slice.Of("1", "2", "4", "3") 21 22 keys := make([]int, 0) 23 values := make([]string, 0) 24 it := ordered.Iter() 25 for key, val, ok := it.Next(); ok; key, val, ok = it.Next() { 26 keys = append(keys, key) 27 values = append(values, val) 28 } 29 assert.Equal(t, expectedK, keys) 30 assert.Equal(t, expectedV, values) 31 32 assert.Equal(t, slice.Of(1, 2, 4, 3), ordered.Keys().Slice()) 33 assert.Equal(t, slice.Of("1", "2", "4", "3"), ordered.Values().Slice()) 34 } 35 36 func Test_Map_Add(t *testing.T) { 37 d := omap.New[int, string](4) 38 s := d.SetNew(1, "1") 39 assert.Equal(t, s, true) 40 d.Set(2, "2") 41 d.Set(4, "4") 42 d.Set(3, "3") 43 s = d.SetNew(1, "11") 44 assert.Equal(t, s, false) 45 46 assert.Equal(t, slice.Of(1, 2, 4, 3), d.Keys().Slice()) 47 assert.Equal(t, slice.Of("1", "2", "4", "3"), d.Values().Slice()) 48 } 49 50 func Test_Map_Nil(t *testing.T) { 51 var m *ordered.Map[string, string] 52 53 m.Set("a", "A") 54 assert.False(t, m.SetNew("b", "B")) 55 56 assert.False(t, m.Contains("b")) 57 58 m.SetMap(nil) 59 m.SetMap(map_.Of(k.V("d", "D"))) 60 61 out := m.Map() 62 assert.Equal(t, 0, len(out)) 63 64 e := m.IsEmpty() 65 assert.True(t, e) 66 67 head, _, _, ok := m.First() 68 assert.False(t, ok) 69 70 head = m.Head() 71 _, _, ok = head.Next() 72 assert.False(t, ok) 73 74 m.For(nil) 75 m.ForEach(nil) 76 m.Track(nil) 77 m.TrackEach(nil) 78 79 m.Reduce(nil) 80 m.Convert(nil).Track(nil) 81 m.ConvertKey(nil).Next() 82 m.ConvertKey(nil).Track(nil) 83 m.ConvertKey(nil).TrackEach(nil) 84 m.ConvertValue(nil).Next() 85 m.ConvertValue(nil).Track(nil) 86 m.ConvertValue(nil).TrackEach(nil) 87 m.Filter(nil).Convert(nil).Track(nil) 88 m.Filter(nil).Convert(nil).TrackEach(nil) 89 90 m.Keys().For(nil) 91 m.Keys().ForEach(nil) 92 m.Values().For(nil) 93 m.Values().ForEach(nil) 94 m.Values().Convert(nil).For(nil) 95 m.Values().Filter(nil).ForEach(nil) 96 97 } 98 99 func Test_Map_Zero(t *testing.T) { 100 var m ordered.Map[string, string] 101 102 m.Set("a", "A") 103 assert.True(t, m.SetNew("b", "B")) 104 assert.False(t, m.SetNew("b", "B")) 105 106 assert.True(t, m.Contains("b")) 107 108 m.SetMap(nil) 109 m.SetMap(map_.Of(k.V("d", "D"))) 110 111 out := m.Map() 112 assert.Equal(t, 3, len(out)) 113 114 e := m.IsEmpty() 115 assert.False(t, e) 116 117 head, k, v, ok := m.First() 118 assert.True(t, ok) 119 assert.Equal(t, "a", k) 120 assert.Equal(t, "A", v) 121 122 head = m.Head() 123 _, _, ok = head.Next() 124 assert.True(t, ok) 125 126 m.For(func(kv c.KV[string, string]) error { return nil }) 127 m.ForEach(func(kv c.KV[string, string]) {}) 128 m.Track(func(k, v string) error { return nil }) 129 m.TrackEach(func(k, v string) {}) 130 131 m.Reduce(func(k1, v1, k2, v2 string) (string, string) { return k1 + k2, v1 + v2 }) 132 m.Convert(func(k, v string) (string, string) { return k, v }).Track(func(position, element string) error { return nil }) 133 m.ConvertKey(func(s string) string { return s }).Next() 134 m.ConvertKey(func(s string) string { return s }).Track(func(position, element string) error { return nil }) 135 m.ConvertKey(func(s string) string { return s }).TrackEach(func(position, element string) {}) 136 m.ConvertValue(func(s string) string { return s }).Next() 137 m.ConvertValue(func(s string) string { return s }).Track(func(position, element string) error { return nil }) 138 m.ConvertValue(func(s string) string { return s }).TrackEach(func(position, element string) {}) 139 m.Filter(func(s1, s2 string) bool { return true }).Convert(func(s1, s2 string) (string, string) { return s1, s2 }).Track(func(position, element string) error { return nil }) 140 m.Filter(func(s1, s2 string) bool { return true }).Convert(func(s1, s2 string) (string, string) { return s1, s2 }).TrackEach(func(position, element string) {}) 141 142 m.Keys().For(func(element string) error { return nil }) 143 m.Keys().ForEach(func(element string) {}) 144 m.Keys().Convert(func(s string) string { return s }).Slice() 145 m.Keys().Convert(func(s string) string { return s }).For(func(element string) error { return nil }) 146 m.Keys().Filter(func(s string) bool { return true }).Slice() 147 m.Keys().Filter(func(s string) bool { return true }).ForEach(func(element string) {}) 148 149 m.Values().For(func(element string) error { return nil }) 150 m.Values().ForEach(func(element string) {}) 151 m.Values().Convert(func(s string) string { return s }).Slice() 152 m.Values().Convert(func(s string) string { return s }).For(func(element string) error { return nil }) 153 m.Values().Filter(func(s string) bool { return true }).Slice() 154 m.Values().Filter(func(s string) bool { return true }).ForEach(func(element string) {}) 155 } 156 157 func Test_Map_new(t *testing.T) { 158 var m = new(ordered.Map[string, string]) 159 160 m.Set("a", "A") 161 assert.True(t, m.SetNew("b", "B")) 162 assert.False(t, m.SetNew("b", "B")) 163 164 assert.True(t, m.Contains("b")) 165 166 m.SetMap(nil) 167 m.SetMap(map_.Of(k.V("d", "D"))) 168 169 out := m.Map() 170 assert.Equal(t, 3, len(out)) 171 172 e := m.IsEmpty() 173 assert.False(t, e) 174 175 head, k, v, ok := m.First() 176 assert.True(t, ok) 177 assert.Equal(t, "a", k) 178 assert.Equal(t, "A", v) 179 180 head = m.Head() 181 _, _, ok = head.Next() 182 assert.True(t, ok) 183 184 m.For(func(kv c.KV[string, string]) error { return nil }) 185 m.ForEach(func(kv c.KV[string, string]) {}) 186 m.Track(func(k, v string) error { return nil }) 187 m.TrackEach(func(k, v string) {}) 188 189 m.Reduce(func(k1, v1, k2, v2 string) (string, string) { return k1 + k2, v1 + v2 }) 190 m.Convert(func(k, v string) (string, string) { return k, v }).Track(func(position, element string) error { return nil }) 191 m.ConvertKey(func(s string) string { return s }).Next() 192 m.ConvertKey(func(s string) string { return s }).Track(func(position, element string) error { return nil }) 193 m.ConvertKey(func(s string) string { return s }).TrackEach(func(position, element string) {}) 194 m.ConvertValue(func(s string) string { return s }).Next() 195 m.ConvertValue(func(s string) string { return s }).Track(func(position, element string) error { return nil }) 196 m.ConvertValue(func(s string) string { return s }).TrackEach(func(position, element string) {}) 197 m.Filter(func(s1, s2 string) bool { return true }).Convert(func(s1, s2 string) (string, string) { return s1, s2 }).Track(func(position, element string) error { return nil }) 198 m.Filter(func(s1, s2 string) bool { return true }).Convert(func(s1, s2 string) (string, string) { return s1, s2 }).TrackEach(func(position, element string) {}) 199 200 m.Keys().For(func(element string) error { return nil }) 201 m.Keys().ForEach(func(element string) {}) 202 m.Keys().Convert(func(s string) string { return s }).Slice() 203 m.Keys().Convert(func(s string) string { return s }).For(func(element string) error { return nil }) 204 m.Keys().Filter(func(s string) bool { return true }).Slice() 205 m.Keys().Filter(func(s string) bool { return true }).ForEach(func(element string) {}) 206 207 m.Values().For(func(element string) error { return nil }) 208 m.Values().ForEach(func(element string) {}) 209 m.Values().Convert(func(s string) string { return s }).Slice() 210 m.Values().Convert(func(s string) string { return s }).For(func(element string) error { return nil }) 211 m.Values().Filter(func(s string) bool { return true }).Slice() 212 m.Values().Filter(func(s string) bool { return true }).ForEach(func(element string) {}) 213 }