diff --git a/R/simulatePedigree.R b/R/simulatePedigree.R index a5ecfa1d..794e8049 100644 --- a/R/simulatePedigree.R +++ b/R/simulatePedigree.R @@ -27,7 +27,20 @@ buildBetweenGenerations <- function(df_Fam, Ngen, sizeGens, verbose = FALSE, mar momID = "momID", dadID = "dadID", code_male = "M", code_female = "F", beta = FALSE) { - if (beta == TRUE || beta %in% c("optimized", "index", "indexed")) { + # Normalize string aliases to logical values for downstream functions + use_optimized <- FALSE + + if (beta %in% c("index", "indexed")) { + stop("The 'index' or 'indexed' option for parameter 'beta' is not yet implemented.") + } else if (isTRUE(beta) || identical(beta, "optimized")) { + use_optimized <- TRUE + } else if (isFALSE(beta) || beta %in% c("base", "original") || is.null(beta)) { + use_optimized <- FALSE + } else { + stop("Invalid value for parameter 'beta'. Accepted values are TRUE, FALSE, 'optimized', 'base', 'original', or 'index'/'indexed'.") + } + + if (use_optimized) { df_Fam <- buildBetweenGenerations_optimized( df_Fam = df_Fam, Ngen = Ngen, @@ -42,9 +55,9 @@ buildBetweenGenerations <- function(df_Fam, Ngen, sizeGens, verbose = FALSE, mar dadID = dadID, code_male = code_male, code_female = code_female, - beta = beta + beta = TRUE ) - } else if (beta == FALSE || beta %in% c("base", "original") || is.null(beta)) { + } else { df_Fam <- buildBetweenGenerations_base( df_Fam = df_Fam, Ngen = Ngen, @@ -59,10 +72,8 @@ buildBetweenGenerations <- function(df_Fam, Ngen, sizeGens, verbose = FALSE, mar dadID = dadID, code_male = code_male, code_female = code_female, - beta = beta + beta = FALSE ) - } else { - stop("Invalid value for beta parameter. Use TRUE/'optimized' or FALSE/'base'.") } return(df_Fam) } diff --git a/R/simulatePedigree_within.R b/R/simulatePedigree_within.R index e2548b4a..b60735b6 100644 --- a/R/simulatePedigree_within.R +++ b/R/simulatePedigree_within.R @@ -17,7 +17,20 @@ buildWithinGenerations <- function( code_female = "F", fam_shift = 1L ) { - if (beta == TRUE || beta == "optimized") { + # Normalize string aliases to logical values for downstream functions + use_optimized <- FALSE + + if (beta %in% c("index", "indexed")) { + stop("The 'index' or 'indexed' option for parameter 'beta' is not yet implemented.") + } else if (isTRUE(beta) || identical(beta, "optimized")) { + use_optimized <- TRUE + } else if (isFALSE(beta) || beta %in% c("base", "original") || is.null(beta)) { + use_optimized <- FALSE + } else { + stop("Invalid value for parameter 'beta'. Accepted values are TRUE, FALSE, 'optimized', 'base', 'original', or 'index'/'indexed'.") + } + + if (use_optimized) { df_Fam <- buildWithinGenerations_optimized( sizeGens = sizeGens, marR = marR, @@ -30,11 +43,9 @@ buildWithinGenerations <- function( code_male = code_male, code_female = code_female, fam_shift = fam_shift, - beta = beta + beta = TRUE ) - } else if (beta %in% c("index", "indexed")) { - stop("The 'index' or 'indexed' option for parameter 'beta' is not yet implemented.") - } else if (beta == FALSE || is.null(beta)) { + } else { df_Fam <- buildWithinGenerations_base( sizeGens = sizeGens, marR = marR, @@ -47,10 +58,8 @@ buildWithinGenerations <- function( code_male = code_male, code_female = code_female, fam_shift = fam_shift, - beta = beta + beta = FALSE ) - } else { - stop("Invalid value for parameter 'beta'. Accepted values are TRUE, FALSE, 'optimized', or 'index'.") } return(df_Fam) } diff --git a/tests/testthat/test-simulatePedigree.R b/tests/testthat/test-simulatePedigree.R index 52dfa1c7..a19bd93f 100644 --- a/tests/testthat/test-simulatePedigree.R +++ b/tests/testthat/test-simulatePedigree.R @@ -165,3 +165,61 @@ test_that("simulatePedigree verbose prints updates", { message("Beta option Ending: ", beta) } }) + +test_that("simulatePedigree accepts string aliases for beta parameter", { + seed <- 5 + Ngen <- 4 + kpc <- 4 + sexR <- .50 + marR <- .7 + + # Test that "optimized" string alias works + set.seed(seed) + result_true <- simulatePedigree(kpc = kpc, Ngen = Ngen, sexR = sexR, marR = marR, beta = TRUE) + + set.seed(seed) + result_optimized <- simulatePedigree(kpc = kpc, Ngen = Ngen, sexR = sexR, marR = marR, beta = "optimized") + + # Results should be identical when using TRUE vs "optimized" + expect_equal(nrow(result_true), nrow(result_optimized)) + expect_equal(ncol(result_true), ncol(result_optimized)) + expect_equal(result_true$ID, result_optimized$ID) + + # Test that "base" string alias works + set.seed(seed) + result_false <- simulatePedigree(kpc = kpc, Ngen = Ngen, sexR = sexR, marR = marR, beta = FALSE) + + set.seed(seed) + result_base <- simulatePedigree(kpc = kpc, Ngen = Ngen, sexR = sexR, marR = marR, beta = "base") + + # Results should be identical when using FALSE vs "base" + expect_equal(nrow(result_false), nrow(result_base)) + expect_equal(ncol(result_false), ncol(result_base)) + expect_equal(result_false$ID, result_base$ID) + + # Test that "original" string alias works + set.seed(seed) + result_original <- simulatePedigree(kpc = kpc, Ngen = Ngen, sexR = sexR, marR = marR, beta = "original") + + # Results should be identical when using FALSE vs "original" + expect_equal(nrow(result_false), nrow(result_original)) + expect_equal(ncol(result_false), ncol(result_original)) + expect_equal(result_false$ID, result_original$ID) + + # Test that invalid beta values throw errors + expect_error( + simulatePedigree(kpc = kpc, Ngen = Ngen, sexR = sexR, marR = marR, beta = "invalid"), + "Invalid value for parameter" + ) + + # Test that "index" and "indexed" both throw appropriate error + expect_error( + simulatePedigree(kpc = kpc, Ngen = Ngen, sexR = sexR, marR = marR, beta = "index"), + "not yet implemented" + ) + + expect_error( + simulatePedigree(kpc = kpc, Ngen = Ngen, sexR = sexR, marR = marR, beta = "indexed"), + "not yet implemented" + ) +})