64 lines
1.5 KiB
Go
64 lines
1.5 KiB
Go
package keyx
|
||
|
||
import (
|
||
"testing"
|
||
)
|
||
|
||
func TestGenerate(t *testing.T) {
|
||
type User struct {
|
||
ID int
|
||
Name string
|
||
}
|
||
type testCase struct {
|
||
Number int
|
||
Values interface{}
|
||
Key string
|
||
}
|
||
|
||
b1 := []byte("")
|
||
b2 := []byte("abc")
|
||
testCases := []testCase{
|
||
{1, []interface{}{1, 2, 3}, "123"},
|
||
{2, []interface{}{0, -1, 2, 3}, "0-123"},
|
||
{3, []interface{}{1.1, 2.12, 3.123}, "1.12.123.123"},
|
||
{4, []interface{}{1.1, 2.12, 3.123}, "1.12.123.123"},
|
||
{5, []interface{}{"a", "b", "c"}, "abc"},
|
||
{6, []interface{}{"a", "b", "c", 1, 2, 3}, "abc123"},
|
||
{7, []interface{}{true, true, false, false}, "truetruefalsefalse"},
|
||
{8, []interface{}{[]int{1, 2, 3}}, "123"},
|
||
{9, []interface{}{[...]int{1, 2, 3, 4}}, "1234"},
|
||
{10, []interface{}{struct {
|
||
Username string
|
||
Age int
|
||
}{}}, "Age0Username"},
|
||
{11, []interface{}{struct {
|
||
Username string
|
||
Age int
|
||
}{"John", 12}}, "Age12UsernameJohn"},
|
||
{12, []interface{}{User{
|
||
ID: 1,
|
||
Name: "John",
|
||
}}, "User:ID1NameJohn"},
|
||
// byte
|
||
{13, []interface{}{b1, b2}, "abc"},
|
||
// rune
|
||
{14, []interface{}{'a', 'b', 'c'}, "abc"},
|
||
{15, []map[string]string{{"k1": "v1", "k2": "v2"}}, "k1v1k2v2"},
|
||
}
|
||
for _, tc := range testCases {
|
||
key := Generate(tc.Values)
|
||
if key != tc.Key {
|
||
t.Errorf("%d: except:%s actual:%s", tc.Number, tc.Key, key)
|
||
}
|
||
}
|
||
}
|
||
|
||
func BenchmarkGenerate(b *testing.B) {
|
||
for i := 0; i < b.N; i++ {
|
||
Generate([]interface{}{struct {
|
||
Username string
|
||
Age int
|
||
}{"John", 12}})
|
||
}
|
||
}
|