@@ -376,3 +376,44 @@ fn parent() {
376
376
let p = relation. postdom_parent ( 3 ) ;
377
377
assert_eq ! ( p, Some ( 0 ) ) ;
378
378
}
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