test_that("kernel_regression runs and returns expected structure", { set.seed(123) f <- function(x) 5*sin(x) + 23*(cos(x))^2 n <- 80 X <- runif(n, 5, 15) Y <- f(X) + rnorm(n, 0, 3) out <- kernel_regression( X, Y, kernel = "tricube", bandwidths = c(1, 5, 10), n_repeats = 5, train_ratio = 0.8 ) # Structure expect_type(out, "list") expect_true(all(c("results", "best_h", "x_grid", "y_smooth") %in% names(out))) # results must be data.frame expect_s3_class(out$results, "data.frame") # columns present expect_true(all(c("h", "Avg_Train_MSE", "Avg_Test_MSE") %in% names(out$results))) # bandwidth list not empty expect_gt(nrow(out$results), 0) # best_h is numeric expect_type(out$best_h, "double") # x_grid and y_smooth have same length expect_equal(length(out$x_grid), length(out$y_smooth)) # no NaN in results expect_false(any(is.na(out$results$Avg_Train_MSE))) expect_false(any(is.na(out$results$Avg_Test_MSE))) })