mirror of
https://github.com/duke-git/lancet.git
synced 2025-09-27 03:45:58 +08:00

The FilterByValue function is a method defined on the HashMap type. It generates a new HashMap containing only the elements that satisfy a specified condition, as determined by a predicate function applied to each element's value. Note: Will add later doc
129 lines
2.2 KiB
Go
129 lines
2.2 KiB
Go
package datastructure
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/duke-git/lancet/v2/internal"
|
|
)
|
|
|
|
func TestHashMap_PutAndGet(t *testing.T) {
|
|
assert := internal.NewAssert(t, "TestHashMap_PutAndGet")
|
|
|
|
hm := NewHashMap()
|
|
|
|
hm.Put("abc", 3)
|
|
assert.Equal(3, hm.Get("abc"))
|
|
assert.IsNil(hm.Get("abcd"))
|
|
|
|
hm.Put("abc", 4)
|
|
assert.Equal(4, hm.Get("abc"))
|
|
}
|
|
|
|
func TestHashMap_Resize(t *testing.T) {
|
|
assert := internal.NewAssert(t, "TestHashMap_Resize")
|
|
|
|
hm := NewHashMapWithCapacity(3, 3)
|
|
|
|
for i := 0; i < 20; i++ {
|
|
hm.Put(i, 10)
|
|
}
|
|
|
|
assert.Equal(10, hm.Get(5))
|
|
}
|
|
|
|
func TestHashMap_Delete(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
assert := internal.NewAssert(t, "TestHashMap_Delete")
|
|
|
|
hm := NewHashMap()
|
|
|
|
hm.Put("abc", 3)
|
|
assert.Equal(3, hm.Get("abc"))
|
|
|
|
hm.Delete("abc")
|
|
assert.IsNil(hm.Get("abc"))
|
|
}
|
|
|
|
func TestHashMap_Contains(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
assert := internal.NewAssert(t, "TestHashMap_Contains")
|
|
|
|
hm := NewHashMap()
|
|
assert.Equal(false, hm.Contains("abc"))
|
|
|
|
hm.Put("abc", 3)
|
|
assert.Equal(true, hm.Contains("abc"))
|
|
}
|
|
|
|
func TestHashMap_KeysValues(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
assert := internal.NewAssert(t, "TestHashMap_KeysValues")
|
|
|
|
hm := NewHashMap()
|
|
|
|
hm.Put("a", 1)
|
|
hm.Put("b", 2)
|
|
hm.Put("c", 3)
|
|
|
|
keys := hm.Keys()
|
|
values := hm.Values()
|
|
|
|
assert.Equal(3, len(values))
|
|
assert.Equal(3, len(keys))
|
|
}
|
|
|
|
func TestHashMap_Keys(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
assert := internal.NewAssert(t, "TestHashMap_Keys")
|
|
|
|
hm := NewHashMap()
|
|
|
|
hm.Put("a", 1)
|
|
hm.Put("b", 2)
|
|
hm.Put("c", 3)
|
|
|
|
keys := hm.Keys()
|
|
|
|
assert.Equal(3, len(keys))
|
|
}
|
|
|
|
func TestHashMap_GetOrDefault(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
assert := internal.NewAssert(t, "TestHashMap_GetOrDefault")
|
|
|
|
hm := NewHashMap()
|
|
|
|
hm.Put("a", 1)
|
|
hm.Put("b", 2)
|
|
hm.Put("c", 3)
|
|
|
|
assert.Equal(1, hm.GetOrDefault("a", 5))
|
|
assert.Equal(5, hm.GetOrDefault("d", 5))
|
|
}
|
|
|
|
func TestHashMap_FilterByValue(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
assert := internal.NewAssert(t, "TestHashMap_FilterByValue")
|
|
|
|
hm := NewHashMap()
|
|
|
|
hm.Put("a", 1)
|
|
hm.Put("b", 2)
|
|
hm.Put("c", 3)
|
|
hm.Put("d", 4)
|
|
hm.Put("e", 5)
|
|
hm.Put("f", 6)
|
|
|
|
filteredHM := hm.FilterByValue(func(value any) bool {
|
|
return value.(int) == 1 || value.(int) == 3
|
|
})
|
|
|
|
assert.Equal(uint64(2), filteredHM.Size())
|
|
}
|