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}})
|
|||
|
|
}
|
|||
|
|
}
|