test_that("translate_delay handles Vensim equations", { eq <- "outflow==DELAY_FIXED(inflow,2,0)" actual <- translate_delay(eq, "Vensim") expected <- "sd_fixed_delay('inflow',time,2,0,.memory)" expect_equal(actual, expected) }) test_that("sd_fixed_delay() works", { mdl_text <- '
Vensim Ventana Systems, Inc.
0 100
1
outflow= DELAY_FIXED ( inflow, 2, 0) 0 inflow outflow 3 + STEP(3, 2)
' ds_comp <- xmile_to_deSolve(mdl_text) output <- sd_simulate(ds_comp, integ_method = "euler", start_time = 0, stop_time = 6, timestep = 0.25) actual <- output$outflow expected <- c(rep(0, 8), rep(3, 8), rep(6, 9)) expect_equal(actual, expected) }) test_that("translate_DELAYN() returns the expected list", { actual <- translate_DELAYN(var_name = "I_to_R", eq = "DELAYN(E_to_I,1/par_gamma,k,par_gamma*I0)", vendor = "isee", consts = list(list(name = "I0", value = 1), list(name = "par_gamma", value = 0.5), list(name = "k", value = 2)), inits_vector = NULL) expected <- list( variable_list = list( list(name = "I_to_R", equation = "dly_E_to_I_2_out"), list(name = "dly_E_to_I_1_out", equation = "dly_E_to_I_1/((2)/2.0)"), list(name = "dly_E_to_I_2_out", equation = "dly_E_to_I_2/((2)/2.0)")), stock_list = list( list(name = "dly_E_to_I_1", equation = "E_to_I - dly_E_to_I_1_out", initValue = 0.5), list(name = "dly_E_to_I_2", equation = "dly_E_to_I_1_out - dly_E_to_I_2_out", initValue = 0.5)), delay_order = 2) expect_equal(actual, expected) }) # identify_delayed_vars------------------------------------------------------------ test_that("identify_delayed_vars() works", { variables <- list( list(name = "inflow", equation ="a*stock"), list(name = "outflow", equation = "sd_fixed_delay('inflow', 6, 2, 0, .memory)") ) actual_obj <- identify_delayed_vars(variables) expected_obj <- c("inflow") expect_equal(actual_obj, expected_obj) }) # stc_vars_DELAY --------------------------------------------------------------- test_that("stc_vars_DELAYN() returns the expected list", { name <- "I_to_R" input <- "E_to_I" duration <- 2 delay_order <- 5 init <- 0.2 eq <- "DELAYN(E_to_I,2,k,0.5)" actual <- stc_vars_DELAYN(name, input, duration, delay_order, init, eq) expected <- list( variable_list = list( list(name = "I_to_R", equation = "dly_E_to_I_5_out"), list(name = "dly_E_to_I_1_out", equation = "dly_E_to_I_1/((2)/5.0)"), list(name = "dly_E_to_I_2_out", equation = "dly_E_to_I_2/((2)/5.0)"), list(name = "dly_E_to_I_3_out", equation = "dly_E_to_I_3/((2)/5.0)"), list(name = "dly_E_to_I_4_out", equation = "dly_E_to_I_4/((2)/5.0)"), list(name = "dly_E_to_I_5_out", equation = "dly_E_to_I_5/((2)/5.0)")), stock_list = list( list(name = "dly_E_to_I_1", equation = "E_to_I - dly_E_to_I_1_out", initValue = 0.2), list(name = "dly_E_to_I_2", equation = "dly_E_to_I_1_out - dly_E_to_I_2_out", initValue = 0.2), list(name = "dly_E_to_I_3", equation = "dly_E_to_I_2_out - dly_E_to_I_3_out", initValue = 0.2), list(name = "dly_E_to_I_4", equation = "dly_E_to_I_3_out - dly_E_to_I_4_out", initValue = 0.2), list(name = "dly_E_to_I_5", equation = "dly_E_to_I_4_out - dly_E_to_I_5_out", initValue = 0.2)), delay_order = 5) expect_equal(actual, expected) })