85 lines
2.3 KiB
Go
85 lines
2.3 KiB
Go
package values_test
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
|
|
"github.com/inkyblackness/hacked/editor/values"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestUnifier_Integers(t *testing.T) {
|
|
tt := []struct {
|
|
values []int
|
|
expectedValue interface{}
|
|
expectedUnified bool
|
|
}{
|
|
{[]int{1, 1, 1}, 1, true},
|
|
{[]int{}, nil, false},
|
|
{[]int{1, 2, 3}, nil, false},
|
|
}
|
|
|
|
for tn, tc := range tt {
|
|
u := values.NewUnifier()
|
|
for _, value := range tc.values {
|
|
u.Add(value)
|
|
}
|
|
resultValue := u.Unified()
|
|
resultUnified := u.IsUnique()
|
|
assert.Equal(t, tc.expectedValue, resultValue, fmt.Sprintf("Wrong result for test number %d", tn))
|
|
assert.Equal(t, tc.expectedUnified, resultUnified, fmt.Sprintf("Wrong unified for test number %d", tn))
|
|
}
|
|
}
|
|
|
|
func TestUnifier_Strings(t *testing.T) {
|
|
tt := []struct {
|
|
values []string
|
|
expectedValue interface{}
|
|
expectedUnified bool
|
|
}{
|
|
{[]string{"a", "a", "a"}, "a", true},
|
|
{[]string{}, nil, false},
|
|
{[]string{"a", "b", "c"}, nil, false},
|
|
}
|
|
|
|
for tn, tc := range tt {
|
|
u := values.NewUnifier()
|
|
for _, value := range tc.values {
|
|
u.Add(value)
|
|
}
|
|
resultValue := u.Unified()
|
|
resultUnified := u.IsUnique()
|
|
assert.Equal(t, tc.expectedValue, resultValue, fmt.Sprintf("Wrong result for test number %d", tn))
|
|
assert.Equal(t, tc.expectedUnified, resultUnified, fmt.Sprintf("Wrong unified for test number %d", tn))
|
|
}
|
|
}
|
|
|
|
func TestUnifier_Types(t *testing.T) {
|
|
type simpleType struct {
|
|
value int
|
|
text string
|
|
}
|
|
tt := []struct {
|
|
values []simpleType
|
|
expectedValue interface{}
|
|
expectedUnified bool
|
|
}{
|
|
{[]simpleType{{value: 1, text: "a"}, {value: 1, text: "a"}, {value: 1, text: "a"}}, simpleType{value: 1, text: "a"}, true},
|
|
{[]simpleType{}, nil, false},
|
|
{[]simpleType{{value: 1, text: "a"}, {value: 1, text: "a"}, {value: 2, text: "a"}}, nil, false},
|
|
{[]simpleType{{value: 1, text: "a"}, {value: 1, text: "a"}, {value: 1, text: "b"}}, nil, false},
|
|
}
|
|
|
|
for tn, tc := range tt {
|
|
u := values.NewUnifier()
|
|
for _, value := range tc.values {
|
|
u.Add(value)
|
|
}
|
|
resultValue := u.Unified()
|
|
resultUnified := u.IsUnique()
|
|
assert.Equal(t, tc.expectedValue, resultValue, fmt.Sprintf("Wrong result for test number %d", tn))
|
|
assert.Equal(t, tc.expectedUnified, resultUnified, fmt.Sprintf("Wrong unified for test number %d", tn))
|
|
}
|
|
}
|