Nothing
# tests/testthat/test-auction-hang.R
testthat::test_that("Auction finishes quickly (<1s) and without errors", {
testthat::skip_on_cran()
testthat::skip_if_not_installed("clue")
# --------------------------------------------------------------------
# Portable timeout helper
# --------------------------------------------------------------------
run_with_timeout <- function(expr, timeout = 1) {
if ("with_timeout" %in% getNamespaceExports("testthat")) {
return(testthat::with_timeout(timeout, force(expr)))
}
if (requireNamespace("R.utils", quietly = TRUE)) {
return(R.utils::withTimeout(force(expr), timeout = timeout, onTimeout = "error"))
}
on.exit(try(setTimeLimit(cpu = Inf, elapsed = Inf, transient = TRUE), silent = TRUE), add = TRUE)
setTimeLimit(elapsed = timeout, transient = TRUE)
force(expr)
}
# --------------------------------------------------------------------
# Synthetic problem (dense, near-flat)
# --------------------------------------------------------------------
set.seed(1)
n <- 165L
C <- matrix(runif(n * n, 0, 2e-3), n, n)
band <- seq_len(floor(0.2 * n))
C[band, ] <- 0.116 + runif(length(band) * n, 0, 2e-3)
C <- C - min(C)
C <- C / max(1e-12, max(C))
# Sanity check: Hungarian result
res_h <- lap_solve(C, method = "hungarian")
testthat::expect_s3_class(res_h, "lap_solve_result")
testthat::expect_equal(nrow(res_h), n)
testthat::expect_equal(length(unique(res_h$target)), n)
# --------------------------------------------------------------------
# Guarded run (upper bound)
# --------------------------------------------------------------------
call_auction <- function() lap_solve(C, method = "auction")
testthat::expect_error(
run_with_timeout(call_auction(), timeout = 1),
NA
)
# --------------------------------------------------------------------
# Explicit timing + print + strict check
# --------------------------------------------------------------------
timing <- system.time(result <- lap_solve(C, method = "auction"))
elapsed <- unname(timing["elapsed"])
message(sprintf("Auction finished in %.3f seconds", elapsed))
if (!(elapsed < 1.0)) {
testthat::fail(sprintf("Auction took %.3f s, expected < 1.0 s", elapsed))
}
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.