You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
164 lines
3.0 KiB
164 lines
3.0 KiB
package tree
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func TestSplit(t *testing.T) {
|
|
type args struct {
|
|
code string
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
args args
|
|
wantRes []string
|
|
}{
|
|
{
|
|
name: "test1",
|
|
args: args{
|
|
code: "A00001B00001C00001",
|
|
},
|
|
wantRes: []string{"A00001B00001C00001", "A00001B00001", "A00001"},
|
|
},
|
|
{
|
|
name: "test2",
|
|
args: args{
|
|
code: "A001",
|
|
},
|
|
wantRes: []string{"A001"},
|
|
},
|
|
{
|
|
name: "test3",
|
|
args: args{
|
|
code: "",
|
|
},
|
|
wantRes: []string{},
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if gotRes := Split(tt.args.code); !reflect.DeepEqual(gotRes, tt.wantRes) {
|
|
t.Errorf("Split() = %v, want %v", gotRes, tt.wantRes)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestTree(t *testing.T) {
|
|
type args[T any] struct {
|
|
data []T
|
|
parent string
|
|
length int
|
|
pathFunc func(d T) string
|
|
}
|
|
type testCase[T any] struct {
|
|
name string
|
|
args args[T]
|
|
wantRes []Node[T]
|
|
}
|
|
|
|
type D struct {
|
|
Code string
|
|
Name string
|
|
}
|
|
|
|
tests := []testCase[D]{
|
|
{
|
|
name: "",
|
|
args: args[D]{
|
|
data: []D{{Code: "A00001", Name: "A00001"}, {Code: "A00001B00001", Name: "A00001B00001"}, {Code: "A00001B00001C00001", Name: "A00001B00001C00001"}},
|
|
parent: "",
|
|
length: 6,
|
|
pathFunc: func(d D) string {
|
|
return d.Code
|
|
},
|
|
},
|
|
wantRes: []Node[D]{
|
|
{
|
|
Data: D{Code: "A00001", Name: "A00001"},
|
|
Children: []Node[D]{
|
|
{
|
|
Data: D{Code: "A00001B00001", Name: "A00001B00001"},
|
|
Children: []Node[D]{
|
|
{
|
|
Data: D{Code: "A00001B00001C00001", Name: "A00001B00001C00001"},
|
|
Children: nil,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name: "",
|
|
args: args[D]{
|
|
data: []D{{Code: "A00001B00001", Name: "A00001B00001"}, {Code: "A00001B00001C00001", Name: "A00001B00001C00001"}},
|
|
parent: "A00001",
|
|
length: 6,
|
|
pathFunc: func(d D) string {
|
|
return d.Code
|
|
},
|
|
},
|
|
wantRes: []Node[D]{
|
|
{
|
|
Data: D{Code: "A00001B00001", Name: "A00001B00001"},
|
|
Children: []Node[D]{
|
|
{
|
|
Data: D{Code: "A00001B00001C00001", Name: "A00001B00001C00001"},
|
|
Children: nil,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if gotRes := Tree(tt.args.data, tt.args.parent, tt.args.length, tt.args.pathFunc); !reflect.DeepEqual(gotRes, tt.wantRes) {
|
|
t.Errorf("Tree() = %v, want %v", gotRes, tt.wantRes)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestLength(t *testing.T) {
|
|
type args struct {
|
|
code string
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
args args
|
|
want int
|
|
}{
|
|
{
|
|
name: "test1",
|
|
args: args{
|
|
code: "A00001B00001C00001",
|
|
},
|
|
want: 6,
|
|
},
|
|
{
|
|
name: "test2",
|
|
args: args{
|
|
code: "C0001D0001E00001",
|
|
},
|
|
want: 5,
|
|
},
|
|
{
|
|
name: "test3",
|
|
args: args{
|
|
code: "A0001",
|
|
},
|
|
want: 5,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if got := Length(tt.args.code); got != tt.want {
|
|
t.Errorf("length() = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|