Skip to content

Commit 97e5406

Browse files
committed
More tests
1 parent b3eabde commit 97e5406

File tree

1 file changed

+57
-14
lines changed

1 file changed

+57
-14
lines changed

hugr-py/tests/test_passes.py

Lines changed: 57 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from copy import deepcopy
2+
13
from hugr.hugr.base import Hugr
24
from hugr.passes._composable_pass import (
35
ComposablePass,
@@ -8,7 +10,7 @@
810

911

1012
def test_composable_pass() -> None:
11-
class MyDummyPass(ComposablePass):
13+
class MyDummyInlinePass(ComposablePass):
1214
def run(self, hugr: Hugr, inplace: bool = True) -> PassResult:
1315
return impl_pass_run(
1416
hugr=hugr,
@@ -18,24 +20,65 @@ def run(self, hugr: Hugr, inplace: bool = True) -> PassResult:
1820
hugr,
1921
result=None,
2022
inline=True,
21-
modified=False,
23+
# Say that we modified the HUGR even though we didn't
24+
modified=True,
25+
),
26+
)
27+
28+
class MyDummyCopyPass(ComposablePass):
29+
def run(self, hugr: Hugr, inplace: bool = True) -> PassResult:
30+
return impl_pass_run(
31+
hugr=hugr,
32+
inplace=inplace,
33+
copy_call=lambda hugr: PassResult.for_pass(
34+
self,
35+
deepcopy(hugr),
36+
result=None,
37+
inline=False,
38+
# Say that we modified the HUGR even though we didn't
39+
modified=True,
2240
),
2341
)
2442

25-
dummy = MyDummyPass()
43+
dummy_inline = MyDummyInlinePass()
44+
dummy_copy = MyDummyCopyPass()
2645

27-
composed_dummies = dummy.then(dummy)
46+
composed_dummies = dummy_inline.then(dummy_copy)
47+
assert isinstance(composed_dummies, ComposedPass)
2848

29-
my_composed_pass = ComposedPass(dummy, dummy)
30-
assert my_composed_pass.passes == [dummy, dummy]
49+
assert dummy_inline.name == "MyDummyInlinePass"
50+
assert dummy_copy.name == "MyDummyCopyPass"
51+
assert composed_dummies.name == "Composed(MyDummyInlinePass, MyDummyCopyPass)"
52+
assert composed_dummies.then(dummy_inline).then(composed_dummies).name == (
53+
"Composed("
54+
+ "MyDummyInlinePass, MyDummyCopyPass, "
55+
+ "MyDummyInlinePass, "
56+
+ "MyDummyInlinePass, MyDummyCopyPass)"
57+
)
3158

32-
assert isinstance(composed_dummies, ComposablePass)
33-
assert composed_dummies == my_composed_pass
59+
# Apply the passes
60+
hugr: Hugr = Hugr()
61+
new_hugr = composed_dummies(hugr, inplace=False)
62+
assert hugr == new_hugr
63+
assert new_hugr is not hugr
3464

35-
assert dummy.name == "MyDummyPass"
36-
assert composed_dummies.name == "Composed(MyDummyPass, MyDummyPass)"
65+
# Verify the pass results
66+
hugr = Hugr()
67+
inplace_result = composed_dummies.run(hugr, inplace=True)
68+
assert inplace_result.modified
69+
assert inplace_result.original_dirty
70+
assert inplace_result.results == [
71+
("MyDummyInlinePass", None),
72+
("MyDummyCopyPass", None),
73+
]
74+
assert inplace_result.hugr is hugr
3775

38-
assert (
39-
composed_dummies.then(my_composed_pass).name
40-
== "Composed(MyDummyPass, MyDummyPass, MyDummyPass, MyDummyPass)"
41-
)
76+
hugr = Hugr()
77+
copy_result = composed_dummies.run(hugr, inplace=False)
78+
assert copy_result.modified
79+
assert not copy_result.original_dirty
80+
assert copy_result.results == [
81+
("MyDummyInlinePass", None),
82+
("MyDummyCopyPass", None),
83+
]
84+
assert copy_result.hugr is not hugr

0 commit comments

Comments
 (0)