list_test.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package version
  2. import (
  3. "sort"
  4. "testing"
  5. )
  6. func TestListSort(t *testing.T) {
  7. type TestCase struct {
  8. Input List
  9. Expected List
  10. }
  11. testCases := []TestCase{
  12. {
  13. Input: List{MustParse("1.1.1"), MustParse("1.0.1"), MustParse("1.1.0"), MustParse("1.0.0")},
  14. Expected: List{MustParse("1.0.0"), MustParse("1.0.1"), MustParse("1.1.0"), MustParse("1.1.1")},
  15. },
  16. {
  17. Input: List{MustParse("4.0.0"), MustParse("3.0.0"), MustParse("2.0.0"), MustParse("1.0.0")},
  18. Expected: List{MustParse("1.0.0"), MustParse("2.0.0"), MustParse("3.0.0"), MustParse("4.0.0")},
  19. },
  20. {
  21. Input: List{MustParse("2.0.4"), MustParse("1.2.4"), MustParse("1.2.3"), MustParse("1.3.1")},
  22. Expected: List{MustParse("1.2.3"), MustParse("1.2.4"), MustParse("1.3.1"), MustParse("2.0.4")},
  23. },
  24. }
  25. for i, testCase := range testCases {
  26. actual := List{}
  27. actual = append(actual, testCase.Input...)
  28. sort.Stable(actual)
  29. ok := true
  30. for j, v := range actual {
  31. expected := testCase.Expected[j]
  32. cmp := v.Compare(expected)
  33. if cmp != 0 {
  34. ok = false
  35. t.Errorf("test %d failed at position %d (expected %s, got %s)", i, j, expected, actual)
  36. }
  37. }
  38. if ok {
  39. t.Logf("test %d passed", i)
  40. }
  41. }
  42. }