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) {
|
} else if !errors.Is(err, testCase.Err) {
|
||||||
t.Errorf("test %d failed (expected error %q, actual error %q)", i, testCase.Err, err)
|
t.Errorf("test %d failed (expected error %q, actual error %q)", i, testCase.Err, err)
|
||||||
} else {
|
} 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 {
|
} else if err != nil {
|
||||||
t.Errorf("test %d failed (expected error nil, actual error %q)", i, err)
|
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 {
|
} 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)
|
t.Errorf("test %d failed (expected %v, actual %v)", i, testCase.Expected, actual)
|
||||||
} else {
|
} 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 {
|
if actual != testCase.Expected {
|
||||||
t.Errorf("test %d failed (expected %s, actual %s)", i, testCase.Expected, actual)
|
t.Errorf("test %d failed (expected %s, actual %s)", i, testCase.Expected, actual)
|
||||||
} else {
|
} 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 {
|
if actual != testCase.Expected {
|
||||||
t.Errorf("test %d failed (expected %d, actual %d)", i, testCase.Expected, actual)
|
t.Errorf("test %d failed (expected %d, actual %d)", i, testCase.Expected, actual)
|
||||||
} else {
|
} 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 {
|
if actual != testCase.Expected {
|
||||||
t.Errorf("test %d failed (expected %v, actual %v)", i, testCase.Expected, actual)
|
t.Errorf("test %d failed (expected %v, actual %v)", i, testCase.Expected, actual)
|
||||||
} else {
|
} 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