Skip to content

Commit 2a25876

Browse files
committed
add test cases suggested by pnkfelix
1 parent 36809bf commit 2a25876

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed

src/librustc_data_structures/transitive_relation.rs

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -464,3 +464,85 @@ fn bub_lub() {
464464
assert_eq!(relation.minimal_upper_bounds(&"a", &"b"), vec![&"x"]);
465465
assert_eq!(relation.best_upper_bound(&"a", &"b"), Some(&"x"));
466466
}
467+
468+
#[test]
469+
fn mubs_intermediate_node_on_one_side_only() {
470+
// a -> c -> d
471+
// ^
472+
// |
473+
// b
474+
475+
// "digraph { a -> c -> d; b -> d; }",
476+
let mut relation = TransitiveRelation::new();
477+
relation.add("a", "c");
478+
relation.add("c", "d");
479+
relation.add("b", "d");
480+
481+
assert_eq!(relation.minimal_upper_bounds(&"a", &"b"), vec![&"d"]);
482+
}
483+
484+
#[test]
485+
fn mubs_scc_1() {
486+
// +-------------+
487+
// | +----+ |
488+
// | v | |
489+
// a -> c -> d <-+
490+
// ^
491+
// |
492+
// b
493+
494+
// "digraph { a -> c -> d; d -> c; a -> d; b -> d; }",
495+
let mut relation = TransitiveRelation::new();
496+
relation.add("a", "c");
497+
relation.add("c", "d");
498+
relation.add("d", "c");
499+
relation.add("a", "d");
500+
relation.add("b", "d");
501+
502+
assert_eq!(relation.minimal_upper_bounds(&"a", &"b"), vec![&"c"]);
503+
}
504+
505+
#[test]
506+
fn mubs_scc_2() {
507+
// +----+
508+
// v |
509+
// a -> c -> d
510+
// ^ ^
511+
// | |
512+
// +--- b
513+
514+
// "digraph { a -> c -> d; d -> c; b -> d; b -> c; }",
515+
let mut relation = TransitiveRelation::new();
516+
relation.add("a", "c");
517+
relation.add("c", "d");
518+
relation.add("d", "c");
519+
relation.add("b", "d");
520+
relation.add("b", "c");
521+
522+
assert_eq!(relation.minimal_upper_bounds(&"a", &"b"), vec![&"c"]);
523+
}
524+
525+
#[test]
526+
fn mubs_scc_3() {
527+
// +---------+
528+
// v |
529+
// a -> c -> d -> e
530+
// ^ ^
531+
// | |
532+
// b ---+
533+
534+
// "digraph { a -> c -> d -> e -> c; b -> d; b -> e; }",
535+
let mut relation = TransitiveRelation::new();
536+
relation.add("a", "c");
537+
relation.add("c", "d");
538+
relation.add("e", "e");
539+
relation.add("e", "c");
540+
relation.add("b", "d");
541+
relation.add("b", "e");
542+
543+
assert_eq!(relation.minimal_upper_bounds(&"a", &"b"), vec![&"c"]);
544+
}
545+
546+
/*
547+
"digraph { a -> c -> d -> e -> c; a -> d; b -> e; }"
548+
*/

0 commit comments

Comments
 (0)