diff --git a/sort.go b/sort.go new file mode 100644 index 0000000..b250f58 --- /dev/null +++ b/sort.go @@ -0,0 +1,24 @@ +package semver + +import ( + "sort" +) + +type Versions []Version + +func (s Versions) Len() int { + return len(s) +} + +func (s Versions) Swap(i, j int) { + s[i], s[j] = s[j], s[i] +} + +func (s Versions) Less(i, j int) bool { + return s[i].LT(s[j]) +} + +// Sort sorts a slice of versions +func Sort(versions []Version) { + sort.Sort(Versions(versions)) +} diff --git a/sort_test.go b/sort_test.go new file mode 100644 index 0000000..209a6ef --- /dev/null +++ b/sort_test.go @@ -0,0 +1,30 @@ +package semver + +import ( + "reflect" + "testing" +) + +func TestSort(t *testing.T) { + v100, _ := New("1.0.0") + v010, _ := New("0.1.0") + v001, _ := New("0.0.1") + versions := []Version{v010, v100, v001} + Sort(versions) + + correct := []Version{v001, v010, v100} + if !reflect.DeepEqual(versions, correct) { + t.Fatalf("Sort returned wrong order: %s", versions) + } +} + +func BenchmarkSort(b *testing.B) { + v100, _ := New("1.0.0") + v010, _ := New("0.1.0") + v001, _ := New("0.0.1") + b.ReportAllocs() + b.ResetTimer() + for n := 0; n < b.N; n++ { + Sort([]Version{v010, v100, v001}) + } +}