diff --git a/test/unit/row.cpp b/test/unit/row.cpp index 4c0a46a5..85eabae7 100644 --- a/test/unit/row.cpp +++ b/test/unit/row.cpp @@ -20,15 +20,6 @@ using boost::mysql::make_field_views; using boost::mysql::test::makerow; -// move assignment -// empty -// non-empty, non-strings -// non-empty, with strings (check lifecycle) -// non-empty, with empty strings -// to empty -// to non-empty, with strings -// self assignment, empty -// self assignment, with strings // at, operator[], size, empty, begin, end: same as row_view // operator row_view // empty @@ -204,16 +195,152 @@ BOOST_AUTO_TEST_CASE(strings_empty_to) BOOST_AUTO_TEST_SUITE_END() +BOOST_AUTO_TEST_SUITE(copy_assignment) +BOOST_AUTO_TEST_CASE(empty) +{ + row r1 = makerow(42, "abcdef"); + row r2; + r1 = r2; + r2 = makerow(90, nullptr); // r1 is independent of r2 + BOOST_TEST(r1.empty()); +} + +BOOST_AUTO_TEST_CASE(non_strings) +{ + row r1 = makerow(42, "abcdef"); + row r2 = makerow(50.0f, nullptr, 80u); + r1 = r2; + r2 = makerow("abc", 80, nullptr); // r1 is independent of r2 + + BOOST_TEST(r1.size() == 3); + BOOST_TEST(r1[0] == field_view(50.0f)); + BOOST_TEST(r1[1] == field_view()); + BOOST_TEST(r1[2] == field_view(80u)); +} + +BOOST_AUTO_TEST_CASE(strings) +{ + row r1 = makerow(42, "abcdef"); + row r2 = makerow("a_very_long_string", nullptr, ""); + r1 = r2; + r2 = makerow("another_string", 90, "yet_another"); // r1 is independent of r2 + + BOOST_TEST(r1.size() == 3); + BOOST_TEST(r1[0] == field_view("a_very_long_string")); + BOOST_TEST(r1[1] == field_view()); + BOOST_TEST(r1[2] == field_view("")); +} + +BOOST_AUTO_TEST_CASE(strings_empty_to) +{ + row r1; + row r2 = makerow("abc", nullptr, "bcd"); + r1 = r2; + + BOOST_TEST(r1.size() == 3); + BOOST_TEST(r1[0] == field_view("abc")); + BOOST_TEST(r1[1] == field_view()); + BOOST_TEST(r1[2] == field_view("bcd")); +} + +BOOST_AUTO_TEST_CASE(self_assignment_empty) +{ + row r; + const row& ref = r; + r = ref; + + BOOST_TEST(r.empty()); +} + +BOOST_AUTO_TEST_CASE(self_assignment_non_empty) +{ + row r = makerow("abc", 50u, "fgh"); + const row& ref = r; + r = ref; + + BOOST_TEST(r.size() == 3); + BOOST_TEST(r[0] == field_view("abc")); + BOOST_TEST(r[1] == field_view(50u)); + BOOST_TEST(r[2] == field_view("fgh")); +} + +BOOST_AUTO_TEST_SUITE_END() + + +BOOST_AUTO_TEST_SUITE(move_assignment) +BOOST_AUTO_TEST_CASE(empty) +{ + row r1 = makerow(42, "abcdef"); + row r2; + r1 = std::move(r2); + r2 = makerow(90, nullptr); // r1 is independent of r2 + BOOST_TEST(r1.empty()); +} + +BOOST_AUTO_TEST_CASE(non_strings) +{ + row r1 = makerow(42, "abcdef"); + row r2 = makerow(50.0f, nullptr, 80u); + r1 = std::move(r2); + r2 = makerow("abc", 80, nullptr); // r1 is independent of r2 + + BOOST_TEST(r1.size() == 3); + BOOST_TEST(r1[0] == field_view(50.0f)); + BOOST_TEST(r1[1] == field_view()); + BOOST_TEST(r1[2] == field_view(80u)); +} + +BOOST_AUTO_TEST_CASE(strings) +{ + row r1 = makerow(42, "abcdef"); + row r2 = makerow("a_very_long_string", nullptr, ""); + r1 = std::move(r2); + r2 = makerow("another_string", 90, "yet_another"); // r1 is independent of r2 + + BOOST_TEST(r1.size() == 3); + BOOST_TEST(r1[0] == field_view("a_very_long_string")); + BOOST_TEST(r1[1] == field_view()); + BOOST_TEST(r1[2] == field_view("")); +} + +BOOST_AUTO_TEST_CASE(strings_empty_to) +{ + row r1; + row r2 = makerow("abc", nullptr, "bcd"); + r1 = std::move(r2); + + BOOST_TEST(r1.size() == 3); + BOOST_TEST(r1[0] == field_view("abc")); + BOOST_TEST(r1[1] == field_view()); + BOOST_TEST(r1[2] == field_view("bcd")); +} + +BOOST_AUTO_TEST_CASE(self_assignment_empty) +{ + row r; + row&& ref = std::move(r); + r = std::move(ref); + + // r is in a valid but unspecified state; can be assigned to + r = makerow("abcdef"); + BOOST_TEST(r.size() == 1); + BOOST_TEST(r[0] == field_view("abcdef")); +} + +BOOST_AUTO_TEST_CASE(self_assignment_non_empty) +{ + row r = makerow("abc", 50u, "fgh"); + row&& ref = std::move(r); + r = std::move(ref); // this should leave r in a valid but unspecified state + + // r is in a valid but unspecified state; can be assigned to + r = makerow("abcdef"); + BOOST_TEST(r.size() == 1); + BOOST_TEST(r[0] == field_view("abcdef")); +} + +BOOST_AUTO_TEST_SUITE_END() -// copy assignment -// empty -// non-empty, non-strings -// non-empty, with strings (check lifecycle) -// non-empty, with empty strings -// to empty -// to non-empty, with strings -// self assignment, empty -// self assignment, with strings // // Constructors // BOOST_AUTO_TEST_SUITE(constructors)