Nothing
# Unit tests for the village
test_that("the initial models can properly set village states", {
# Create the function that sets the initial state
initial_condition <- function(curent_state, model_data, population_manager, resource_mgr) {
# Set some initial conditions for resource stocks
resource_mgr$add_resource(resource$new(name = "corn", quantity = 5))
resource_mgr$add_resource(resource$new(name = "salmon", quantity = 6))
}
new_village <- village$new("Test_Village", initial_condition = initial_condition, models = list())
simulator <- simulation$new(1, villages = list(new_village))
simulator$run_model()
last_record <- simulator$villages[[1]]$current_state$resource_states
# Check that the initial state of corn is 5
corn_row <- match("corn", last_record$name)
corn_row <- last_record[corn_row, ]
testthat::expect_equal(corn_row$quantity, 5)
# Check that it was copied to the second day's state
salmon_row <- match("salmon", last_record$name)
salmon_row <- last_record[salmon_row, ]
testthat::expect_equal(salmon_row$quantity, 6)
})
test_that("the initial condition is properly set", {
# Check that the initial state is passed into the user's model on the first year
# This makes sure that models can set initial states inside their code
initial_condition <- function(curent_state, model_data, population_manager, resource_mgr) {
resource_mgr$add_resource(resource$new(name = "corn", quantity = 5))
resource_mgr$add_resource(resource$new(name = "salmon", quantity = 6))
}
new_village <- village$new("Test_Village", initial_condition)
simulator <- simulation$new(1, villages = list(new_village))
simulator$run_model()
last_record <- simulator$villages[[1]]$current_state$resource_states
# Check that the initial state of corn is 5
corn_row <- match("corn", last_record$name)
corn_row <- last_record[corn_row, ]
testthat::expect_equal(corn_row$quantity, 5)
# Check that it was copied to the second day's state
salmon_row <- match("salmon", last_record$name)
salmon_row <- last_record[salmon_row, ]
testthat::expect_equal(salmon_row$quantity, 6)
})
test_that("propagate runs a custom model", {
initial_condition <- function(curent_state, model_data, agent_mgr, resource_mgr) {
resource_mgr$add_resource(resource$new(name = "corn", quantity = 5))
}
corn_model <- function(curent_state, previous_state, model_data, agent_mgr, resource_mgr) {
if (curent_state$step == 3) {
# On the third day add 5 corn
corn_resource <- resource_mgr$get_resource("corn")
corn_resource$quantity <- corn_resource$quantity + 5
}
}
new_village <- village$new("Test_Village", initial_condition, models = corn_model)
simulator <- simulation$new(3, villages = list(new_village))
simulator$run_model()
last_record <- simulator$villages[[1]]$current_state$resource_states
corn_row <- match("corn", last_record$name)
corn_row <- last_record[corn_row, ]
testthat::expect_equal(corn_row$quantity, 10)
})
test_that("propagate runs multiple custom models", {
initial_conditions <- function(curent_state, model_data, agent_mgr, resource_mgr) {
resource_mgr$add_resource(resource$new(name = "corn", quantity = 5))
resource_mgr$add_resource(resource$new(name = "salmon", quantity = 1))
}
corn_model <- function(curent_state, previous_state, model_data, agent_mgr, resource_mgr) {
corn <- resource_mgr$get_resource("corn")
corn$quantity <- corn$quantity + 1
}
salmon_model <- function(curent_state, previous_state, model_data, agent_mgr, resource_mgr) {
salmon <- resource_mgr$get_resource("salmon")
salmon$quantity <- salmon$quantity + 1
}
new_village <- village$new("Test_Village", initial_conditions, models = list(corn_model, salmon_model))
simulator <- simulation$new(2, villages = list(new_village))
simulator$run_model()
testthat::expect_length(simulator$villages, 1)
last_record <- simulator$villages[[1]]$current_state$resource_states
corn_row <- match("corn", last_record$name)
corn_row <- last_record[corn_row, ]
salmon_row <- match("salmon", last_record$name)
salmon_row <- last_record[salmon_row, ]
testthat::expect_equal(corn_row$quantity, 7)
testthat::expect_equal(salmon_row$quantity, 3)
})
test_that("The previous state is recorded", {
initial_conditions <- function(curent_state, model_data, agent_mgr, resource_mgr) {
resource_mgr$add_resource(resource$new(name = "corn", quantity = 5))
resource_mgr$add_resource(resource$new(name = "salmon", quantity = 1))
}
corn_model <- function(curent_state, previous_state, model_data, agent_mgr, resource_mgr) {
corn <- resource_mgr$get_resource("corn")
corn$quantity <- corn$quantity + 1
}
salmon_model <- function(curent_state, previous_state, model_data, agent_mgr, resource_mgr) {
salmon <- resource_mgr$get_resource("salmon")
salmon$quantity <- salmon$quantity + 1
}
new_village <- village$new("Test_Village", initial_conditions, models = list(corn_model, salmon_model))
simulator <- simulation$new(2, villages = list(new_village))
simulator$run_model()
testthat::expect_length(simulator$villages, 1)
last_record <- simulator$villages[[1]]$current_state$resource_states
corn_row <- match("corn", last_record$name)
corn_row <- last_record[corn_row, ]
salmon_row <- match("salmon", last_record$name)
salmon_row <- last_record[salmon_row, ]
testthat::expect_equal(corn_row$quantity, 7)
testthat::expect_equal(salmon_row$quantity, 3)
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.