From f46851a3b4a1c00fa807266e061cc5128a7059c4 Mon Sep 17 00:00:00 2001
From: Marc Bonnici <marc.bonnici@arm.com>
Date: Fri, 28 Jun 2019 11:58:41 +0100
Subject: [PATCH] utils/types: Add `version_tuple`

Allow for `version_tuple` to be used more generically to enable
natural comparing of versions encoded as strings.
---
 wa/framework/resource.py           | 4 ++--
 wa/framework/workload.py           | 2 +-
 wa/utils/types.py                  | 7 +++++++
 wa/workloads/geekbench/__init__.py | 7 ++-----
 4 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/wa/framework/resource.py b/wa/framework/resource.py
index a8ae1909..4faec080 100644
--- a/wa/framework/resource.py
+++ b/wa/framework/resource.py
@@ -284,8 +284,8 @@ def apk_version_matches(path, version):
 
 
 def loose_version_matching(config_version, apk_version):
-    config_version = config_version.split('.')
-    apk_version = apk_version.split('.')
+    config_version = version_tuple(config_version)
+    apk_version = version_tuple(apk_version)
 
     if len(apk_version) < len(config_version):
         return False  # More specific version requested than available
diff --git a/wa/framework/workload.py b/wa/framework/workload.py
index 16185d8a..8b15ce1c 100644
--- a/wa/framework/workload.py
+++ b/wa/framework/workload.py
@@ -28,7 +28,7 @@ from wa.framework.plugin import TargetedPlugin, Parameter
 from wa.framework.resource import (ApkFile, ReventFile,
                                    File, loose_version_matching)
 from wa.framework.exception import WorkloadError, ConfigError
-from wa.utils.types import ParameterDict, list_or_string
+from wa.utils.types import ParameterDict, list_or_string, version_tuple
 from wa.utils.revent import ReventRecorder
 from wa.utils.exec_control import once_per_instance
 
diff --git a/wa/utils/types.py b/wa/utils/types.py
index 751e0bbf..68caec93 100644
--- a/wa/utils/types.py
+++ b/wa/utils/types.py
@@ -208,6 +208,13 @@ def regex(value):
         return re.compile(value)
 
 
+def version_tuple(v):
+    """
+    Converts a version string into a tuple of ints that can be used for natural comparison.
+    """
+    return tuple(map(int, (v.split("."))))
+
+
 __counters = defaultdict(int)
 
 
diff --git a/wa/workloads/geekbench/__init__.py b/wa/workloads/geekbench/__init__.py
index 82a01ed0..5c8066e1 100644
--- a/wa/workloads/geekbench/__init__.py
+++ b/wa/workloads/geekbench/__init__.py
@@ -23,6 +23,7 @@ from collections import defaultdict
 from wa import ApkUiautoWorkload, Parameter
 from wa.framework.exception import ConfigError, WorkloadError
 from wa.utils.misc import capitalize
+from wa.utils.types import version_tuple
 
 
 class Geekbench(ApkUiautoWorkload):
@@ -101,7 +102,7 @@ class Geekbench(ApkUiautoWorkload):
     def update_output(self, context):
         super(Geekbench, self).update_output(context)
         if not self.disable_update_result:
-            major_version = versiontuple(self.version)[0]
+            major_version = version_tuple(self.version)[0]
             update_method = getattr(self, 'update_result_{}'.format(major_version))
             update_method(context)
 
@@ -367,7 +368,3 @@ class GeekbenchCorproate(Geekbench):  # pylint: disable=too-many-ancestors
 
 def namemify(basename, i):
     return basename + (' {}'.format(i) if i else '')
-
-
-def versiontuple(v):
-    return tuple(map(int, (v.split("."))))