test_that("mvo_min_variance returns valid weights", { set.seed(1) rets <- matrix(rnorm(1000), ncol = 5) res <- mvo_min_variance(rets) expect_equal(length(res$weights), ncol(rets)) expect_true(all(res$weights >= -1e-8)) expect_equal(sum(res$weights), 1, tolerance = 1e-6) }) test_that("mvo_max_sharpe returns finite metrics", { set.seed(2) rets <- matrix(rnorm(1000), ncol = 4) res <- mvo_max_sharpe(rets, rf = 0.01) expect_true(is.finite(res$mean)) expect_true(is.finite(res$vol)) expect_true(is.finite(res$sharpe)) })