From ce081ae365a8485d889a16531ae01834d02ae694 Mon Sep 17 00:00:00 2001 From: reneSchm <49305466+reneSchm@users.noreply.github.com> Date: Tue, 4 Nov 2025 11:14:54 +0100 Subject: [PATCH] Add missing members to serialization --- cpp/models/abm/infection.h | 1 + cpp/models/abm/model.h | 28 ++++++++++++++++------------ cpp/tests/test_abm_serialization.cpp | 14 ++++++++------ 3 files changed, 25 insertions(+), 18 deletions(-) diff --git a/cpp/models/abm/infection.h b/cpp/models/abm/infection.h index 3a0c92d36d..d26a619bb1 100644 --- a/cpp/models/abm/infection.h +++ b/cpp/models/abm/infection.h @@ -133,6 +133,7 @@ class Infection .add("viral_load", m_viral_load) .add("log_norm_alpha", m_log_norm_alpha) .add("log_norm_beta", m_log_norm_beta) + .add("individual_virus_shed_factor", m_individual_virus_shed_factor) .add("detected", m_detected); } diff --git a/cpp/models/abm/model.h b/cpp/models/abm/model.h index 190aaa2b2d..1ec72e32d2 100644 --- a/cpp/models/abm/model.h +++ b/cpp/models/abm/model.h @@ -130,6 +130,7 @@ class Model // skip caches, they are rebuild by the deserialized model obj.add_list("persons", get_persons().begin(), get_persons().end()); obj.add_list("locations", get_locations().begin(), get_locations().end()); + obj.add_list("activeness_statuses", m_activeness_statuses.begin(), m_activeness_statuses.end()); obj.add_element("location_types", m_has_locations.to_ulong()); obj.add_element("testing_strategy", m_testing_strategy); obj.add_element("trip_list", m_trip_list); @@ -145,22 +146,24 @@ class Model template static IOResult deserialize(IOContext& io) { - auto obj = io.expect_object("Model"); - auto params = obj.expect_element("parameters", Tag{}); - auto persons = obj.expect_list("persons", Tag{}); - auto locations = obj.expect_list("locations", Tag{}); - auto location_types = obj.expect_element("location_types", Tag{}); - auto trip_list = obj.expect_element("trip_list", Tag{}); - auto use_mobility_rules = obj.expect_element("use_mobility_rules", Tag{}); - auto cemetery_id = obj.expect_element("cemetery_id", Tag{}); - auto rng = obj.expect_element("rng", Tag{}); + auto obj = io.expect_object("Model"); + auto params = obj.expect_element("parameters", Tag{}); + auto persons = obj.expect_list("persons", Tag{}); + auto locations = obj.expect_list("locations", Tag{}); + auto activeness_statuses = obj.expect_list("activeness_statuses", Tag{}); + auto location_types = obj.expect_element("location_types", Tag{}); + auto trip_list = obj.expect_element("trip_list", Tag{}); + auto use_mobility_rules = obj.expect_element("use_mobility_rules", Tag{}); + auto cemetery_id = obj.expect_element("cemetery_id", Tag{}); + auto rng = obj.expect_element("rng", Tag{}); return apply( io, - [](auto&& params_, auto&& persons_, auto&& locations_, auto&& location_types_, auto&& trip_list_, - auto&& use_mobility_rules_, auto&& cemetery_id_, auto&& rng_) { + [](auto&& params_, auto&& persons_, auto&& locations_, auto&& activeness_statuses_, auto&& location_types_, + auto&& trip_list_, auto&& use_mobility_rules_, auto&& cemetery_id_, auto&& rng_) { Model model{params_}; model.m_persons.assign(persons_.cbegin(), persons_.cend()); model.m_locations.assign(locations_.cbegin(), locations_.cend()); + model.m_activeness_statuses.assign(activeness_statuses_.cbegin(), activeness_statuses_.cend()); model.m_has_locations = location_types_; model.m_trip_list = trip_list_; model.m_use_mobility_rules = use_mobility_rules_; @@ -168,7 +171,8 @@ class Model model.m_rng = rng_; return model; }, - params, persons, locations, location_types, trip_list, use_mobility_rules, cemetery_id, rng); + params, persons, locations, activeness_statuses, location_types, trip_list, use_mobility_rules, cemetery_id, + rng); } /** diff --git a/cpp/tests/test_abm_serialization.cpp b/cpp/tests/test_abm_serialization.cpp index 566dd6df09..173e563261 100644 --- a/cpp/tests/test_abm_serialization.cpp +++ b/cpp/tests/test_abm_serialization.cpp @@ -112,12 +112,13 @@ TEST(TestAbmSerialization, Infection) viral_load["start_date"]["seconds"] = Json::Int(i++); Json::Value reference_json; - reference_json["infection_course"] = Json::Value(Json::arrayValue); - reference_json["virus_variant"] = Json::UInt(0); - reference_json["viral_load"] = viral_load; - reference_json["log_norm_alpha"] = Json::Value((double)i++); - reference_json["log_norm_beta"] = Json::Value((double)i++); - reference_json["detected"] = Json::Value((bool)0); + reference_json["infection_course"] = Json::Value(Json::arrayValue); + reference_json["virus_variant"] = Json::UInt(0); + reference_json["viral_load"] = viral_load; + reference_json["log_norm_alpha"] = Json::Value((double)i++); + reference_json["log_norm_beta"] = Json::Value((double)i++); + reference_json["individual_virus_shed_factor"] = Json::Value((double)i++); + reference_json["detected"] = Json::Value((bool)0); test_json_serialization(reference_json); } @@ -260,6 +261,7 @@ TEST(TestAbmSerialization, Model) reference_json["locations"] = Json::Value(Json::arrayValue); reference_json["parameters"] = abm_parameters; reference_json["persons"] = Json::Value(Json::arrayValue); + reference_json["activeness_statuses"] = Json::Value(Json::arrayValue); reference_json["rng"]["counter"] = Json::UInt(i++); reference_json["rng"]["key"] = Json::UInt(i++); reference_json["rng"]["seeds"] = json_uint_array({i++, i++, i++, i++, i++, i++});