tests/testthat/test-roc.utils.R

library(pROC)
data(aSAH)

context("roc.utils")

test_that("roc_utils_thr_idx finds correc thresholds with direction=<", {
  obtained <- pROC:::roc_utils_thr_idx(r.s100b, c(-Inf, 0.205, 0.055, Inf))
  expect_equal(obtained, c(1, 18, 4, 51))
})

test_that("roc_utils_thr_idx finds correc thresholds with direction=>", {
  obtained <- pROC:::roc_utils_thr_idx(r.s100b, c(Inf, -Inf, 0.05, 0.055, 0.52, 0.205))
  expect_equal(obtained, c(51, 1, 3, 4, 40, 18))
})

test_that("roc_utils_calc_coords works", {
  obtained <- pROC:::roc_utils_calc_coords(r.s100b, -1:-4, c(1, .5, .1, 0), c(0, .5, .9, 1), c(12, .9))
  expect_equal(obtained, expected_roc_utils_calc_coords)
})

test_that("roc_utils_calc_coords works with percent", {
  obtained <- pROC:::roc_utils_calc_coords(r.s100b.percent, -1:-4, c(100, 50, 10, 0), c(0, 50, 90, 100), c(12, .9))
  expect_equal(obtained, expected_roc_utils_calc_coords.percent)
})

test_that("roc_utils_match_coords_input_args works", {
  expect_equal(pROC:::roc_utils_match_coords_input_args("t"), "threshold")
  expect_equal(pROC:::roc_utils_match_coords_input_args("threshold"), "threshold")
  expect_equal(pROC:::roc_utils_match_coords_input_args("fp"), "fp")
  expect_equal(pROC:::roc_utils_match_coords_input_args("1-se"), "1-sensitivity")
  for (coord in names(which(pROC:::coord.is.monotone))) {
    expect_equal(pROC:::roc_utils_match_coords_input_args(coord), coord)
  }

  # Errors
  # t with threshold=False
  expect_error(pROC:::roc_utils_match_coords_input_args("t", threshold = FALSE))
  # all only for ret
  expect_error(pROC:::roc_utils_match_coords_input_args("all"))
  # Only one allowed
  expect_error(pROC:::roc_utils_match_coords_input_args(c("specificity", "sensitivity")))
  # Invalid arg
  expect_error(pROC:::roc_utils_match_coords_input_args("blah"))
  # Not monotone
  expect_error(pROC:::roc_utils_match_coords_input_args("npe"))
  expect_error(pROC:::roc_utils_match_coords_input_args("accuracy"))
})


test_that("roc_utils_match_coords_ret_args works", {
  expect_equal(pROC:::roc_utils_match_coords_ret_args("t"), "threshold")
  expect_equal(pROC:::roc_utils_match_coords_ret_args("threshold"), "threshold")
  expect_equal(pROC:::roc_utils_match_coords_ret_args("fp"), "fp")
  expect_equal(pROC:::roc_utils_match_coords_ret_args("1-se"), "1-sensitivity")
  expect_equal(pROC:::roc_utils_match_coords_ret_args("npe"), "1-npv")
  for (coord in pROC:::roc.utils.valid.coords) {
    expect_equal(pROC:::roc_utils_match_coords_ret_args(coord), coord)
  }
  expect_equal(pROC:::roc_utils_match_coords_ret_args(pROC:::roc.utils.valid.coords), pROC:::roc.utils.valid.coords)

  # Errors
  # t with threshold=False
  expect_error(pROC:::roc_utils_match_coords_ret_args("t", threshold = FALSE))
  # Invalid arg
  expect_error(pROC:::roc_utils_match_coords_ret_args("blah"))
  # The following should be invalid but somehow it seems valid to say:
  # match.arg(c("sensitivity", "blah"), "sensitivity", TRUE)
  # and the extra 'blah' arg is ignored by match.arg.
  # Ignoring for now
  # expect_error(pROC:::roc_utils_match_coords_ret_args(c("sensitivity", "blah")))
})

Try the pROC package in your browser

Any scripts or data that you put into this service are public.

pROC documentation built on Aug. 8, 2025, 6:28 p.m.