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  }