2015-04-29 04:30:13 +08:00
|
|
|
package cc
|
|
|
|
|
|
|
|
import (
|
|
|
|
"reflect"
|
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
|
|
|
var lastUniqueElementsTestCases = []struct {
|
|
|
|
in []string
|
|
|
|
out []string
|
|
|
|
}{
|
|
|
|
{
|
|
|
|
in: []string{"a"},
|
|
|
|
out: []string{"a"},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
in: []string{"a", "b"},
|
|
|
|
out: []string{"a", "b"},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
in: []string{"a", "a"},
|
|
|
|
out: []string{"a"},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
in: []string{"a", "b", "a"},
|
|
|
|
out: []string{"b", "a"},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
in: []string{"b", "a", "a"},
|
|
|
|
out: []string{"b", "a"},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
in: []string{"a", "a", "b"},
|
|
|
|
out: []string{"a", "b"},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
in: []string{"a", "b", "a", "b"},
|
|
|
|
out: []string{"a", "b"},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
in: []string{"liblog", "libdl", "libc++", "libdl", "libc", "libm"},
|
|
|
|
out: []string{"liblog", "libc++", "libdl", "libc", "libm"},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestLastUniqueElements(t *testing.T) {
|
|
|
|
for _, testCase := range lastUniqueElementsTestCases {
|
|
|
|
out := lastUniqueElements(testCase.in)
|
|
|
|
if !reflect.DeepEqual(out, testCase.out) {
|
|
|
|
t.Errorf("incorrect output:")
|
|
|
|
t.Errorf(" input: %#v", testCase.in)
|
|
|
|
t.Errorf(" expected: %#v", testCase.out)
|
|
|
|
t.Errorf(" got: %#v", out)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2015-05-01 07:36:18 +08:00
|
|
|
|
|
|
|
var (
|
|
|
|
str11 = "01234567891"
|
|
|
|
str10 = str11[:10]
|
|
|
|
str9 = str11[:9]
|
|
|
|
str5 = str11[:5]
|
|
|
|
str4 = str11[:4]
|
|
|
|
)
|
|
|
|
|
|
|
|
var splitListForSizeTestCases = []struct {
|
|
|
|
in []string
|
|
|
|
out [][]string
|
|
|
|
size int
|
|
|
|
}{
|
|
|
|
{
|
|
|
|
in: []string{str10},
|
|
|
|
out: [][]string{{str10}},
|
|
|
|
size: 10,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
in: []string{str9},
|
|
|
|
out: [][]string{{str9}},
|
|
|
|
size: 10,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
in: []string{str5},
|
|
|
|
out: [][]string{{str5}},
|
|
|
|
size: 10,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
in: []string{str11},
|
|
|
|
out: nil,
|
|
|
|
size: 10,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
in: []string{str10, str10},
|
|
|
|
out: [][]string{{str10}, {str10}},
|
|
|
|
size: 10,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
in: []string{str9, str10},
|
|
|
|
out: [][]string{{str9}, {str10}},
|
|
|
|
size: 10,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
in: []string{str10, str9},
|
|
|
|
out: [][]string{{str10}, {str9}},
|
|
|
|
size: 10,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
in: []string{str5, str4},
|
|
|
|
out: [][]string{{str5, str4}},
|
|
|
|
size: 10,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
in: []string{str5, str4, str5},
|
|
|
|
out: [][]string{{str5, str4}, {str5}},
|
|
|
|
size: 10,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
in: []string{str5, str4, str5, str4},
|
|
|
|
out: [][]string{{str5, str4}, {str5, str4}},
|
|
|
|
size: 10,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
in: []string{str5, str4, str5, str5},
|
|
|
|
out: [][]string{{str5, str4}, {str5}, {str5}},
|
|
|
|
size: 10,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
in: []string{str5, str5, str5, str4},
|
|
|
|
out: [][]string{{str5}, {str5}, {str5, str4}},
|
|
|
|
size: 10,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
in: []string{str9, str11},
|
|
|
|
out: nil,
|
|
|
|
size: 10,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
in: []string{str11, str9},
|
|
|
|
out: nil,
|
|
|
|
size: 10,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestSplitListForSize(t *testing.T) {
|
|
|
|
for _, testCase := range splitListForSizeTestCases {
|
|
|
|
out, _ := splitListForSize(testCase.in, testCase.size)
|
|
|
|
if !reflect.DeepEqual(out, testCase.out) {
|
|
|
|
t.Errorf("incorrect output:")
|
|
|
|
t.Errorf(" input: %#v", testCase.in)
|
|
|
|
t.Errorf(" size: %d", testCase.size)
|
|
|
|
t.Errorf(" expected: %#v", testCase.out)
|
|
|
|
t.Errorf(" got: %#v", out)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|