Nothing
# Tests for Classical Test Theory Functions
test_that("CTT functions work with binary data", {
data("J15S500", package = "exametrika")
# Test correct response rate
crr_result <- crr(J15S500)
expect_type(crr_result, "double")
expect_length(crr_result, 15)
expect_true(all(crr_result >= 0 & crr_result <= 1))
expect_true(all(is.finite(crr_result)))
# Test item-total correlation
itc_result <- ItemTotalCorr(J15S500)
expect_type(itc_result, "double")
expect_length(itc_result, 15)
expect_true(all(abs(itc_result) <= 1))
expect_true(all(is.finite(itc_result)))
# Test number-right score
nrs_result <- nrs(J15S500)
expect_type(nrs_result, "double")
expect_length(nrs_result, 500)
expect_true(all(nrs_result >= 0))
expect_true(all(is.finite(nrs_result)))
# Test standardized scores
sscore_result <- sscore(J15S500)
expect_type(sscore_result, "double")
expect_length(sscore_result, 500)
expect_true(abs(mean(sscore_result, na.rm = TRUE)) < 0.1) # Should be near 0
expect_true(abs(sd(sscore_result, na.rm = TRUE) - 1) < 0.1) # Should be near 1
# Test passage rate
passage_result <- passage(J15S500)
expect_type(passage_result, "double")
expect_length(passage_result, 500)
expect_true(all(passage_result >= 0 & passage_result <= 1))
# Test percentiles
percentile_result <- percentile(J15S500)
expect_length(percentile_result, 500)
expect_true(all(percentile_result >= 1 & percentile_result <= 100))
# Test stanines
stanine_result <- stanine(J15S500)
expect_type(stanine_result, "list")
expect_named(stanine_result, c("stanine", "stanineScore"))
expect_length(stanine_result$stanineScore, 500)
})
test_that("Item statistics work correctly", {
data("J15S500", package = "exametrika")
# Test item odds
odds_result <- ItemOdds(J15S500)
expect_type(odds_result, "double")
expect_length(odds_result, 15)
expect_true(all(odds_result > 0)) # Odds should be positive
# Test item thresholds
threshold_result <- ItemThreshold(J15S500)
expect_type(threshold_result, "double")
expect_length(threshold_result, 15)
expect_true(all(is.finite(threshold_result)))
# Test item entropy
entropy_result <- ItemEntropy(J15S500)
expect_type(entropy_result, "double")
expect_length(entropy_result, 15)
expect_true(all(entropy_result >= 0 & entropy_result <= 1))
})
test_that("Inter-item functions work correctly", {
# Use smaller dataset for speed
small_data <- J15S500$U[1:100, 1:5]
formatted_data <- dataFormat(small_data)
# Test joint sample size
jss_result <- JointSampleSize(formatted_data)
expect_s3_class(jss_result, c("exametrika", "matrix"))
expect_equal(dim(jss_result), c(5, 5))
expect_true(all(jss_result >= 0))
# Test joint correct response rate
jcrr_result <- JCRR(formatted_data)
expect_s3_class(jcrr_result, c("exametrika", "matrix"))
expect_equal(dim(jcrr_result), c(5, 5))
expect_true(all(jcrr_result >= 0 & jcrr_result <= 1))
# Test conditional correct response rate
ccrr_result <- CCRR(formatted_data)
expect_s3_class(ccrr_result, c("exametrika", "matrix"))
expect_equal(dim(ccrr_result), c(5, 5))
# Test phi coefficient
phi_result <- PhiCoefficient(formatted_data)
expect_s3_class(phi_result, c("exametrika", "matrix"))
expect_equal(dim(phi_result), c(5, 5))
})
test_that("CTT error handling works", {
# Test with wrong data type (25 rows)
set.seed(300)
ordinal_data <- matrix(sample(1:4, 25 * 4, replace = TRUE), nrow = 25, ncol = 4)
formatted_ordinal <- dataFormat(ordinal_data)
# These should fail with ordinal data
expect_error(crr(formatted_ordinal))
expect_error(nrs(formatted_ordinal))
expect_error(passage(formatted_ordinal))
})
test_that("CTT performance is acceptable", {
data("J15S500", package = "exametrika")
# Time some key computations
start_time <- Sys.time()
crr_result <- crr(J15S500)
itc_result <- ItemTotalCorr(J15S500)
sscore_result <- sscore(J15S500)
elapsed <- as.numeric(Sys.time() - start_time, units = "secs")
expect_true(elapsed < 1) # Should be very fast
expect_length(crr_result, 15)
expect_length(itc_result, 15)
expect_length(sscore_result, 500)
})
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.