1
0
mirror of https://github.com/rancher/os.git synced 2025-09-01 14:48:55 +00:00

slices union and intersection

useful for merging and splitting configs
This commit is contained in:
Ivan Mikushin
2015-08-21 13:24:55 +05:00
parent 974206235d
commit 4d6530be73
3 changed files with 146 additions and 56 deletions

View File

@@ -6,6 +6,90 @@ import (
"testing"
)
func TestNilMap(t *testing.T) {
assert := require.New(t)
var m map[string]interface{} = nil
assert.True(m == nil)
}
func TestMapCopy(t *testing.T) {
assert := require.New(t)
m0 := map[interface{}]interface{}{"a": 1, "b": map[interface{}]interface{}{"c": 3}, "d": "4"}
m1 := MapCopy(m0)
assert.Equal(m0, m1)
delete(m0, "a")
assert.Equal(len(m1), len(m0)+1)
b0 := m0["b"].(map[interface{}]interface{})
b1 := m1["b"].(map[interface{}]interface{})
b1["e"] = "queer"
assert.Equal(len(b1), len(b0)+1)
}
func TestSliceCopy(t *testing.T) {
assert := require.New(t)
m0 := []interface{}{1, map[interface{}]interface{}{"c": 3}, "4"}
m1 := SliceCopy(m0)
assert.Equal(m0, m1)
m0 = m0[1:]
assert.Equal(len(m1), len(m0)+1)
b0 := m0[0].(map[interface{}]interface{})
b1 := m1[1].(map[interface{}]interface{})
b1["e"] = "queer"
assert.Equal(len(b1), len(b0)+1)
}
func TestMapsIntersection(t *testing.T) {
assert := require.New(t)
m0 := map[interface{}]interface{}{
"a": 1,
"b": map[interface{}]interface{}{"c": 3},
"d": "4",
"e": []interface{}{1, 2, 3},
}
m1 := MapCopy(m0)
delete(m0, "a")
b1 := m1["b"].(map[interface{}]interface{})
delete(b1, "c")
m1["e"] = []interface{}{2, 3, 4}
expected := map[interface{}]interface{}{"b": map[interface{}]interface{}{}, "d": "4", "e": []interface{}{2, 3}}
assert.Equal(expected, MapsIntersection(m0, m1, Equal))
}
func TestMapsUnion(t *testing.T) {
assert := require.New(t)
m0 := map[interface{}]interface{}{
"a": 1,
"b": map[interface{}]interface{}{"c": 3},
"d": "4",
"f": []interface{}{1, 2, 3},
}
m1 := MapCopy(m0)
m1["e"] = "added"
m1["d"] = "replaced"
m1["f"] = []interface{}{2, 3, 4}
delete(m0, "a")
b1 := m1["b"].(map[interface{}]interface{})
delete(b1, "c")
expected := map[interface{}]interface{}{
"a": 1,
"b": map[interface{}]interface{}{"c": 3},
"d": "replaced",
"e": "added",
"f": []interface{}{1, 2, 3, 4},
}
assert.Equal(expected, MapsUnion(m0, m1, Replace))
}
func TestLoadResourceSimple(t *testing.T) {
assert := require.New(t)