add version.List
This commit is contained in:
@@ -0,0 +1,19 @@
|
||||
package version
|
||||
|
||||
// List is a slice of versions that implements sort.Interface.
|
||||
type List []*Version
|
||||
|
||||
func (list List) Len() int {
|
||||
return len(list)
|
||||
}
|
||||
|
||||
func (list List) Less(i, j int) bool {
|
||||
return list[i].Less(list[j])
|
||||
}
|
||||
|
||||
func (list List) Swap(i, j int) {
|
||||
a := list[i]
|
||||
b := list[j]
|
||||
list[i] = b
|
||||
list[j] = a
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package version
|
||||
|
||||
import (
|
||||
"sort"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestListSort(t *testing.T) {
|
||||
type TestCase struct {
|
||||
Input List
|
||||
Expected List
|
||||
}
|
||||
|
||||
testCases := []TestCase{
|
||||
{
|
||||
Input: List{MustParse("1.1.1"), MustParse("1.0.1"), MustParse("1.1.0"), MustParse("1.0.0")},
|
||||
Expected: List{MustParse("1.0.0"), MustParse("1.0.1"), MustParse("1.1.0"), MustParse("1.1.1")},
|
||||
},
|
||||
{
|
||||
Input: List{MustParse("4.0.0"), MustParse("3.0.0"), MustParse("2.0.0"), MustParse("1.0.0")},
|
||||
Expected: List{MustParse("1.0.0"), MustParse("2.0.0"), MustParse("3.0.0"), MustParse("4.0.0")},
|
||||
},
|
||||
{
|
||||
Input: List{MustParse("2.0.4"), MustParse("1.2.4"), MustParse("1.2.3"), MustParse("1.3.1")},
|
||||
Expected: List{MustParse("1.2.3"), MustParse("1.2.4"), MustParse("1.3.1"), MustParse("2.0.4")},
|
||||
},
|
||||
}
|
||||
|
||||
for i, testCase := range testCases {
|
||||
actual := List{}
|
||||
actual = append(actual, testCase.Input...)
|
||||
|
||||
sort.Stable(actual)
|
||||
|
||||
ok := true
|
||||
for j, v := range actual {
|
||||
expected := testCase.Expected[j]
|
||||
cmp := v.Compare(expected)
|
||||
if cmp != 0 {
|
||||
ok = false
|
||||
t.Errorf("test %d failed at position %d (expected %s, got %s)", i, j, expected, actual)
|
||||
}
|
||||
}
|
||||
|
||||
if ok {
|
||||
t.Logf("test %d passed", i)
|
||||
}
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -39,14 +39,14 @@ func TestVersion_Parse(t *testing.T) {
|
||||
} else if !errors.Is(err, testCase.Err) {
|
||||
t.Errorf("test %d failed (expected error %q, actual error %q)", i, testCase.Err, err)
|
||||
} else {
|
||||
t.Logf("test %d succeeded with error %q for %q\n", i, testCase.Err, testCase.Input)
|
||||
t.Logf("test %d passed with error %q for %q\n", i, testCase.Err, testCase.Input)
|
||||
}
|
||||
} else if err != nil {
|
||||
t.Errorf("test %d failed (expected error nil, actual error %q)", i, err)
|
||||
} else if actual.Major != testCase.Expected.Major || actual.Minor != testCase.Expected.Minor || actual.Patch != testCase.Expected.Patch || actual.Text != testCase.Expected.Text {
|
||||
t.Errorf("test %d failed (expected %v, actual %v)", i, testCase.Expected, actual)
|
||||
} else {
|
||||
t.Logf("test %d succeeded with %v\n", i, actual)
|
||||
t.Logf("test %d passed with %v\n", i, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -29,7 +29,7 @@ func TestVersion_String(t *testing.T) {
|
||||
if actual != testCase.Expected {
|
||||
t.Errorf("test %d failed (expected %s, actual %s)", i, testCase.Expected, actual)
|
||||
} else {
|
||||
t.Logf("test %d succeeded with %s\n", i, actual)
|
||||
t.Logf("test %d passed with %s\n", i, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -62,7 +62,7 @@ func TestVersion_Compare(t *testing.T) {
|
||||
if actual != testCase.Expected {
|
||||
t.Errorf("test %d failed (expected %d, actual %d)", i, testCase.Expected, actual)
|
||||
} else {
|
||||
t.Logf("test %d succeeded with %d", i, actual)
|
||||
t.Logf("test %d passed with %d", i, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -95,7 +95,7 @@ func TestVersion_Less(t *testing.T) {
|
||||
if actual != testCase.Expected {
|
||||
t.Errorf("test %d failed (expected %v, actual %v)", i, testCase.Expected, actual)
|
||||
} else {
|
||||
t.Logf("test %d succeeded with %v", i, actual)
|
||||
t.Logf("test %d passed with %v", i, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user