Skip to content

Commit

Permalink
0.8.8
Browse files Browse the repository at this point in the history
- Ensure covergroup type names are properly reflected in saved coverage data.
- Test suite updates to adapt to newer Python versions
- Bump required version of PyUCIS to 0.1.3

Signed-off-by: Matthew Ballance <matt.ballance@gmail.com>
  • Loading branch information
mballance committed Dec 11, 2023
1 parent e44244b commit 7accbb3
Show file tree
Hide file tree
Showing 14 changed files with 105 additions and 44 deletions.
5 changes: 5 additions & 0 deletions doc/Changelog.md
@@ -1,4 +1,9 @@

## 0.8.8
- Ensure covergroup type names are properly reflected in saved coverage data.
- Test suite updates to adapt to newer Python versions
- Bump required version of PyUCIS to 0.1.3

## 0.8.7
- (#199) - Correct how the swizzler handles 'not inside'. It was incorrectly treating
it the same as 'inside'
Expand Down
2 changes: 1 addition & 1 deletion etc/ivpm.info
@@ -1,4 +1,4 @@

name=pyvsc
version=0.8.7
version=0.8.8

2 changes: 1 addition & 1 deletion setup.py
Expand Up @@ -38,7 +38,7 @@ def get_version():
],
install_requires=[
'pyboolector>=3.2.2',
'pyucis>=0.1.0',
'pyucis>=0.1.3',
'toposort'
],
)
Expand Down
3 changes: 1 addition & 2 deletions src/vsc/impl/coverage_registry.py
Expand Up @@ -63,9 +63,8 @@ def register_cg(self, cg : CovergroupModel):
n_cg = len(self.covergroup_type_m[cg.typename])

# Base covergroup type is called 'name', while derivatives
# are labeled _1, _2, _3
# are labeled _1, _2, _3
cg_t.name = cg_t.typename + "_" + str(n_cg)

else:
# No, nothing here yet. Create a clone of this instance
# covergroup to use as a covergroup type
Expand Down
4 changes: 2 additions & 2 deletions src/vsc/model/covergroup_model.py
Expand Up @@ -32,7 +32,7 @@ def __init__(self,
name:str,
options=None):
super().__init__(name)

# Handle to the type covergroup this instance is associated with
self.type_cg : CovergroupModel = None

Expand Down Expand Up @@ -157,7 +157,7 @@ def equals(self, oth : 'CovergroupModel')->bool:
return eq

def clone(self)->'CovergroupModel':
ret = CovergroupModel(self.name)
ret = CovergroupModel(self.typename)

ret.srcinfo_decl = None if self.srcinfo_decl is None else self.srcinfo_decl.clone()
ret.srcinfo_inst = None if self.srcinfo_inst is None else self.srcinfo_inst.clone()
Expand Down
7 changes: 4 additions & 3 deletions src/vsc/visitors/coverage_save_visitor.py
Expand Up @@ -79,11 +79,12 @@ def save(self, td : TestData, cg_l : List[CovergroupModel]):
def visit_covergroup(self, cg : CovergroupModel):
from ucis.source_info import SourceInfo
cg_inst = self.get_cg_inst(cg)

cg_name = cg.name if cg.name is not None else "<unknown>"
inst_location = None

if cg.type_cg is None:
print("cg.typename=%s" % cg.typename)
if cg.srcinfo_decl is not None:
fh = self.get_file_handle(cg.srcinfo_decl.filename)
inst_location = SourceInfo(
Expand All @@ -98,7 +99,7 @@ def visit_covergroup(self, cg : CovergroupModel):
# TODO: obtain goal from coverpoint and set on cp_scope
# TODO: obtain comment from coverpoint and set on cp_scope
self.active_scope_s.append(cg_inst.createCovergroup(
cg_name,
cg.typename,
inst_location,
weight, # weight
UCIS_OTHER)) # Source type
Expand Down
2 changes: 1 addition & 1 deletion ve/unit/test_constraint_copier.py
Expand Up @@ -43,6 +43,6 @@ def test_simple(self):
])

copy = ConstraintCopyBuilder.copy(ab_c)
self.assertEquals(1, len(copy))
self.assertEqual(1, len(copy))
self.assertIsNot(ab_c, copy[0])

34 changes: 17 additions & 17 deletions ve/unit/test_coverage_iff.py
Expand Up @@ -28,12 +28,12 @@ def __init__(self):
str_report = vsc.get_coverage_report(details=True)
print("Report:\n" + str_report)

self.assertEquals(len(report.covergroups), 1)
self.assertEquals(len(report.covergroups[0].coverpoints), 1)
self.assertEquals(len(report.covergroups[0].coverpoints[0].bins), 7)
self.assertEquals(report.covergroups[0].coverpoints[0].bins[0].count, 0)
self.assertEquals(report.covergroups[0].coverpoints[0].bins[1].count, 1)
self.assertEquals(report.covergroups[0].coverpoints[0].bins[2].count, 0)
self.assertEqual(len(report.covergroups), 1)
self.assertEqual(len(report.covergroups[0].coverpoints), 1)
self.assertEqual(len(report.covergroups[0].coverpoints[0].bins), 7)
self.assertEqual(report.covergroups[0].coverpoints[0].bins[0].count, 0)
self.assertEqual(report.covergroups[0].coverpoints[0].bins[1].count, 1)
self.assertEqual(report.covergroups[0].coverpoints[0].bins[2].count, 0)

def test_lambda_iff(self):

Expand All @@ -60,12 +60,12 @@ def __init__(self, sample_c):
str_report = vsc.get_coverage_report(details=True)
print("Report:\n" + str_report)

self.assertEquals(len(report.covergroups), 1)
self.assertEquals(len(report.covergroups[0].coverpoints), 1)
self.assertEquals(len(report.covergroups[0].coverpoints[0].bins), 7)
self.assertEquals(report.covergroups[0].coverpoints[0].bins[0].count, 0)
self.assertEquals(report.covergroups[0].coverpoints[0].bins[1].count, 1)
self.assertEquals(report.covergroups[0].coverpoints[0].bins[2].count, 0)
self.assertEqual(len(report.covergroups), 1)
self.assertEqual(len(report.covergroups[0].coverpoints), 1)
self.assertEqual(len(report.covergroups[0].coverpoints[0].bins), 7)
self.assertEqual(report.covergroups[0].coverpoints[0].bins[0].count, 0)
self.assertEqual(report.covergroups[0].coverpoints[0].bins[1].count, 1)
self.assertEqual(report.covergroups[0].coverpoints[0].bins[2].count, 0)

def test_class_field_cross_iff(self):

Expand Down Expand Up @@ -95,14 +95,14 @@ def __init__(self):
str_report = vsc.get_coverage_report(details=True)
print("Report:\n" + str_report)

self.assertEquals(len(report.covergroups), 1)
self.assertEquals(len(report.covergroups[0].coverpoints), 2)
self.assertEquals(len(report.covergroups[0].crosses), 1)
self.assertEqual(len(report.covergroups), 1)
self.assertEqual(len(report.covergroups[0].coverpoints), 2)
self.assertEqual(len(report.covergroups[0].crosses), 1)
for ii,i in enumerate([1,2,4,8]):
for ji,j in enumerate([1,2,4,8]):
if i == j:
self.assertEquals(report.covergroups[0].crosses[0].bins[4*ii+ji].count, 1)
self.assertEqual(report.covergroups[0].crosses[0].bins[4*ii+ji].count, 1)
else:
self.assertEquals(report.covergroups[0].crosses[0].bins[4*ii+ji].count, 0)
self.assertEqual(report.covergroups[0].crosses[0].bins[4*ii+ji].count, 0)


56 changes: 56 additions & 0 deletions ve/unit/test_coverage_report.py
Expand Up @@ -79,7 +79,63 @@ def __init__(self):
self.assertEqual(100, report.covergroups[0].coverage)
self.assertEqual(100, report.covergroups[0].covergroups[0].coverage)
self.assertEqual(0, report.covergroups[0].covergroups[1].coverage)

def test_single_type_16_inst(self):

@vsc.covergroup
class my_cg(object):

def __init__(self, name):
self.with_sample(dict(
a=vsc.uint8_t(),
b=vsc.uint8_t()))
self.options.name = name

self.a_cp = vsc.coverpoint(self.a, bins={
"a" : bin_array([], [0,3])
})

self.b_cp = vsc.coverpoint(self.b, bins={
"b" : bin_array([], [0,3])
})

self.ab_cr = vsc.cross([self.a_cp, self.b_cp])

cg_l = []
for i in range(4):
cg_l.append(my_cg("my_cg_%d" % i))

for i in range(4):
for j in range(4):
cg_l[i].sample(i, j)

# vsc.report_coverage()

report = vsc.get_coverage_report_model()
vsc.write_coverage_db("cov.xml")
cov_db = XmlFactory.read("cov.xml")
cov_model = CoverageReportBuilder.build(cov_db)
self.assertEqual(len(cov_model.covergroups), 1)
self.assertEqual(len(cov_model.covergroups[0].coverpoints), 2)
self.assertEqual(cov_model.covergroups[0].coverpoints[0].coverage, 100.0)
self.assertEqual(cov_model.covergroups[0].coverpoints[1].coverage, 100.0)
self.assertEqual(len(cov_model.covergroups[0].covergroups), 4)
self.assertEqual(len(cov_model.covergroups[0].covergroups[0].coverpoints), 2)
self.assertEqual(cov_model.covergroups[0].covergroups[0].coverpoints[0].coverage, 25.0)
self.assertEqual(cov_model.covergroups[0].covergroups[0].coverpoints[1].coverage, 100.0)
self.assertEqual(cov_model.covergroups[0].covergroups[0].crosses[0].coverage, 25.0)
# formatter = TextCoverageReportFormatter(cov_model, sys.stdout)
# formatter.details = True
# formatter.report()



# self.assertEqual(1, len(report.covergroups))
# self.assertEqual(2, len(report.covergroups[0].covergroups))
# self.assertEqual(100, report.covergroups[0].coverage)
# self.assertEqual(100, report.covergroups[0].covergroups[0].coverage)
# self.assertEqual(0, report.covergroups[0].covergroups[1].coverage)

def test_single_type_two_inst_details(self):

@vsc.covergroup
Expand Down
8 changes: 4 additions & 4 deletions ve/unit/test_covergroup.py
Expand Up @@ -322,10 +322,10 @@ def __init__(self):

report = vsc.get_coverage_report_model()
self.assertEqual(1, len(report.covergroups))
self.assertEquals(2, len(report.covergroups[0].covergroups))
self.assertEquals(100, report.covergroups[0].coverage)
self.assertEquals(50, report.covergroups[0].covergroups[0].coverage)
self.assertEquals(100, report.covergroups[0].covergroups[1].coverage)
self.assertEqual(2, len(report.covergroups[0].covergroups))
self.assertEqual(100, report.covergroups[0].coverage)
self.assertEqual(50, report.covergroups[0].covergroups[0].coverage)
self.assertEqual(100, report.covergroups[0].covergroups[1].coverage)

def test_inheritance_not_supported(self):
caught_exception = False
Expand Down
2 changes: 1 addition & 1 deletion ve/unit/test_covergroup_sampling.py
Expand Up @@ -43,7 +43,7 @@ def __init__(self, input):
inst.b = my_e.B
cg.sample()
vsc.report_coverage(details=True)
self.assertEquals(cg.cp2.get_coverage(), 100)
self.assertEqual(cg.cp2.get_coverage(), 100)

# def test_sample_nonvsc_object_local_lambda_enum(self):
# class my_e(Enum):
Expand Down
20 changes: 10 additions & 10 deletions ve/unit/test_random_dist.py
Expand Up @@ -169,13 +169,13 @@ def get_random_ch(self):
if i < 16:
self.assertNotEqual(hist_v1[i], 0)
else:
self.assertEquals(hist_v1[i], 0)
self.assertEqual(hist_v1[i], 0)

for i in range(255):
if i < 32:
self.assertNotEqual(hist_v2[i], 0)
else:
self.assertEquals(hist_v2[i], 0)
self.assertEqual(hist_v2[i], 0)

def test_dist_nre_le(self):
@vsc.randobj
Expand Down Expand Up @@ -210,13 +210,13 @@ def get_random_ch(self):
if i < 16:
self.assertNotEqual(hist_v1[i], 0)
else:
self.assertEquals(hist_v1[i], 0)
self.assertEqual(hist_v1[i], 0)

for i in range(255):
if i < 32:
self.assertNotEqual(hist_v2[i], 0)
else:
self.assertEquals(hist_v2[i], 0)
self.assertEqual(hist_v2[i], 0)

def test_dist_var_lt(self):
@vsc.randobj
Expand Down Expand Up @@ -255,13 +255,13 @@ def get_random_ch(self):
if i < 16:
self.assertNotEqual(hist_v1[i], 0)
else:
self.assertEquals(hist_v1[i], 0)
self.assertEqual(hist_v1[i], 0)

for i in range(255):
if i < 32:
self.assertNotEqual(hist_v2[i], 0)
else:
self.assertEquals(hist_v2[i], 0)
self.assertEqual(hist_v2[i], 0)

def test_dist_var_lte(self):
@vsc.randobj
Expand Down Expand Up @@ -300,13 +300,13 @@ def get_random_ch(self):
if i < 16:
self.assertNotEqual(hist_v1[i], 0)
else:
self.assertEquals(hist_v1[i], 0)
self.assertEqual(hist_v1[i], 0)

for i in range(255):
if i < 32:
self.assertNotEqual(hist_v2[i], 0)
else:
self.assertEquals(hist_v2[i], 0)
self.assertEqual(hist_v2[i], 0)


def test_dist_nre_listsz_lt(self):
Expand Down Expand Up @@ -342,13 +342,13 @@ def get_random_ch(self):
if i < 16:
self.assertNotEqual(hist_v1[i], 0)
else:
self.assertEquals(hist_v1[i], 0)
self.assertEqual(hist_v1[i], 0)

for i in range(255):
if i < 32:
self.assertNotEqual(hist_v2[i], 0)
else:
self.assertEquals(hist_v2[i], 0)
self.assertEqual(hist_v2[i], 0)

def test_xy_constraint_dist(self):

Expand Down
2 changes: 1 addition & 1 deletion ve/unit/test_randomize_with.py
Expand Up @@ -62,7 +62,7 @@ def my_a_c(self):
# c.randomize()
with c.randomize_with() as it:
it.a == (i%10)
self.assertEquals(it.a, (i%10))
self.assertEqual(it.a, (i%10))

print("i=" + str(i) + " c.a=" + hex(c.a) + " c.b=" + hex(c.b) + " c.c=" + hex(c.c) + " c.d=" + hex(c.d))

Expand Down
2 changes: 1 addition & 1 deletion ve/unit/test_types.py
Expand Up @@ -28,7 +28,7 @@ def cx(self):
c.randomize()
for ii,i in enumerate(c.x):
print(i)
self.assertEquals(i, ii-27)
self.assertEqual(i, ii-27)

def test_nonrand_signed_list_init(self):

Expand Down

0 comments on commit 7accbb3

Please sign in to comment.