2
0
mirror of https://github.com/boostorg/mysql.git synced 2026-02-14 00:42:53 +00:00

Copy and move assignment tests

This commit is contained in:
Ruben Perez
2022-10-02 16:14:56 +02:00
parent d59a13a105
commit 94215b8ff7

View File

@@ -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)