Skip to content

Commit a69c8fe

Browse files
committed
Check for duplication
1 parent d8bea3c commit a69c8fe

2 files changed

Lines changed: 17 additions & 8 deletions

File tree

R/tree_numbering.R

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -611,6 +611,12 @@ RenumberTips.phylo <- function(tree, tipOrder) {
611611
TipLabels(tipOrder, single = TRUE)
612612
}
613613
if (!identical(startOrder, newOrder)) {
614+
615+
if (any(duplicated(newOrder))) {
616+
stop("Tree labels ", paste0(newOrder[duplicated(newOrder)], collapse = ", "),
617+
" repeated in `tipOrder`")
618+
}
619+
614620
if (length(startOrder) != length(newOrder)) {
615621
startOnly <- setdiff(startOrder, newOrder)
616622
newOnly <- setdiff(newOrder, startOrder)

tests/testthat/test-tree_numbering.R

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,11 @@ expect_postorder <- function(edge) {
1717
}
1818

1919
test_that("RenumberTree() fails safely", {
20-
expect_error(RenumberTree(1:3, 1:4))
21-
expect_error(RenumberTree(1:3, 1:4, 5:6))
22-
expect_error(RenumberTree(1:4, 1:4, 5:6))
20+
expect_error(RenumberTree(1:3, 1:4), "Length.*must match")
21+
expect_error(RenumberTree(1:3, 1:4, 5:6), "Length.*match")
22+
expect_error(RenumberTree(1:4, 1:4, 5:6), "Length mismatch")
2323
})
2424

25-
test_that("RenumberTree() with numeric tipOrder", {
26-
tr <- BalancedTree(6)
27-
order <- c(6, 5, 4, 2, 3, 1)
28-
expect_equal(RenumberTips(tr, order), RenumberTips(tr, TipLabels(order)))
29-
})
3025

3126
test_that("RenumberTree() handles polytomies", {
3227
tr <- ape::read.tree(text = "(a, (b, d, c));")
@@ -95,9 +90,17 @@ test_that("Replacement reorder functions work correctly", {
9590
RenumberEdges(edge[, 1], edge[, 2]))
9691
})
9792

93+
test_that("RenumberTips() with numeric tipOrder", {
94+
tr <- BalancedTree(6)
95+
order <- c(6, 5, 4, 2, 3, 1)
96+
expect_equal(RenumberTips(tr, order), RenumberTips(tr, TipLabels(order)))
97+
})
98+
9899
test_that("RenumberTips() handles misspecification", {
99100
expect_error(RenumberTips(BalancedTree(8), paste0("t", 0:5)),
100101
"Missing in `tree`: t0.*Missing in `tipOrder`: t6, t7, t8")
102+
expect_error(RenumberTips(BalancedTree(8), c(1, 1:8)),
103+
"Tree labels t1 repeated in `tipOrder`")
101104
})
102105

103106
test_that("RenumberTips() works correctly", {

0 commit comments

Comments
 (0)