100_Dpkg_Version.t 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. # -*- mode: cperl;-*-
  2. use Test::More;
  3. use Dpkg::ErrorHandling;
  4. use strict;
  5. use warnings;
  6. report_options(quiet_warnings => 1);
  7. my @tests = <DATA>;
  8. my @ops = ("<", "<<", "lt",
  9. "<=", "le",
  10. "=", "eq",
  11. ">=", "ge",
  12. ">", ">>", "gt");
  13. plan tests => scalar(@tests) * (2 * scalar(@ops) + 1) + 1;
  14. sub dpkg_vercmp {
  15. my ($a, $cmp, $b) = @_;
  16. return system('dpkg', '--compare-versions', $a, $cmp, $b) == 0;
  17. }
  18. use_ok('Dpkg::Version', qw(vercmp compare_versions));
  19. my $truth = {
  20. "-1" => {
  21. "<<" => 1, "lt" => 1,
  22. "<=" => 1, "le" => 1, "<" => 1,
  23. "=" => 0, "eq" => 0,
  24. ">=" => 0, "ge" => 0, ">" => 0,
  25. ">>" => 0, "gt" => 0,
  26. },
  27. "0" => {
  28. "<<" => 0, "lt" => 0,
  29. "<=" => 1, "le" => 1, "<" => 1,
  30. "=" => 1, "eq" => 1,
  31. ">=" => 1, "ge" => 1, ">" => 1,
  32. ">>" => 0, "gt" => 0,
  33. },
  34. "1" => {
  35. "<<" => 0, "lt" => 0,
  36. "<=" => 0, "le" => 0, "<" => 0,
  37. "=" => 0, "eq" => 0,
  38. ">=" => 1, "ge" => 1, ">" => 1,
  39. ">>" => 1, "gt" => 1,
  40. },
  41. };
  42. foreach my $case (@tests) {
  43. my ($a, $b, $res) = split " ", $case;
  44. is(vercmp($a, $b), $res, "$a cmp $b => $res");
  45. foreach my $op (@ops) {
  46. if ($truth->{$res}{$op}) {
  47. ok(compare_versions($a, $op, $b), "$a $op $b => true");
  48. ok(dpkg_vercmp($a, $op, $b), "dpkg --compare-versions $a $op $b => true");
  49. } else {
  50. ok(!compare_versions($a, $op, $b), "$a $op $b => false");
  51. ok(!dpkg_vercmp($a, $op, $b), "dpkg --compare-versions $a $op $b => false");
  52. }
  53. }
  54. }
  55. __DATA__
  56. 1.0-1 2.0-2 -1
  57. 2.2~rc-4 2.2-1 -1
  58. 2.2-1 2.2~rc-4 1
  59. 1.0000-1 1.0-1 0
  60. 1 0:1 0
  61. 2:2.5 1:7.5 1
  62. 1:foo foo 1
  63. 0:foo foo 0
  64. foo foo 0
  65. foo- foo 0
  66. foo fo 1
  67. foo- foo+ -1
  68. foo~1 foo -1
  69. foo~foo+Bar foo~foo+bar -1
  70. foo~~ foo~ -1
  71. 12345+that-really-is-some-ver-0 12345+that-really-is-some-ver-10 -1
  72. foo-0 foo-01 -1
  73. foo.bar foobar 1
  74. foo.bar foo1bar 1
  75. foo.bar foo0bar 1
  76. 1foo-1 foo-1 -1
  77. foo2.0 foo2 1
  78. foo2.0.0 foo2.10.0 -1
  79. foo2.0 foo2.0.0 -1
  80. foo2.0 foo2.10 -1
  81. foo2.1 foo2.10 -1
  82. 1.09 1.9 0
  83. 1.0.8+nmu1 1.0.8 1
  84. 3.11 3.10+nmu1 1
  85. 0.9j-20080306-4 0.9i-20070324-2 1
  86. 1.2.0~b7-1 1.2.0~b6-1 1
  87. 1.011-1 1.06-2 1
  88. 0.0.9+dfsg1-1 0.0.8+dfsg1-3 1
  89. 4.6.99+svn6582-1 4.6.99+svn6496-1 1
  90. 53 52 1
  91. 0.9.9~pre122-1 0.9.9~pre111-1 1
  92. 2:2.3.2-2+lenny2 2:2.3.2-2 1
  93. 1:3.8.1-1 3.8.GA-1 1
  94. 1.0.1+gpl-1 1.0.1-2 1