Skip to content

Commit 7e8e4e1

Browse files
committed
missing test for secirvvs
1 parent 86136fd commit 7e8e4e1

1 file changed

Lines changed: 84 additions & 0 deletions

File tree

cpp/tests/test_dynamic_npis.cpp

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -756,6 +756,90 @@ TEST(DynamicNPIs, secirvvs_delayed_implementation)
756756
EXPECT_EQ(contact_matrix_sim_3.get_matrix_at(mio::SimulationTime<double>(11.0))(0, 0), 0.5);
757757
}
758758

759+
TEST(DynamicNPIs, secirvvs_implementation_with_directives)
760+
{
761+
mio::osecirvvs::Model<double> model(1);
762+
model.populations[{mio::AgeGroup(0), mio::osecirvvs::InfectionState::InfectedSymptomsNaive}] = 10;
763+
model.populations.set_difference_from_total({mio::AgeGroup(0), mio::osecirvvs::InfectionState::SusceptibleNaive},
764+
100);
765+
model.parameters.get<mio::osecirvvs::DailyPartialVaccinations<double>>().resize(mio::SimulationDay(size_t(1000)));
766+
model.parameters.get<mio::osecirvvs::DailyPartialVaccinations<double>>().array().setConstant(0);
767+
model.parameters.get<mio::osecirvvs::DailyFullVaccinations<double>>().resize(mio::SimulationDay(size_t(1000)));
768+
model.parameters.get<mio::osecirvvs::DailyFullVaccinations<double>>().array().setConstant(0);
769+
770+
mio::ContactMatrixGroup<double>& cm = model.parameters.get<mio::osecirvvs::ContactPatterns<double>>();
771+
cm[0] = mio::ContactMatrix<double>(Eigen::MatrixXd::Constant(1, 1, 1.0));
772+
773+
mio::DynamicNPIs<double> npis;
774+
npis.set_threshold(0.05 * 50'000, {mio::DampingSampling<double>{0.5,
775+
mio::DampingLevel(0),
776+
mio::DampingType(0),
777+
mio::SimulationTime<double>(0),
778+
{0},
779+
Eigen::VectorXd::Ones(1)}});
780+
npis.set_duration(mio::SimulationTime<double>(5.0));
781+
npis.set_base_value(50'000);
782+
783+
// directive begin is after the simulation, so no NPI is implemented
784+
npis.set_directive_begin(mio::SimulationTime<double>(5.0));
785+
model.parameters.get<mio::osecirvvs::DynamicNPIsInfectedSymptoms<double>>() = npis;
786+
mio::osecirvvs::Simulation<double, mio_test::MockSimulation<mio::osecirvvs::Model>> sim(model, 0.0);
787+
sim.advance(3.0);
788+
mio::ContactMatrixGroup<double> const& contact_matrix =
789+
sim.get_model().parameters.template get<mio::osecirvvs::ContactPatterns<double>>();
790+
EXPECT_EQ(contact_matrix.get_matrix_at(mio::SimulationTime<double>(0.0))(0, 0), 1.0);
791+
EXPECT_EQ(contact_matrix.get_matrix_at(mio::SimulationTime<double>(1.0))(0, 0), 1.0);
792+
EXPECT_EQ(contact_matrix.get_matrix_at(mio::SimulationTime<double>(3.0))(0, 0), 1.0);
793+
794+
// directive begin is satisfied
795+
npis.set_implementation_delay(mio::SimulationTime<double>(2.0)); // not used as t0=0
796+
npis.set_directive_begin(mio::SimulationTime<double>(0.0));
797+
model.parameters.get<mio::osecirvvs::DynamicNPIsInfectedSymptoms<double>>() = npis;
798+
mio::osecirvvs::Simulation<double, mio_test::MockSimulation<mio::osecirvvs::Model>> sim_2(model, 0.0);
799+
sim_2.advance(3.0);
800+
mio::ContactMatrixGroup<double> const& contact_matrix_sim_2 =
801+
sim_2.get_model().parameters.template get<mio::osecirvvs::ContactPatterns<double>>();
802+
EXPECT_EQ(contact_matrix_sim_2.get_matrix_at(mio::SimulationTime<double>(0.0))(0, 0), 0.5);
803+
EXPECT_EQ(contact_matrix_sim_2.get_matrix_at(mio::SimulationTime<double>(4.0))(0, 0), 0.5);
804+
EXPECT_EQ(contact_matrix_sim_2.get_matrix_at(mio::SimulationTime<double>(5.0))(0, 0), 1.0); // lifted after duration
805+
806+
// directive begin satisfied but directive end cuts NPI earlier
807+
npis.set_directive_end(mio::SimulationTime<double>(3.0));
808+
model.parameters.get<mio::osecirvvs::DynamicNPIsInfectedSymptoms<double>>() = npis;
809+
mio::osecirvvs::Simulation<double, mio_test::MockSimulation<mio::osecirvvs::Model>> sim_3(model, 0.0);
810+
sim_3.advance(4.0);
811+
mio::ContactMatrixGroup<double> const& contact_matrix_sim_3 =
812+
sim_3.get_model().parameters.template get<mio::osecirvvs::ContactPatterns<double>>();
813+
EXPECT_EQ(contact_matrix_sim_3.get_matrix_at(mio::SimulationTime<double>(0.0))(0, 0), 0.5);
814+
EXPECT_EQ(contact_matrix_sim_3.get_matrix_at(mio::SimulationTime<double>(2.0))(0, 0), 0.5);
815+
EXPECT_EQ(contact_matrix_sim_3.get_matrix_at(mio::SimulationTime<double>(3.0))(0, 0), 1.0);
816+
817+
// directive begin satisfied (with delay > 0 as t0 = 1)
818+
npis.set_implementation_delay(mio::SimulationTime<double>(2.0));
819+
npis.set_directive_begin(mio::SimulationTime<double>(0.0));
820+
npis.set_directive_end(mio::SimulationTime<double>(1000000.));
821+
model.parameters.get<mio::osecirvvs::DynamicNPIsInfectedSymptoms<double>>() = npis;
822+
mio::osecirvvs::Simulation<double, mio_test::MockSimulation<mio::osecirvvs::Model>> sim_4(model, 1.0);
823+
sim_4.advance(4.0);
824+
mio::ContactMatrixGroup<double> const& contact_matrix_sim_4 =
825+
sim_4.get_model().parameters.template get<mio::osecirvvs::ContactPatterns<double>>();
826+
EXPECT_EQ(contact_matrix_sim_4.get_matrix_at(mio::SimulationTime<double>(2.0))(0, 0), 1.0);
827+
EXPECT_EQ(contact_matrix_sim_4.get_matrix_at(mio::SimulationTime<double>(3.0))(0, 0), 0.5);
828+
EXPECT_EQ(contact_matrix_sim_4.get_matrix_at(mio::SimulationTime<double>(7.0))(0, 0), 0.5);
829+
EXPECT_EQ(contact_matrix_sim_4.get_matrix_at(mio::SimulationTime<double>(8.0))(0, 0), 1.0); // lifted after duration
830+
831+
// directive begin satisfied but directive end cuts NPI earlier (with delay > 0 as t0 = 1)
832+
npis.set_directive_end(mio::SimulationTime<double>(4.0));
833+
model.parameters.get<mio::osecirvvs::DynamicNPIsInfectedSymptoms<double>>() = npis;
834+
mio::osecirvvs::Simulation<double, mio_test::MockSimulation<mio::osecirvvs::Model>> sim_5(model, 1.0);
835+
sim_5.advance(4.0);
836+
mio::ContactMatrixGroup<double> const& contact_matrix_sim_5 =
837+
sim_5.get_model().parameters.template get<mio::osecirvvs::ContactPatterns<double>>();
838+
EXPECT_EQ(contact_matrix_sim_5.get_matrix_at(mio::SimulationTime<double>(1.0))(0, 0), 1.0);
839+
EXPECT_EQ(contact_matrix_sim_5.get_matrix_at(mio::SimulationTime<double>(3.0))(0, 0), 0.5);
840+
EXPECT_EQ(contact_matrix_sim_5.get_matrix_at(mio::SimulationTime<double>(4.0))(0, 0), 1.0);
841+
}
842+
759843
TEST(DynamicNPIs, osecirts_delayed_implementation)
760844
{
761845
mio::osecirts::Model<double> model(1);

0 commit comments

Comments
 (0)