@@ -376,3 +376,44 @@ fn parent() {
376376 let p = relation. postdom_parent ( 3 ) ;
377377 assert_eq ! ( p, Some ( 0 ) ) ;
378378}
379+
380+ #[ test]
381+ fn minimal_scc_representative_1 ( ) {
382+ // +---------+
383+ // v |
384+ // a -> c -> d -> e
385+ // ^ ^
386+ // | |
387+ // b ---+
388+
389+ // "digraph { a -> c -> d -> e -> c; b -> d; b -> e; }",
390+ let mut relation = TransitiveRelationBuilder :: default ( ) ;
391+ relation. add ( "a" , "c" ) ;
392+ relation. add ( "c" , "d" ) ;
393+ relation. add ( "d" , "e" ) ;
394+ relation. add ( "e" , "c" ) ;
395+ relation. add ( "b" , "d" ) ;
396+ relation. add ( "b" , "e" ) ;
397+ let relation = relation. freeze ( ) ;
398+
399+ assert_eq ! ( relation. minimal_scc_representative( "a" ) , "a" ) ;
400+ assert_eq ! ( relation. minimal_scc_representative( "b" ) , "b" ) ;
401+ assert_eq ! ( relation. minimal_scc_representative( "c" ) , "c" ) ;
402+ assert_eq ! ( relation. minimal_scc_representative( "d" ) , "c" ) ;
403+ assert_eq ! ( relation. minimal_scc_representative( "e" ) , "c" ) ;
404+ }
405+
406+ #[ test]
407+ fn minimal_scc_representative_2 ( ) {
408+ // "digraph { a -> b; a -> a; b -> a; c -> c}",
409+ let mut relation = TransitiveRelationBuilder :: default ( ) ;
410+ relation. add ( "a" , "b" ) ;
411+ relation. add ( "b" , "a" ) ;
412+ relation. add ( "a" , "a" ) ;
413+ relation. add ( "c" , "c" ) ;
414+ let relation = relation. freeze ( ) ;
415+
416+ assert_eq ! ( relation. minimal_scc_representative( "a" ) , "a" ) ;
417+ assert_eq ! ( relation. minimal_scc_representative( "b" ) , "a" ) ;
418+ assert_eq ! ( relation. minimal_scc_representative( "c" ) , "c" ) ;
419+ }
0 commit comments