Skip to content

Commit 00db8eb

Browse files
committed
Improve accuaracy of unit tests: Count num of copies/moves
1 parent 511e8c3 commit 00db8eb

File tree

1 file changed

+22
-16
lines changed

1 file changed

+22
-16
lines changed

tests/test_class_sh_basic.py

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,18 @@ def test_atyp_constructors():
1616
assert obj.__class__.__name__ == "atyp"
1717

1818

19+
def check_regex(expected, actual):
20+
result = re.match(expected + "$", actual)
21+
if result is None:
22+
pytest.fail("expected: '{}' != actual: '{}'".format(expected, actual))
23+
24+
1925
@pytest.mark.parametrize(
2026
"rtrn_f, expected",
2127
[
22-
(m.rtrn_valu, "rtrn_valu(_MvCtor)*_MvCtor"),
23-
(m.rtrn_rref, "rtrn_rref(_MvCtor)*_MvCtor"),
24-
(m.rtrn_cref, "rtrn_cref(_MvCtor)*_CpCtor"),
28+
(m.rtrn_valu, "rtrn_valu(_MvCtor){1,3}"),
29+
(m.rtrn_rref, "rtrn_rref(_MvCtor){1}"),
30+
(m.rtrn_cref, "rtrn_cref_CpCtor"),
2531
(m.rtrn_mref, "rtrn_mref"),
2632
(m.rtrn_cptr, "rtrn_cptr"),
2733
(m.rtrn_mptr, "rtrn_mptr"),
@@ -34,25 +40,25 @@ def test_atyp_constructors():
3440
],
3541
)
3642
def test_cast(rtrn_f, expected):
37-
assert re.match(expected, m.get_mtxt(rtrn_f()))
43+
check_regex(expected, m.get_mtxt(rtrn_f()))
3844

3945

4046
@pytest.mark.parametrize(
4147
"pass_f, mtxt, expected",
4248
[
43-
(m.pass_valu, "Valu", "pass_valu:Valu(_MvCtor)*_CpCtor"),
44-
(m.pass_cref, "Cref", "pass_cref:Cref(_MvCtor)*_MvCtor"),
45-
(m.pass_mref, "Mref", "pass_mref:Mref(_MvCtor)*_MvCtor"),
46-
(m.pass_cptr, "Cptr", "pass_cptr:Cptr(_MvCtor)*_MvCtor"),
47-
(m.pass_mptr, "Mptr", "pass_mptr:Mptr(_MvCtor)*_MvCtor"),
48-
(m.pass_shmp, "Shmp", "pass_shmp:Shmp(_MvCtor)*_MvCtor"),
49-
(m.pass_shcp, "Shcp", "pass_shcp:Shcp(_MvCtor)*_MvCtor"),
50-
(m.pass_uqmp, "Uqmp", "pass_uqmp:Uqmp(_MvCtor)*_MvCtor"),
51-
(m.pass_uqcp, "Uqcp", "pass_uqcp:Uqcp(_MvCtor)*_MvCtor"),
49+
(m.pass_valu, "Valu", "pass_valu:Valu(_MvCtor){1,2}_CpCtor"),
50+
(m.pass_cref, "Cref", "pass_cref:Cref(_MvCtor){1,2}"),
51+
(m.pass_mref, "Mref", "pass_mref:Mref(_MvCtor){1,2}"),
52+
(m.pass_cptr, "Cptr", "pass_cptr:Cptr(_MvCtor){1,2}"),
53+
(m.pass_mptr, "Mptr", "pass_mptr:Mptr(_MvCtor){1,2}"),
54+
(m.pass_shmp, "Shmp", "pass_shmp:Shmp(_MvCtor){1,2}"),
55+
(m.pass_shcp, "Shcp", "pass_shcp:Shcp(_MvCtor){1,2}"),
56+
(m.pass_uqmp, "Uqmp", "pass_uqmp:Uqmp(_MvCtor){1,2}"),
57+
(m.pass_uqcp, "Uqcp", "pass_uqcp:Uqcp(_MvCtor){1,2}"),
5258
],
5359
)
5460
def test_load_with_mtxt(pass_f, mtxt, expected):
55-
assert re.match(expected, pass_f(m.atyp(mtxt)))
61+
check_regex(expected, pass_f(m.atyp(mtxt)))
5662

5763

5864
@pytest.mark.parametrize(
@@ -111,7 +117,7 @@ def test_unique_ptr_roundtrip(num_round_trips=1000):
111117
for _ in range(num_round_trips):
112118
id_orig = id(recycled)
113119
recycled = m.unique_ptr_roundtrip(recycled)
114-
assert re.match("passenger(_MvCtor)*_MvCtor", m.get_mtxt(recycled))
120+
check_regex("passenger(_MvCtor){1,2}", m.get_mtxt(recycled))
115121
id_rtrn = id(recycled)
116122
# Ensure the returned object is a different Python instance.
117123
assert id_rtrn != id_orig
@@ -132,7 +138,7 @@ def test_unique_ptr_consumer_roundtrip(pass_f, rtrn_f, moved_out, moved_in):
132138
recycled = m.atyp("passenger")
133139
mtxt_orig = m.get_mtxt(recycled)
134140
ptr_orig = m.get_ptr(recycled)
135-
assert re.match("passenger_(MvCtor){1,2}", mtxt_orig)
141+
check_regex("passenger(_MvCtor){1,2}", mtxt_orig)
136142

137143
pass_f(c, recycled) # pass object to C++ consumer c
138144
if moved_out: # if moved (always), ensure it is flagged as disowned

0 commit comments

Comments
 (0)