#include #include #include #include #include #include using namespace psemek; namespace { template void read_write(C1 const & c1, C2 & c2) { using std::size; char buffer[1024]; { io::memory_ostream s{buffer, buffer + size(buffer)}; sir::ostream os{s}; write(os, c1); } { io::memory_istream s{buffer, buffer + size(buffer)}; sir::memory_istream is{s}; read(is, c2); } } } test_case(sir_memory_vector) { std::vector c1{ 15, 16, 18, 2, 65535, 14, 5, 8, 42, 555, 18, 729, 76 }; sir::vector c2; read_write(c1, c2); expect_equal(c1.size(), c2.size()); for (std::size_t i = 0; i < c1.size(); ++i) expect_equal(c1[i], c2[i]); } test_case(sir_memory_set) { std::set c1{ 15, 16, 18, 2, 65535, 14, 5, 8, 42, 555, 18, 729, 76 }; sir::set c2; read_write(c1, c2); expect_equal(c1.size(), c2.size()); expect(std::is_sorted(c2.begin(), c2.end())); auto i1 = c1.begin(); auto i2 = c2.begin(); for (; i1 != c1.end(); ++i1, ++i2) expect_equal(*i1, *i2); } test_case(sir_memory_map) { std::map c1 { {10, 3.1415f}, {15, 6.7123f}, {1, -24.444f} }; sir::map c2; read_write(c1, c2); expect_equal(c1.size(), c2.size()); auto i1 = c1.begin(); auto i2 = c2.begin(); for (; i1 != c1.end(); ++i1, ++i2) { expect_equal(i1->first, i2->first); expect_equal(i1->second, i2->second); } }