Update version compare function in utils.py.

Signed-off-by: John Huang <[email protected]>

--- autotest/client/common_lib/utils.py 2010-04-13 18:15:53.000000000 -0700
+++ autotest/client/common_lib/utils.py 2010-04-14 10:41:07.000000000 -0700
@@ -1143,19 +1143,35 @@
 
 
 def compare_versions(ver1, ver2):
-    """Compares two dot-delimited version strings.
+    """Version number comparison between ver1 and ver2 strings.
 
-    Version number comparison between ver1 and ver2 of the form 'x.y.z'
+    >>> compare_tuple("1", "2")
+    -1
+    >>> compare_tuple("foo-1.1", "foo-1.2")
+    -1
+    >>> compare_tuple("1.2", "1.2a")
+    -1
+    >>> compare_tuple("1.2b", "1.2a")
+    1
+    >>> compare_tuple("1.3.5.3a", "1.3.5.3b")
+    -1
 
     Args:
-        ver1: dot-delimited string in 'x.y.z' form
-        ver2: dot-delimited string in 'x.y.z' form
+        ver1: version string
+        ver2: version string
 
     Returns:
         int:  1 if ver1 >  ver2
               0 if ver1 == ver2
              -1 if ver1 <  ver2
     """
-    v1 = [int(x) for x in ver1.split('.')]
-    v2 = [int(x) for x in ver2.split('.')]
-    return cmp(v1, v2)
+    ax = re.split('[.-]', ver1)
+    ay = re.split('[.-]', ver2)
+    while len(ax) > 0 and len(ay) > 0:
+        cx = ax.pop(0)
+        cy = ay.pop(0)
+        maxlen = max(len(cx), len(cy))
+        c = cmp(cx.zfill(maxlen), cy.zfill(maxlen))
+        if c != 0:
+            return c
+    return cmp(len(ax), len(ay))
--- autotest/client/common_lib/utils_unittest.py        2010-04-12 
09:44:38.000000000 -0700
+++ autotest/client/common_lib/utils_unittest.py        2010-04-14 
10:41:07.000000000 -0700
@@ -711,16 +711,37 @@
 
 
 class test_compare_versions(unittest.TestCase):
-    def test_less_than(self):
-        self.assertEqual(utils.compare_versions('1.2.3', '1.7.5'), -1)
+    def test_zerofill(self):
+        self.assertEqual(utils.compare_versions('1.7', '1.10'), -1)
+        self.assertEqual(utils.compare_versions('1.222', '1.3'), 1)
+        self.assertEqual(utils.compare_versions('1.03', '1.3'), 0)
 
 
-    def test_equal(self):
-        self.assertEqual(utils.compare_versions('1.2.3', '1.2.3'), 0)
+    def test_unequal_len(self):
+        self.assertEqual(utils.compare_versions('1.3', '1.3.4'), -1)
+        self.assertEqual(utils.compare_versions('1.3.1', '1.3'), 1)
 
 
-    def test_greater_than(self):
-        self.assertEqual(utils.compare_versions('1.3.3', '1.2.3'), 1)
+    def test_dash_delimited(self):
+        self.assertEqual(utils.compare_versions('1-2-3', '1-5-1'), -1)
+        self.assertEqual(utils.compare_versions('1-2-1', '1-1-1'), 1)
+        self.assertEqual(utils.compare_versions('1-2-4', '1-2-4'), 0)
+
+
+    def test_alphabets(self):
+        self.assertEqual(utils.compare_versions('m.l.b', 'n.b.a'), -1)
+        self.assertEqual(utils.compare_versions('n.b.a', 'm.l.b'), 1)
+        self.assertEqual(utils.compare_versions('abc.e', 'abc.e'), 0)
+
+
+    def test_mix_symbols(self):
+        self.assertEqual(utils.compare_versions('k-320.1', 'k-320.3'), -1)
+        self.assertEqual(utils.compare_versions('k-231.5', 'k-231.1'), 1)
+        self.assertEqual(utils.compare_versions('k-231.1', 'k-231.1'), 0)
+
+        self.assertEqual(utils.compare_versions('k.320-1', 'k.320-3'), -1)
+        self.assertEqual(utils.compare_versions('k.231-5', 'k.231-1'), 1)
+        self.assertEqual(utils.compare_versions('k.231-1', 'k.231-1'), 0)
 
 
 if __name__ == "__main__":
_______________________________________________
Autotest mailing list
[email protected]
http://test.kernel.org/cgi-bin/mailman/listinfo/autotest

Reply via email to