lst <- data_altman()
pathology <- lst$pathology
path_tbl <- lst$path_tbl

###################################################################

test_that("switch event definition", {
  rlang::local_options(
    yardstick.event_first = FALSE,
    lifecycle_verbosity = "quiet"
  )

  expect_equal(
    sens(pathology, truth = "pathology", estimate = "scan")[[".estimate"]],
    77 / 86
  )
  expect_equal(
    sens(path_tbl)[[".estimate"]],
    77 / 86
  )
  expect_equal(
    spec(pathology, truth = "pathology", estimate = "scan")[[".estimate"]],
    162 / 258
  )
  expect_equal(
    spec(path_tbl)[[".estimate"]],
    162 / 258
  )
  expect_equal(
    j_index(pathology, truth = "pathology", estimate = "scan")[[".estimate"]],
    (162 / 258) + (77 / 86) - 1
  )
  expect_equal(
    mcc(pathology, truth = "pathology", estimate = "scan")[[".estimate"]],
    ((231 * 54) - (32 * 27)) / sqrt((231 + 32) * (231 + 27) * (54 + 32) * (54 + 27))
  )
})

test_that("global option is ignored in multiclass metrics", {
  rlang::local_options(lifecycle_verbosity = "quiet")

  expect_equal(
    rlang::with_options(
      accuracy(hpc_cv, obs, pred)[[".estimate"]],
      yardstick.event_first = TRUE
    ),
    rlang::with_options(
      accuracy(hpc_cv, obs, pred)[[".estimate"]],
      yardstick.event_first = FALSE
    )
  )

  expect_equal(
    rlang::with_options(
      bal_accuracy(hpc_cv, obs, pred)[[".estimate"]],
      yardstick.event_first = TRUE
    ),
    rlang::with_options(
      bal_accuracy(hpc_cv, obs, pred)[[".estimate"]],
      yardstick.event_first = FALSE
    )
  )

  expect_equal(
    rlang::with_options(
      detection_prevalence(hpc_cv, obs, pred)[[".estimate"]],
      yardstick.event_first = TRUE
    ),
    rlang::with_options(
      detection_prevalence(hpc_cv, obs, pred)[[".estimate"]],
      yardstick.event_first = FALSE
    )
  )

  expect_equal(
    rlang::with_options(
      f_meas(hpc_cv, obs, pred)[[".estimate"]],
      yardstick.event_first = TRUE
    ),
    rlang::with_options(
      f_meas(hpc_cv, obs, pred)[[".estimate"]],
      yardstick.event_first = FALSE
    )
  )

  expect_equal(
    rlang::with_options(
      j_index(hpc_cv, obs, pred)[[".estimate"]],
      yardstick.event_first = TRUE
    ),
    rlang::with_options(
      j_index(hpc_cv, obs, pred)[[".estimate"]],
      yardstick.event_first = FALSE
    )
  )

  expect_equal(
    rlang::with_options(
      kap(hpc_cv, obs, pred)[[".estimate"]],
      yardstick.event_first = TRUE
    ),
    rlang::with_options(
      kap(hpc_cv, obs, pred)[[".estimate"]],
      yardstick.event_first = FALSE
    )
  )

  expect_equal(
    rlang::with_options(
      mcc(hpc_cv, obs, pred)[[".estimate"]],
      yardstick.event_first = TRUE
    ),
    rlang::with_options(
      mcc(hpc_cv, obs, pred)[[".estimate"]],
      yardstick.event_first = FALSE
    )
  )

  expect_equal(
    rlang::with_options(
      npv(hpc_cv, obs, pred)[[".estimate"]],
      yardstick.event_first = TRUE
    ),
    rlang::with_options(
      npv(hpc_cv, obs, pred)[[".estimate"]],
      yardstick.event_first = FALSE
    )
  )

  expect_equal(
    rlang::with_options(
      ppv(hpc_cv, obs, pred)[[".estimate"]],
      yardstick.event_first = TRUE
    ),
    rlang::with_options(
      ppv(hpc_cv, obs, pred)[[".estimate"]],
      yardstick.event_first = FALSE
    )
  )

  expect_equal(
    rlang::with_options(
      precision(hpc_cv, obs, pred)[[".estimate"]],
      yardstick.event_first = TRUE
    ),
    rlang::with_options(
      precision(hpc_cv, obs, pred)[[".estimate"]],
      yardstick.event_first = FALSE
    )
  )

  expect_equal(
    rlang::with_options(
      recall(hpc_cv, obs, pred)[[".estimate"]],
      yardstick.event_first = TRUE
    ),
    rlang::with_options(
      recall(hpc_cv, obs, pred)[[".estimate"]],
      yardstick.event_first = FALSE
    )
  )

  expect_equal(
    rlang::with_options(
      sens(hpc_cv, obs, pred)[[".estimate"]],
      yardstick.event_first = TRUE
    ),
    rlang::with_options(
      sens(hpc_cv, obs, pred)[[".estimate"]],
      yardstick.event_first = FALSE
    )
  )


  expect_equal(
    rlang::with_options(
      spec(hpc_cv, obs, pred)[[".estimate"]],
      yardstick.event_first = TRUE
    ),
    rlang::with_options(
      spec(hpc_cv, obs, pred)[[".estimate"]],
      yardstick.event_first = FALSE
    )
  )

  expect_equal(
    rlang::with_options(
      gain_capture(hpc_cv, obs, VF:L)[[".estimate"]],
      yardstick.event_first = TRUE
    ),
    rlang::with_options(
      gain_capture(hpc_cv, obs, VF:L)[[".estimate"]],
      yardstick.event_first = FALSE
    )
  )

  expect_equal(
    rlang::with_options(
      gain_curve(hpc_cv, obs, VF:L)[[".estimate"]],
      yardstick.event_first = TRUE
    ),
    rlang::with_options(
      gain_curve(hpc_cv, obs, VF:L)[[".estimate"]],
      yardstick.event_first = FALSE
    )
  )

  expect_equal(
    rlang::with_options(
      lift_curve(hpc_cv, obs, VF:L)[[".estimate"]],
      yardstick.event_first = TRUE
    ),
    rlang::with_options(
      lift_curve(hpc_cv, obs, VF:L)[[".estimate"]],
      yardstick.event_first = FALSE
    )
  )

  expect_equal(
    rlang::with_options(
      mn_log_loss(hpc_cv, obs, VF:L)[[".estimate"]],
      yardstick.event_first = TRUE
    ),
    rlang::with_options(
      mn_log_loss(hpc_cv, obs, VF:L)[[".estimate"]],
      yardstick.event_first = FALSE
    )
  )

  expect_equal(
    rlang::with_options(
      pr_auc(hpc_cv, obs, VF:L)[[".estimate"]],
      yardstick.event_first = TRUE
    ),
    rlang::with_options(
      pr_auc(hpc_cv, obs, VF:L)[[".estimate"]],
      yardstick.event_first = FALSE
    )
  )

  expect_equal(
    rlang::with_options(
      pr_curve(hpc_cv, obs, VF:L)[[".estimate"]],
      yardstick.event_first = TRUE
    ),
    rlang::with_options(
      pr_curve(hpc_cv, obs, VF:L)[[".estimate"]],
      yardstick.event_first = FALSE
    )
  )

  # testing hand till
  expect_equal(
    rlang::with_options(
      roc_auc(hpc_cv, obs, VF:L)[[".estimate"]],
      yardstick.event_first = TRUE
    ),
    rlang::with_options(
      roc_auc(hpc_cv, obs, VF:L)[[".estimate"]],
      yardstick.event_first = FALSE
    )
  )

  # testing macro
  expect_equal(
    rlang::with_options(
      roc_auc(hpc_cv, obs, VF:L, estimator = "macro")[[".estimate"]],
      yardstick.event_first = TRUE
    ),
    rlang::with_options(
      roc_auc(hpc_cv, obs, VF:L, estimator = "macro")[[".estimate"]],
      yardstick.event_first = FALSE
    )
  )

  expect_equal(
    rlang::with_options(
      roc_curve(hpc_cv, obs, VF:L)[[".estimate"]],
      yardstick.event_first = TRUE
    ),
    rlang::with_options(
      roc_curve(hpc_cv, obs, VF:L)[[".estimate"]],
      yardstick.event_first = FALSE
    )
  )
})
