SpECTRE
v2025.03.17
|
Collection of classes and functions for testing serialization. More...
Functions | |
template<typename Compare = void, typename Serialize > | |
void | test_versioning (const std::string &filename, const std::string ¤t_label, const Serialize ¤t_object, const std::unordered_map< std::string, std::variant< Serialize, std::string > > &old_objects={}, const bool generate_new_entry=false) |
Test serialization of a versioned class against old versions. More... | |
Collection of classes and functions for testing serialization.
void TestHelpers::serialization::test_versioning | ( | const std::string & | filename, |
const std::string & | current_label, | ||
const Serialize & | current_object, | ||
const std::unordered_map< std::string, std::variant< Serialize, std::string > > & | old_objects = {} , |
||
const bool | generate_new_entry = false |
||
) |
Test serialization of a versioned class against old versions.
Old serializations of the class are stored in filename
(relative to the unit test source directory). Each stored version has a label, where the current label must match current_label
. This function checks that
current_label
and matches the result of serializing current_object
.By default, old versions are expected to deserialize to current_object
, but if the object represented by the serialized entries has changed (for example, because the current_object
has newer options enabled), objects can be passed in old_objects
, keyed by the last version they should match. If deserialization support is dropped up to a specific entry, an error can be checked for by instead adding a string to old_objects
.
By default, objects are directly compared for equality. If the objects being tested are stored in std::unique_ptr
s the Compare
template parameter can be passed in to dereference and dynamic_cast
the contained value before comparing.
If generate_new_entry
is true and current_label
and current_object
do not match the last serialization in the file, a new entry will be appended.