test_that("ci_twinposi returns valid structure", { set.seed(1) n <- 100 p <- 30 X <- matrix(rnorm(n * p), n, p) beta <- rep(0, p) beta[1:3] <- 1 y <- X %*% beta + rnorm(n) X <- scale(X) out <- ci_twinposi(X, y, q = 0.1, boot_rep = 5L, improve_rep = 2L) expect_type(out, "list") expect_named(out, c("CI_upper", "CI_lower", "selected_index", "beta_star")) expect_length(out$selected_index, length(out$CI_upper)) expect_length(out$selected_index, length(out$CI_lower)) expect_true(all(out$CI_upper >= out$CI_lower)) expect_length(out$beta_star, p) })