version_test.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. // Copyright (c) Tailscale Inc & AUTHORS
  2. // SPDX-License-Identifier: BSD-3-Clause
  3. package cmpver
  4. import "testing"
  5. func TestCompare(t *testing.T) {
  6. tests := []struct {
  7. name string
  8. v1, v2 string
  9. want int
  10. }{
  11. {
  12. name: "both empty",
  13. want: 0,
  14. },
  15. {
  16. name: "v1 empty",
  17. v2: "1.2.3",
  18. want: -1,
  19. },
  20. {
  21. name: "v2 empty",
  22. v1: "1.2.3",
  23. want: 1,
  24. },
  25. {
  26. name: "semver major",
  27. v1: "2.0.0",
  28. v2: "1.9.9",
  29. want: 1,
  30. },
  31. {
  32. name: "semver major",
  33. v1: "2.0.0",
  34. v2: "1.9.9",
  35. want: 1,
  36. },
  37. {
  38. name: "semver minor",
  39. v1: "1.9.0",
  40. v2: "1.8.9",
  41. want: 1,
  42. },
  43. {
  44. name: "semver patch",
  45. v1: "1.9.9",
  46. v2: "1.9.8",
  47. want: 1,
  48. },
  49. {
  50. name: "semver equal",
  51. v1: "1.9.8",
  52. v2: "1.9.8",
  53. want: 0,
  54. },
  55. {
  56. name: "tailscale major",
  57. v1: "1.0-0",
  58. v2: "0.97-105",
  59. want: 1,
  60. },
  61. {
  62. name: "tailscale minor",
  63. v1: "0.98-0",
  64. v2: "0.97-105",
  65. want: 1,
  66. },
  67. {
  68. name: "tailscale patch",
  69. v1: "0.97-120",
  70. v2: "0.97-105",
  71. want: 1,
  72. },
  73. {
  74. name: "tailscale equal",
  75. v1: "0.97-105",
  76. v2: "0.97-105",
  77. want: 0,
  78. },
  79. {
  80. name: "tailscale weird extra field",
  81. v1: "0.96.1-0", // more fields == larger
  82. v2: "0.96-105",
  83. want: 1,
  84. },
  85. }
  86. for _, test := range tests {
  87. t.Run(test.name, func(t *testing.T) {
  88. got := Compare(test.v1, test.v2)
  89. if got != test.want {
  90. t.Errorf("Compare(%v, %v) = %v, want %v", test.v1, test.v2, got, test.want)
  91. }
  92. // Reversing the comparison should reverse the outcome.
  93. got2 := Compare(test.v2, test.v1)
  94. if got2 != -test.want {
  95. t.Errorf("Compare(%v, %v) = %v, want %v", test.v2, test.v1, got2, -test.want)
  96. }
  97. })
  98. }
  99. }