summaryrefslogtreecommitdiffstats
path: root/llvm/utils/lit
diff options
context:
space:
mode:
authorEric Fiselier <eric@efcs.ca>2014-12-19 22:29:12 +0000
committerEric Fiselier <eric@efcs.ca>2014-12-19 22:29:12 +0000
commit20ca10bd68d34ed218bf1817d22bf25db9998b42 (patch)
tree1e43540e019e8fbc98d69c94dfec7859cb934e7a /llvm/utils/lit
parent52e4ce4a536705e8776c6026ae5bfca5d480ad55 (diff)
downloadbcm5719-llvm-20ca10bd68d34ed218bf1817d22bf25db9998b42.tar.gz
bcm5719-llvm-20ca10bd68d34ed218bf1817d22bf25db9998b42.zip
[LIT] Add JSONMetricValue type to wrap types supported by the json encoder.
Summary: The following types can be encoded and decoded by the json library: `dict`, `list`, `tuple`, `str`, `unicode`, `int`, `long`, `float`, `bool`, `NoneType`. `JSONMetricValue` can be constructed with any of these types, and used as part of Test.Result. This patch also adds a toMetricValue function that converts a value into a MetricValue. Reviewers: ddunbar, EricWF Reviewed By: EricWF Subscribers: cfe-commits, llvm-commits Differential Revision: http://reviews.llvm.org/D6576 llvm-svn: 224628
Diffstat (limited to 'llvm/utils/lit')
-rw-r--r--llvm/utils/lit/lit/Test.py36
1 files changed, 36 insertions, 0 deletions
diff --git a/llvm/utils/lit/lit/Test.py b/llvm/utils/lit/lit/Test.py
index 63d31b9212c..b81023010d7 100644
--- a/llvm/utils/lit/lit/Test.py
+++ b/llvm/utils/lit/lit/Test.py
@@ -1,5 +1,6 @@
import os
from xml.sax.saxutils import escape
+from json import JSONEncoder
# Test result codes.
@@ -73,6 +74,41 @@ class RealMetricValue(MetricValue):
def todata(self):
return self.value
+class JSONMetricValue(MetricValue):
+ """
+ JSONMetricValue is used for types that are representable in the output
+ but that are otherwise uninterpreted.
+ """
+ def __init__(self, value):
+ # Ensure the value is a serializable by trying to encode it.
+ # WARNING: The value may change before it is encoded again, and may
+ # not be encodable after the change.
+ try:
+ e = JSONEncoder()
+ e.encode(value)
+ except TypeError:
+ raise
+ self.value = value
+
+ def format(self):
+ return str(self.value)
+
+ def todata(self):
+ return self.value
+
+def toMetricValue(value):
+ if isinstance(value, MetricValue):
+ return value
+ elif isinstance(value, int) or isinstance(value, long):
+ return IntMetricValue(value)
+ elif isinstance(value, float):
+ return RealMetricValue(value)
+ else:
+ # Try to create a JSONMetricValue and let the constructor throw
+ # if value is not a valid type.
+ return JSONMetricValue(value)
+
+
# Test results.
class Result(object):
OpenPOWER on IntegriCloud