Update format of delay test output during an error to directly

copy into unit test. Factor function into testutils.py for comparison.
This commit is contained in:
Matt Guthaus 2018-07-26 16:05:24 -07:00
parent 5088487cf7
commit 85595b0f6f
5 changed files with 39 additions and 49 deletions

View File

@ -62,33 +62,22 @@ class timing_sram_test(openram_test):
'delay_hl': [0.070554],
'slew_lh': [0.0190073]}
elif OPTS.tech_name == "scn3me_subm":
golden_data = {'leakage_power': 0.0004004581,
'delay_lh': [0.6538954],
'read0_power': [9.7622],
'read1_power': [9.589],
'write1_power': [10.8],
'write0_power': [6.928400000000001],
'slew_hl': [0.8321625],
'min_period': 2.344,
'delay_hl': [0.9019090999999999],
'slew_lh': [0.5896232]}
golden_data = {'delay_hl': [6.473300000000001],
'delay_lh': [1.0442000000000002],
'leakage_power': 0.025569099999999997,
'min_period': 9.375,
'read0_power': [8.0248],
'read1_power': [7.5243],
'slew_hl': [6.266000000000001],
'slew_lh': [0.7857840999999999],
'write0_power': [7.7587],
'write1_power': [8.0425]}
else:
self.assertTrue(False) # other techs fail
# Check if no too many or too few results
self.assertTrue(len(data.keys())==len(golden_data.keys()))
# Check each result
data_matches = True
for k in data.keys():
if type(data[k])==list:
for i in range(len(data[k])):
if not self.isclose(k,data[k][i],golden_data[k][i],0.15):
data_matches = False
else:
self.isclose(k,data[k],golden_data[k],0.15)
if not data_matches:
debug.info(0,str(data))
self.assertTrue(data_matches)
self.assertTrue(self.check_golden_data(data,golden_data,0.25))
globals.end_openram()

View File

@ -49,13 +49,8 @@ class timing_setup_test(openram_test):
# Check if no too many or too few results
self.assertTrue(len(data.keys())==len(golden_data.keys()))
# Check each result
for k in data.keys():
if type(data[k])==list:
for i in range(len(data[k])):
self.isclose(data[k][i],golden_data[k][i],0.15)
else:
self.isclose(data[k],golden_data[k],0.15)
self.assertTrue(self.check_golden_data(data,golden_data,0.25))
globals.end_openram()

View File

@ -76,18 +76,7 @@ class timing_sram_test(openram_test):
# Check if no too many or too few results
self.assertTrue(len(data.keys())==len(golden_data.keys()))
# Check each result
data_matches = True
for k in data.keys():
if type(data[k])==list:
for i in range(len(data[k])):
if not self.isclose(k,data[k][i],golden_data[k][i],0.15):
data_matches = False
else:
self.isclose(k,data[k],golden_data[k],0.15)
if not data_matches:
debug.info(0,str(data))
self.assertTrue(data_matches)
self.assertTrue(self.check_golden_data(data,golden_data,0.25))
globals.end_openram()

View File

@ -49,14 +49,9 @@ class timing_setup_test(openram_test):
# Check if no too many or too few results
self.assertTrue(len(data.keys())==len(golden_data.keys()))
# Check each result
for k in data.keys():
if type(data[k])==list:
for i in range(len(data[k])):
self.isclose(data[k][i],golden_data[k][i],0.15)
else:
self.isclose(data[k],golden_data[k],0.15)
self.assertTrue(self.check_golden_data(data,golden_data,0.25))
reload(characterizer)
globals.end_openram()

View File

@ -59,7 +59,29 @@ class openram_test(unittest.TestCase):
# Reset the static duplicate name checker for unit tests.
import hierarchy_design
hierarchy_design.hierarchy_design.name_map=[]
def check_golden_data(self, data, golden_data, error_tolerance=1e-2):
"""
This function goes through two dictionaries, key by key and compares
each item. It uses relative comparisons for the items and returns false
if there is a mismatch.
"""
# Check each result
data_matches = True
for k in data.keys():
if type(data[k])==list:
for i in range(len(data[k])):
if not self.isclose(k,data[k][i],golden_data[k][i],error_tolerance):
data_matches = False
else:
self.isclose(k,data[k],golden_data[k],error_tolerance)
if not data_matches:
import pprint
data_string=pprint.pformat(data)
debug.info(0,"Consider replacing data in unit test with:\n"+data_string)
return data_matches
def isclose(self,key,value,actual_value,error_tolerance=1e-2):