aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Fiselier <eric@efcs.ca>2014-12-19 22:29:12 +0000
committerDan Albert <danalbert@google.com>2015-01-08 14:44:29 -0800
commitd813311a35b10e8bf8917e503267de6246446991 (patch)
tree1546fd470713070fd2593e521ae029ab481534ed
parent00b724930ddd36b279b20252ba7bae51d0a67785 (diff)
downloadexternal_llvm-d813311a35b10e8bf8917e503267de6246446991.zip
external_llvm-d813311a35b10e8bf8917e503267de6246446991.tar.gz
external_llvm-d813311a35b10e8bf8917e503267de6246446991.tar.bz2
[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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224628 91177308-0d34-0410-b5e6-96231b3b80d8 (cherry picked from commit 74430387cd6b1d0e3f89b604f747fa53fc3315b3)
-rw-r--r--utils/lit/lit/Test.py36
1 files changed, 36 insertions, 0 deletions
diff --git a/utils/lit/lit/Test.py b/utils/lit/lit/Test.py
index 63d31b9..b810230 100644
--- a/utils/lit/lit/Test.py
+++ b/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):