| 1 | test_that("HungarianAlgorithm provides the correct answer on various inputs", |
| 2 | { |
| 3 | for (n in c(2,3,10,50)) |
| 4 | { |
| 5 | for (repetition in 1:3) |
| 6 | { |
| 7 | # Generate a random vector, and permute it: |
| 8 | # we expect the algorithm to retrieve the permutation |
| 9 | v <- runif(n, min=-1, max=1) |
| 10 | permutation <- sample(1:n) |
| 11 | v_p <- v[permutation] |
| 12 | |
| 13 | # v is reference, v_p is v after permutation |
| 14 | # distances[i,j] = distance between i-th component of v |
| 15 | # and j-th component of v_p |
| 16 | # "in rows : reference; in columns: after permutation" |
| 17 | # "permutation" contains order on v to match v_p as closely as possible |
| 18 | distances <- sapply(v_p, function(elt) ( abs(elt - v) ) ) |
| 19 | assignment <- .hungarianAlgorithm(distances) |
| 20 | expect_equal(assignment, permutation) |
| 21 | } |
| 22 | } |
| 23 | }) |