diff --git a/test/legacy_archives/generate_legacy_archives.cpp b/test/legacy_archives/generate_legacy_archives.cpp new file mode 100644 index 00000000..55144dc5 --- /dev/null +++ b/test/legacy_archives/generate_legacy_archives.cpp @@ -0,0 +1,270 @@ +/* Copyright 2023 Joaquin M Lopez Munoz. + * Distributed under the Boost Software License, Version 1.0. + * (See accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * See https://www.boost.org/libs/unordered for library home page. + */ + +/* This program has been used to generate archives of Boost.Unordered + * containers with Boost 1.83, when serialization support was provided + * externally to Boost.Unordered in + * boost/serialization/boost_unordered_(map|set).hpp. Beginning with the + * release of native Boost.Unordered serialization capabilities in Boost + * 1.84, these archives are used to test backwards loading compatibility + * as enabled by BOOST_UNORDERED_ENABLE_SERIALIZATION_COMPATIBILITY_V0. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +template +struct random_generator +{ + Value operator()() + { + return static_cast(dist(gen)); + } + + std::uniform_int_distribution dist; + std::mt19937 gen{231}; +}; + +template<> +struct random_generator +{ + std::string operator()() + { + return std::to_string(rng()); + } + + random_generator<> rng; +}; + +template<> +struct random_generator:random_generator{}; + +template +struct random_generator> +{ + std::pair operator()() + { + return {rngt(),rngq()}; + } + + random_generator rngt; + random_generator rngq; +}; + +template +struct non_const +{ + typedef T type; +}; + +template +struct non_const +{ + using type=typename non_const::type; +}; + +template +struct non_const> +{ + using type=std::pair< + typename non_const::type, + typename non_const::type>; +}; + +template +void generate_legacy_archive(const char* filename,std::size_t n) +{ + using value_type=typename Container::value_type; + using vector=std::vector::type>; + + Container c; + vector v; + random_generator rng; + std::uniform_int_distribution<> repeat(0,1); + std::mt19937 gen{231}; + + for(std::size_t i=0;i,boost::archive::text_oarchive + >("map_int_0.txt",0); + generate_legacy_archive< + boost::unordered_map,boost::archive::text_oarchive + >("map_int_10.txt",10); + generate_legacy_archive< + boost::unordered_map,boost::archive::text_oarchive + >("map_int_100.txt",100); + generate_legacy_archive< + boost::unordered_map,boost::archive::text_oarchive + >("map_string_0.txt",0); + generate_legacy_archive< + boost::unordered_map,boost::archive::text_oarchive + >("map_string_10.txt",10); + generate_legacy_archive,boost::archive::text_oarchive + >("map_string_100.txt",100); + + generate_legacy_archive< + boost::unordered_multimap,boost::archive::text_oarchive + >("multimap_int_0.txt",0); + generate_legacy_archive< + boost::unordered_multimap,boost::archive::text_oarchive + >("multimap_int_10.txt",10); + generate_legacy_archive< + boost::unordered_multimap,boost::archive::text_oarchive + >("multimap_int_100.txt",100); + generate_legacy_archive< + boost::unordered_multimap,boost::archive::text_oarchive + >("multimap_string_0.txt",0); + generate_legacy_archive< + boost::unordered_multimap,boost::archive::text_oarchive + >("multimap_string_10.txt",10); + generate_legacy_archive< + boost::unordered_multimap,boost::archive::text_oarchive + >("multimap_string_100.txt",100); + + generate_legacy_archive< + boost::unordered_set,boost::archive::text_oarchive + >("set_int_0.txt",0); + generate_legacy_archive< + boost::unordered_set,boost::archive::text_oarchive + >("set_int_10.txt",10); + generate_legacy_archive< + boost::unordered_set,boost::archive::text_oarchive + >("set_int_100.txt",100); + generate_legacy_archive< + boost::unordered_set,boost::archive::text_oarchive + >("set_string_0.txt",0); + generate_legacy_archive< + boost::unordered_set,boost::archive::text_oarchive + >("set_string_10.txt",10); + generate_legacy_archive< + boost::unordered_set,boost::archive::text_oarchive + >("set_string_100.txt",100); + + generate_legacy_archive< + boost::unordered_multiset,boost::archive::text_oarchive + >("multiset_int_0.txt",0); + generate_legacy_archive< + boost::unordered_multiset,boost::archive::text_oarchive + >("multiset_int_10.txt",10); + generate_legacy_archive< + boost::unordered_multiset,boost::archive::text_oarchive + >("multiset_int_100.txt",100); + generate_legacy_archive< + boost::unordered_multiset,boost::archive::text_oarchive + >("multiset_string_0.txt",0); + generate_legacy_archive< + boost::unordered_multiset,boost::archive::text_oarchive + >("multiset_string_10.txt",10); + generate_legacy_archive< + boost::unordered_multiset,boost::archive::text_oarchive + >("multiset_string_100.txt",100); + + generate_legacy_archive< + boost::unordered_map,boost::archive::xml_oarchive + >("map_int_0.xml",0); + generate_legacy_archive< + boost::unordered_map,boost::archive::xml_oarchive + >("map_int_10.xml",10); + generate_legacy_archive< + boost::unordered_map,boost::archive::xml_oarchive + >("map_int_100.xml",100); + generate_legacy_archive< + boost::unordered_map,boost::archive::xml_oarchive + >("map_string_0.xml",0); + generate_legacy_archive< + boost::unordered_map,boost::archive::xml_oarchive + >("map_string_10.xml",10); + generate_legacy_archive< + boost::unordered_map,boost::archive::xml_oarchive + >("map_string_100.xml",100); + + generate_legacy_archive< + boost::unordered_multimap,boost::archive::xml_oarchive + >("multimap_int_0.xml",0); + generate_legacy_archive< + boost::unordered_multimap,boost::archive::xml_oarchive + >("multimap_int_10.xml",10); + generate_legacy_archive< + boost::unordered_multimap,boost::archive::xml_oarchive + >("multimap_int_100.xml",100); + generate_legacy_archive< + boost::unordered_multimap,boost::archive::xml_oarchive + >("multimap_string_0.xml",0); + generate_legacy_archive< + boost::unordered_multimap,boost::archive::xml_oarchive + >("multimap_string_10.xml",10); + generate_legacy_archive< + boost::unordered_multimap,boost::archive::xml_oarchive + >("multimap_string_100.xml",100); + + generate_legacy_archive< + boost::unordered_set,boost::archive::xml_oarchive + >("set_int_0.xml",0); + generate_legacy_archive< + boost::unordered_set,boost::archive::xml_oarchive + >("set_int_10.xml",10); + generate_legacy_archive< + boost::unordered_set,boost::archive::xml_oarchive + >("set_int_100.xml",100); + generate_legacy_archive< + boost::unordered_set,boost::archive::xml_oarchive + >("set_string_0.xml",0); + generate_legacy_archive< + boost::unordered_set,boost::archive::xml_oarchive + >("set_string_10.xml",10); + generate_legacy_archive< + boost::unordered_set,boost::archive::xml_oarchive + >("set_string_100.xml",100); + + generate_legacy_archive< + boost::unordered_multiset,boost::archive::xml_oarchive + >("multiset_int_0.xml",0); + generate_legacy_archive< + boost::unordered_multiset,boost::archive::xml_oarchive + >("multiset_int_10.xml",10); + generate_legacy_archive< + boost::unordered_multiset,boost::archive::xml_oarchive + >("multiset_int_100.xml",100); + generate_legacy_archive< + boost::unordered_multiset,boost::archive::xml_oarchive + >("multiset_string_0.xml",0); + generate_legacy_archive< + boost::unordered_multiset,boost::archive::xml_oarchive + >("multiset_string_10.xml",10); + generate_legacy_archive< + boost::unordered_multiset,boost::archive::xml_oarchive + >("multiset_string_100.xml",100); + +} \ No newline at end of file