From 2f6a5bd3461089d9844ac2dbc3d52f656a85aebb Mon Sep 17 00:00:00 2001 From: Matthew Ballance Date: Wed, 1 Jul 2020 22:38:56 -0400 Subject: [PATCH] Correct mis-indexed array in coverage model Signed-off-by: Matthew Ballance --- src/vsc/coverage.py | 6 +++--- src/vsc/model/rangelist_model.py | 2 +- ve/unit/test_coverpoint_bins.py | 34 ++++++++++++++++++++++++++++++++ 3 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 ve/unit/test_coverpoint_bins.py diff --git a/src/vsc/coverage.py b/src/vsc/coverage.py index 319c238..85658e8 100644 --- a/src/vsc/coverage.py +++ b/src/vsc/coverage.py @@ -273,9 +273,9 @@ def __init__(self, nbins, *args): if isinstance(nbins,list): - if len(nbins) != 0 and len(nbins) != 1: + if len(nbins) not in (0,1): raise Exception("Only 0 or 1 argument can be specified to the nbins argument") - self.nbins = -1 if len(nbins) == 0 else nbins[1] + self.nbins = -1 if len(nbins) == 0 else nbins[0] else: self.nbins = int(nbins) @@ -299,7 +299,7 @@ def build_cov_model(self, parent, name): else: ret = CoverpointBinCollectionModel(name) for r in self.range_l: - if isinstance(r, list): + if isinstance(r, (list,tuple)): if len(r) != 2: raise Exception("Expecting range \"" + str(r) + "\" to have two elements") b = ret.add_bin(CoverpointBinArrayModel(name, r[0], r[1])) diff --git a/src/vsc/model/rangelist_model.py b/src/vsc/model/rangelist_model.py index 8b13508..e536a15 100644 --- a/src/vsc/model/rangelist_model.py +++ b/src/vsc/model/rangelist_model.py @@ -31,7 +31,7 @@ def __init__(self, rl : List[List[int]]=None): if rl is not None: for r in rl: - if isinstance(r, list): + if isinstance(r, (list,tuple)): if len(r) == 2: self.range_l.append([r[0], r[1]]) else: diff --git a/ve/unit/test_coverpoint_bins.py b/ve/unit/test_coverpoint_bins.py new file mode 100644 index 0000000..ebd2828 --- /dev/null +++ b/ve/unit/test_coverpoint_bins.py @@ -0,0 +1,34 @@ +''' +Created on Jul 1, 2020 + +@author: ballance +''' +import vsc +from vsc_test_case import VscTestCase + +class TestCoverpointBins(VscTestCase): + + def test_bin_array_partition(self): + + @vsc.covergroup + class my_cg(object): + + def __init__(self): + self.with_sample(dict( + a=vsc.uint8_t())) + self.a_cp = vsc.coverpoint( + self.a, bins=dict( + a1=vsc.bin_array([4], (0,16)) + )) + + cg = my_cg() + cg.sample(0) + cg.sample(3) + print("coverage: " + str(cg.a_cp.get_coverage())) + self.assertEqual(cg.a_cp.get_coverage(), 25) + cg.sample(4) + cg.sample(7) + print("coverage: " + str(cg.a_cp.get_coverage())) + self.assertEqual(cg.a_cp.get_coverage(), 50) + + \ No newline at end of file