@@ -263,7 +263,7 @@ def test_parse_proof_hint_reverse_no_ints(
263263 assert len (pt .pre_trace ) == 14
264264
265265 # 9 post-initial-configuration events
266- assert len (pt .trace ) == 9
266+ assert len (pt .trace ) == 12
267267
268268 # Contents of the k cell in the initial configuration
269269 kore_pattern = llvm_to_pattern (pt .initial_config .kore_pattern )
@@ -321,25 +321,43 @@ def test_parse_proof_hint_reverse_no_ints(
321321 assert axiom == axiom_expected
322322 assert len (rule_event .substitution ) == 1
323323
324+ # Function exit event (no tail)
325+ function_exit_event = pt .trace [6 ].step_event
326+ assert isinstance (function_exit_event , prooftrace .LLVMFunctionExitEvent )
327+ assert function_exit_event .rule_ordinal == 158
328+ assert function_exit_event .is_tail == False
329+
324330 # Function event
325- rule_event = pt .trace [6 ].step_event
331+ rule_event = pt .trace [7 ].step_event
326332 assert isinstance (rule_event , prooftrace .LLVMFunctionEvent )
327333 assert rule_event .name == "Lblreverse'LParUndsRParUnds'TREE-REVERSE-SYNTAX'Unds'Tree'Unds'Tree{}"
328334 assert rule_event .relative_position == '1'
329335 # Fun events should not have Kore args unless called with a special flag
330336 assert len (rule_event .args ) == 0
331337
332338 # Simplification rule
333- rule_event = pt .trace [7 ].step_event
339+ rule_event = pt .trace [8 ].step_event
334340 assert isinstance (rule_event , prooftrace .LLVMRuleEvent )
335341 axiom = repr (definition .get_axiom_by_ordinal (rule_event .rule_ordinal ))
336342 axiom_expected = get_pattern_from_ordinal (definition_text , rule_event .rule_ordinal )
337343 assert axiom == axiom_expected
338344 assert len (rule_event .substitution ) == 1
339345
346+ # Function exit event (no tail)
347+ function_exit_event = pt .trace [9 ].step_event
348+ assert isinstance (function_exit_event , prooftrace .LLVMFunctionExitEvent )
349+ assert function_exit_event .rule_ordinal == 157
350+ assert function_exit_event .is_tail == False
351+
352+ # Function exit event (no tail)
353+ function_exit_event = pt .trace [10 ].step_event
354+ assert isinstance (function_exit_event , prooftrace .LLVMFunctionExitEvent )
355+ assert function_exit_event .rule_ordinal == 160
356+ assert function_exit_event .is_tail == False
357+
340358 # Then pattern
341- assert pt .trace [8 ].is_kore_pattern ()
342- kore_pattern = llvm_to_pattern (pt .trace [8 ].kore_pattern )
359+ assert pt .trace [11 ].is_kore_pattern ()
360+ kore_pattern = llvm_to_pattern (pt .trace [11 ].kore_pattern )
343361 k_cell = kore_pattern .patterns [0 ].dict ['args' ][0 ]
344362 assert k_cell ['name' ] == 'kseq'
345363 assert (
@@ -388,7 +406,7 @@ def test_parse_proof_hint_non_rec_function(
388406 assert len (pt .pre_trace ) == 14
389407
390408 # 6 post-initial-configuration events
391- assert len (pt .trace ) == 6
409+ assert len (pt .trace ) == 8
392410
393411 # Contents of the k cell in the initial configuration
394412 kore_pattern = llvm_to_pattern (pt .initial_config .kore_pattern )
@@ -415,24 +433,36 @@ def test_parse_proof_hint_non_rec_function(
415433 inner_rule_event = pt .trace [2 ].step_event
416434 assert isinstance (inner_rule_event , prooftrace .LLVMRuleEvent )
417435
436+ # Function exit event (no tail)
437+ function_exit_event = pt .trace [3 ].step_event
438+ assert isinstance (function_exit_event , prooftrace .LLVMFunctionExitEvent )
439+ assert function_exit_event .rule_ordinal == 103
440+ assert function_exit_event .is_tail == False
441+
418442 # Functional event
419- fun_event = pt .trace [3 ].step_event
443+ fun_event = pt .trace [4 ].step_event
420444 assert isinstance (fun_event , prooftrace .LLVMFunctionEvent )
421445 assert fun_event .name == "Lblid'LParUndsRParUnds'NON-REC-FUNCTION-SYNTAX'Unds'Foo'Unds'Foo{}"
422446 assert fun_event .relative_position == '0:0:0'
423447 assert len (fun_event .args ) == 0
424448
425449 # Then rule
426- rule_event = pt .trace [4 ].step_event
450+ rule_event = pt .trace [5 ].step_event
427451 assert isinstance (rule_event , prooftrace .LLVMRuleEvent )
428452 axiom = repr (definition .get_axiom_by_ordinal (rule_event .rule_ordinal ))
429453 axiom_expected = get_pattern_from_ordinal (definition_text , rule_event .rule_ordinal )
430454 assert axiom == axiom_expected
431455 assert len (rule_event .substitution ) == 1
432456
457+ # Function exit event (no tail)
458+ function_exit_event = pt .trace [6 ].step_event
459+ assert isinstance (function_exit_event , prooftrace .LLVMFunctionExitEvent )
460+ assert function_exit_event .rule_ordinal == 103
461+ assert function_exit_event .is_tail == False
462+
433463 # Then pattern
434- assert pt .trace [5 ].is_kore_pattern ()
435- kore_pattern = llvm_to_pattern (pt .trace [5 ].kore_pattern )
464+ assert pt .trace [7 ].is_kore_pattern ()
465+ kore_pattern = llvm_to_pattern (pt .trace [7 ].kore_pattern )
436466 k_cell = kore_pattern .patterns [0 ].dict ['args' ][0 ]
437467 assert k_cell ['name' ] == 'kseq'
438468 assert (
@@ -809,11 +839,11 @@ def test_parse_proof_hint_peano(self, hints: bytes, header: prooftrace.KoreHeade
809839 assert len (pt .pre_trace ) == 14
810840
811841 # 776 post-initial-configuration events
812- assert len (pt .trace ) == 776
842+ assert len (pt .trace ) == 916
813843
814844 # Assert that we have a pattern matching failure as the 135th event
815- assert pt .trace [135 ].is_step_event () and isinstance (
816- pt .trace [135 ].step_event , prooftrace .LLVMPatternMatchingFailureEvent
845+ assert pt .trace [160 ].is_step_event () and isinstance (
846+ pt .trace [160 ].step_event , prooftrace .LLVMPatternMatchingFailureEvent
817847 )
818848
819849
0 commit comments