テストのことを忘れてた。とりあえずクイックソートのコードを書いてみた。
func Sort(in []int) []int {
if len(in) == 0 || len(in) == 1 {
return in
}
m := in[0]
lt := make([]int, 0)
gt := make([]int, 0)
for _, v :=range in[1:] {
if v < m {
lt = append(lt, v)
} else {
gt = append(gt, v)
}
}
lt = Sort(lt)
gt = Sort(gt)
lt = append(lt, m)
lt = append(lt, gt...)
return lt
}
テストコード
import (
"testing"
"reflect"
)
func TestSort(t *testing.T) {
expect := []int{1,2,3,4,5}
actual := Sort([]int{5,4,3,2,1})
if reflect.DeepEqual(actual, expect) {
t.Log("Success")
} else {
t.Errorf("Failed: expect %s but actual is %s", expect, actual)
}
}
これだといろんなデータパターンのテストをするのに大変なので、以下の記事を参考にSpockのあれっぽくしてみる。
import (
"testing"
"reflect"
)
type sortTest struct {
in []int
out []int
}
var sortTests = []sortTest{
{[]int{3, 2, 1}, []int{1, 2, 3}},
{[]int{3, 3, 1}, []int{1, 3, 3}},
{[]int{2, 1}, []int{1, 2}},
{[]int{1, 2}, []int{1, 2}},
{[]int{1}, []int{1}},
{[]int{}, []int{}},
}
func TestSort(t *testing.T) {
for _, v := range sortTests {
expect := v.out
actual := Sort(v.in)
if reflect.DeepEqual(actual, expect) {
t.Log("Success")
} else {
t.Errorf("Failed: expect %s but actual is %s", expect, actual)
}
}
}