@@ -7,14 +7,13 @@ use std::{
77
88use miden_assembly_syntax:: { ast:: Path , diagnostics:: WrapErr , library:: LibraryExport } ;
99use miden_core:: {
10- EventId , Operation , Program , Word , assert_matches,
11- mast:: {
12- BasicBlockNodeBuilder , JoinNodeBuilder , MastForestContributor , MastNodeExt , MastNodeId ,
13- SplitNodeBuilder ,
14- } ,
10+ EventId , Operation , Program , StackInputs , Word , assert_matches,
11+ mast:: { MastNodeExt , MastNodeId } ,
1512 utils:: { Deserializable , Serializable } ,
1613} ;
1714use miden_mast_package:: { MastArtifact , MastForest , Package , PackageExport , PackageManifest } ;
15+ #[ cfg( test) ]
16+ use miden_processor:: { AdviceInputs , DefaultHost , ExecutionOptions } ;
1817use proptest:: {
1918 prelude:: * ,
2019 test_runner:: { Config , TestRunner } ,
@@ -3932,11 +3931,8 @@ fn distinguish_grandchildren_correctly() {
39323931///
39333932/// This test is disabled because with debug mode always enabled (issue #1821),
39343933/// nodes get unique debug decorators and are no longer de-duplicated.
3935- /// The old behavior where nodes could be de-duplicated when debug mode was off
3936- /// is no longer applicable.
3937- #[ ignore]
39383934#[ test]
3939- fn duplicate_nodes ( ) {
3935+ fn duplicate_nodes_with_debug_decorators ( ) {
39403936 let context = TestContext :: new ( ) ;
39413937
39423938 let program_source = r#"
@@ -3950,41 +3946,40 @@ fn duplicate_nodes() {
39503946 "# ;
39513947
39523948 let program = context. assemble ( program_source) . unwrap ( ) ;
3949+ let mast_forest = program. mast_forest ( ) ;
39533950
3954- let mut expected_mast_forest = MastForest :: new ( ) ;
3955-
3956- let fmp_initialization = BasicBlockNodeBuilder :: new ( fmp_initialization_sequence ( ) , Vec :: new ( ) )
3957- . add_to_forest ( & mut expected_mast_forest)
3958- . unwrap ( ) ;
3959-
3960- let mul_basic_block_id = BasicBlockNodeBuilder :: new ( vec ! [ Operation :: Mul ] , Vec :: new ( ) )
3961- . add_to_forest ( & mut expected_mast_forest)
3962- . unwrap ( ) ;
3963-
3964- let add_basic_block_id = BasicBlockNodeBuilder :: new ( vec ! [ Operation :: Add ] , Vec :: new ( ) )
3965- . add_to_forest ( & mut expected_mast_forest)
3966- . unwrap ( ) ;
3967-
3968- // inner split: `if.true add else mul end`
3969- let inner_split_id = SplitNodeBuilder :: new ( [ add_basic_block_id, mul_basic_block_id] )
3970- . add_to_forest ( & mut expected_mast_forest)
3971- . unwrap ( ) ;
3972-
3973- // outer split
3974- let outer_split_id = SplitNodeBuilder :: new ( [ mul_basic_block_id, inner_split_id] )
3975- . add_to_forest ( & mut expected_mast_forest)
3976- . unwrap ( ) ;
3977-
3978- // root: outer split
3979- let root_id = JoinNodeBuilder :: new ( [ fmp_initialization, outer_split_id] )
3980- . add_to_forest ( & mut expected_mast_forest)
3981- . unwrap ( ) ;
3951+ // With debug mode always enabled, we should have debug decorators
3952+ assert ! (
3953+ !mast_forest. decorators( ) . is_empty( ) ,
3954+ "Should have debug decorators with always-enabled debug mode"
3955+ ) ;
39823956
3983- expected_mast_forest. make_root ( root_id) ;
3957+ // Count nodes - should be more than before due to unique debug decorators
3958+ // The exact number depends on implementation, but should be greater than the minimum expected
3959+ assert ! (
3960+ mast_forest. num_nodes( ) > 3 ,
3961+ "Should have more nodes with debug decorators enabled"
3962+ ) ;
39843963
3985- let expected_program = Program :: new ( expected_mast_forest. into ( ) , root_id) ;
3964+ // Verify the program can be executed (functional test)
3965+ let mut host = DefaultHost :: default ( ) ;
3966+ let result = miden_processor:: execute (
3967+ & program,
3968+ StackInputs :: default ( ) ,
3969+ AdviceInputs :: default ( ) ,
3970+ & mut host,
3971+ ExecutionOptions :: default ( ) ,
3972+ ) ;
3973+ assert ! ( result. is_ok( ) , "Program should execute successfully" ) ;
39863974
3987- assert_eq ! ( expected_program, program) ;
3975+ // Check that we have the expected control flow structure
3976+ // With debug decorators enabled, the program should have more nodes due to less deduplication
3977+ let nodes = mast_forest. nodes ( ) ;
3978+ let has_mul_operations = nodes. iter ( ) . any ( |node| {
3979+ matches ! ( node, miden_core:: mast:: MastNode :: Block ( bb)
3980+ if bb. operations( ) . any( |op| op == & Operation :: Mul ) )
3981+ } ) ;
3982+ assert ! ( has_mul_operations, "Should contain mul operations in control flow" ) ;
39883983}
39893984
39903985#[ test]
@@ -4262,10 +4257,8 @@ end"#
42624257///
42634258/// This test is disabled because with debug mode always enabled (issue #1821),
42644259/// we no longer have the ability to turn debug mode off. The old functionality
4265- /// where debug mode could be enabled/disabled is no longer available.
4266- #[ ignore]
42674260#[ test]
4268- fn test_assembler_debug_info_conditional ( ) {
4261+ fn test_assembler_debug_info_present ( ) {
42694262 let context = TestContext :: default ( ) ;
42704263 let source = r#"
42714264 pub proc foo
@@ -4275,14 +4268,24 @@ fn test_assembler_debug_info_conditional() {
42754268
42764269 let module = parse_module ! ( & context, "test::foo" , source) ;
42774270
4278- // Test: With debug mode always enabled, debug info should always be present
4271+ // Test: With debug mode always enabled (issue #1821) , debug info should always be present
42794272 let assembler = Assembler :: default ( ) ;
42804273 let library = assembler. assemble_library ( [ module] ) . unwrap ( ) ;
42814274 let mast_forest = library. mast_forest ( ) ;
42824275
42834276 // Debug info should be present since debug mode is always enabled
42844277 assert ! (
42854278 !mast_forest. decorators( ) . is_empty( ) ,
4286- "Debug info should be present when assembler is in debug mode"
4279+ "Debug info should be present with always-enabled debug mode"
4280+ ) ;
4281+
4282+ // Specifically check for AsmOp decorators that track instruction execution
4283+ let has_asmop_decorators = mast_forest
4284+ . decorators ( )
4285+ . iter ( )
4286+ . any ( |d| matches ! ( d, miden_core:: Decorator :: AsmOp ( _) ) ) ;
4287+ assert ! (
4288+ has_asmop_decorators,
4289+ "AsmOp decorators should be present for tracking instructions"
42874290 ) ;
42884291}
0 commit comments