mirror of
https://github.com/boostorg/mysql.git
synced 2026-02-14 00:42:53 +00:00
rows tests
This commit is contained in:
397
test/unit/rows.cpp
Normal file
397
test/unit/rows.cpp
Normal file
@@ -0,0 +1,397 @@
|
||||
//
|
||||
// Copyright (c) 2019-2022 Ruben Perez Hidalgo (rubenperez038 at gmail dot com)
|
||||
//
|
||||
// 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)
|
||||
//
|
||||
|
||||
#include <boost/mysql/rows.hpp>
|
||||
#include <boost/mysql/rows_view.hpp>
|
||||
#include <boost/mysql/field_view.hpp>
|
||||
#include <boost/test/unit_test.hpp>
|
||||
#include <stdexcept>
|
||||
#include "test_common.hpp"
|
||||
|
||||
using boost::mysql::rows;
|
||||
using boost::mysql::rows_view;
|
||||
using boost::mysql::make_field_views;
|
||||
using boost::mysql::test::makerow;
|
||||
using boost::mysql::test::makerows;
|
||||
|
||||
namespace
|
||||
{
|
||||
|
||||
BOOST_AUTO_TEST_SUITE(test_rows)
|
||||
|
||||
BOOST_AUTO_TEST_CASE(default_ctor)
|
||||
{
|
||||
rows r;
|
||||
BOOST_TEST(r.empty());
|
||||
}
|
||||
|
||||
|
||||
BOOST_AUTO_TEST_SUITE(ctor_from_rows_view)
|
||||
BOOST_AUTO_TEST_CASE(empty)
|
||||
{
|
||||
rows_view v;
|
||||
rows r (v);
|
||||
BOOST_TEST(r.empty());
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(non_strings)
|
||||
{
|
||||
auto fields = make_field_views(20u, 1.0f, nullptr, -1);
|
||||
rows_view v (fields.data(), fields.size(), 2);
|
||||
rows r (v);
|
||||
fields = make_field_views(0, 0, 0, 0); // r should be independent of the original fields
|
||||
|
||||
BOOST_TEST(r.size() == 2);
|
||||
BOOST_TEST(r[0] == makerow(20u, 1.0f));
|
||||
BOOST_TEST(r[1] == makerow(nullptr, -1));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(strings)
|
||||
{
|
||||
std::string s1 ("abc"), s2("");
|
||||
auto fields = make_field_views(s1, 1.0f, s2, -1);
|
||||
rows_view v (fields.data(), fields.size(), 2);
|
||||
rows r (v);
|
||||
fields = make_field_views(0, 0, 0, 0); // r should be independent of the original fields/strings
|
||||
s1 = "other";
|
||||
s2 = "yet_another";
|
||||
|
||||
BOOST_TEST(r.size() == 2);
|
||||
BOOST_TEST(r[0] == makerow("abc", 1.0f));
|
||||
BOOST_TEST(r[1] == makerow("", -1));
|
||||
}
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
|
||||
|
||||
BOOST_AUTO_TEST_SUITE(copy_ctor)
|
||||
BOOST_AUTO_TEST_CASE(empty)
|
||||
{
|
||||
rows r1;
|
||||
rows r2 (r1);
|
||||
BOOST_TEST(r2.empty());
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(non_strings)
|
||||
{
|
||||
rows r1 = makerows(3, 1, 21.0f, nullptr, 2, 22.0f, -1);
|
||||
rows r2 (r1);
|
||||
r1 = makerows(2, 0, 0, 0, 0); // r2 should be independent of r1
|
||||
|
||||
BOOST_TEST(r2.size() == 2);
|
||||
BOOST_TEST(r2[0] == makerow(1, 21.0f, nullptr));
|
||||
BOOST_TEST(r2[1] == makerow(2, 22.0f, -1));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(strings)
|
||||
{
|
||||
rows r1 = makerows(3, "abc", 21.0f, "", "cdefg", 22.0f, "aaa");
|
||||
rows r2 (r1);
|
||||
r1 = makerows(2, 0, 0, 0, 0); // r2 should be independent of r1
|
||||
|
||||
BOOST_TEST(r2.size() == 2);
|
||||
BOOST_TEST(r2[0] == makerow("abc", 21.0f, ""));
|
||||
BOOST_TEST(r2[1] == makerow("cdefg", 22.0f, "aaa"));
|
||||
}
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
|
||||
|
||||
BOOST_AUTO_TEST_SUITE(move_ctor)
|
||||
BOOST_AUTO_TEST_CASE(empty)
|
||||
{
|
||||
rows r1;
|
||||
rows r2 (std::move(r1));
|
||||
BOOST_TEST(r2.empty());
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(non_strings)
|
||||
{
|
||||
rows r1 = makerows(3, 1, 21.0f, nullptr, 2, 22.0f, -1);
|
||||
rows r2 (std::move(r1));
|
||||
r1 = makerows(2, 0, 0, 0, 0); // r2 should be independent of r1
|
||||
|
||||
BOOST_TEST(r2.size() == 2);
|
||||
BOOST_TEST(r2[0] == makerow(1, 21.0f, nullptr));
|
||||
BOOST_TEST(r2[1] == makerow(2, 22.0f, -1));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(strings)
|
||||
{
|
||||
rows r1 = makerows(3, "abc", 21.0f, "", "cdefg", 22.0f, "aaa");
|
||||
rows r2 (std::move(r1));
|
||||
r1 = makerows(2, 0, 0, 0, 0); // r2 should be independent of r1
|
||||
|
||||
BOOST_TEST(r2.size() == 2);
|
||||
BOOST_TEST(r2[0] == makerow("abc", 21.0f, ""));
|
||||
BOOST_TEST(r2[1] == makerow("cdefg", 22.0f, "aaa"));
|
||||
}
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
|
||||
|
||||
BOOST_AUTO_TEST_SUITE(copy_assignment)
|
||||
BOOST_AUTO_TEST_CASE(empty)
|
||||
{
|
||||
rows r1 = makerows(2, 42, "abcdef");
|
||||
rows r2;
|
||||
r1 = r2;
|
||||
r2 = makerows(2, 90, nullptr); // r1 is independent of r2
|
||||
BOOST_TEST(r1.empty());
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(non_strings)
|
||||
{
|
||||
rows r1 = makerows(2, 42, "abcdef");
|
||||
rows r2 = makerows(1, 50.0f, nullptr);
|
||||
r1 = r2;
|
||||
r2 = makerows(1, "abc", 80, nullptr); // r1 is independent of r2
|
||||
|
||||
BOOST_TEST(r1.size() == 2);
|
||||
BOOST_TEST(r1[0] == makerow(50.0f));
|
||||
BOOST_TEST(r1[1] == makerow(nullptr));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(strings)
|
||||
{
|
||||
rows r1 = makerows(1, 42, "abcdef");
|
||||
rows r2 = makerows(2, "a_very_long_string", nullptr, "", "abc");
|
||||
r1 = r2;
|
||||
r2 = makerows(1, "another_string", 90, "yet_another"); // r1 is independent of r2
|
||||
|
||||
BOOST_TEST(r1.size() == 2);
|
||||
BOOST_TEST(r1[0] == makerow("a_very_long_string", nullptr));
|
||||
BOOST_TEST(r1[1] == makerow("", "abc"));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(strings_empty_to)
|
||||
{
|
||||
rows r1;
|
||||
rows r2 = makerows(1, "abc", nullptr, "");
|
||||
r1 = r2;
|
||||
|
||||
BOOST_TEST(r1.size() == 3);
|
||||
BOOST_TEST(r1[0] == makerow("abc"));
|
||||
BOOST_TEST(r1[1] == makerow(nullptr));
|
||||
BOOST_TEST(r1[2] == makerow(""));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(self_assignment_empty)
|
||||
{
|
||||
rows r;
|
||||
const rows& ref = r;
|
||||
r = ref;
|
||||
|
||||
BOOST_TEST(r.empty());
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(self_assignment_non_empty)
|
||||
{
|
||||
rows r = makerows(2, "abc", 50u, "fgh", "");
|
||||
const rows& ref = r;
|
||||
r = ref;
|
||||
|
||||
BOOST_TEST(r.size() == 2);
|
||||
BOOST_TEST(r[0] == makerow("abc", 50u));
|
||||
BOOST_TEST(r[1] == makerow("fgh", ""));
|
||||
}
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
|
||||
|
||||
BOOST_AUTO_TEST_SUITE(move_assignment)
|
||||
BOOST_AUTO_TEST_CASE(empty)
|
||||
{
|
||||
rows r1 = makerows(1, 42, "abcdef");
|
||||
rows r2;
|
||||
r1 = std::move(r2);
|
||||
r2 = makerows(2, 90, nullptr); // r1 is independent of r2
|
||||
BOOST_TEST(r1.empty());
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(non_strings)
|
||||
{
|
||||
rows r1 = makerows(2, 42, "abcdef");
|
||||
rows r2 = makerows(3, 50.0f, nullptr, 80u);
|
||||
r1 = std::move(r2);
|
||||
r2 = makerows(1, "abc", 80, nullptr); // r1 is independent of r2
|
||||
|
||||
BOOST_TEST(r1.size() == 1);
|
||||
BOOST_TEST(r1[0] == makerow(50.0f, nullptr, 80u));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(strings)
|
||||
{
|
||||
rows r1 = makerows(1, 42, "abcdef");
|
||||
rows r2 = makerows(2, "a_very_long_string", nullptr, "", "ppp");
|
||||
r1 = std::move(r2);
|
||||
r2 = makerows(1, "another_string", 90, "yet_another"); // r1 is independent of r2
|
||||
|
||||
BOOST_TEST(r1.size() == 2);
|
||||
BOOST_TEST(r1[0] == makerow("a_very_long_string", nullptr));
|
||||
BOOST_TEST(r1[1] == makerow("", "ppp"));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(strings_empty_to)
|
||||
{
|
||||
rows r1;
|
||||
rows r2 = makerows(1, "abc", nullptr, "bcd");
|
||||
r1 = std::move(r2);
|
||||
|
||||
BOOST_TEST(r1.size() == 3);
|
||||
BOOST_TEST(r1[0] == makerow("abc"));
|
||||
BOOST_TEST(r1[1] == makerow(nullptr));
|
||||
BOOST_TEST(r1[2] == makerow("bcd"));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(self_assignment_empty)
|
||||
{
|
||||
rows r;
|
||||
rows&& ref = std::move(r);
|
||||
r = std::move(ref);
|
||||
|
||||
// r is in a valid but unspecified state; can be assigned to
|
||||
r = makerows(1, "abcdef");
|
||||
BOOST_TEST(r.size() == 1);
|
||||
BOOST_TEST(r[0] == makerow("abcdef"));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(self_assignment_non_empty)
|
||||
{
|
||||
rows r = makerows(3, "abc", 50u, "fgh");
|
||||
rows&& 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 = makerows(1, "abcdef");
|
||||
BOOST_TEST(r.size() == 1);
|
||||
BOOST_TEST(r[0] == makerow("abcdef"));
|
||||
}
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
|
||||
|
||||
BOOST_AUTO_TEST_SUITE(at)
|
||||
BOOST_AUTO_TEST_CASE(empty)
|
||||
{
|
||||
rows v;
|
||||
BOOST_CHECK_THROW(v.at(0), std::out_of_range);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(one_column_one_row)
|
||||
{
|
||||
rows r = makerows(1, 42u);
|
||||
BOOST_TEST(r.at(0) == makerow(42u));
|
||||
BOOST_CHECK_THROW(r.at(1), std::out_of_range);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(one_column_several_rows)
|
||||
{
|
||||
rows r = makerows(1, 42u, "abc");
|
||||
BOOST_TEST(r.at(0) == makerow(42u));
|
||||
BOOST_TEST(r.at(1) == makerow("abc"));
|
||||
BOOST_CHECK_THROW(r.at(2), std::out_of_range);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(several_columns_one_row)
|
||||
{
|
||||
rows r = makerows(2, 42u, "abc");
|
||||
BOOST_TEST(r.at(0) == makerow(42u, "abc"));
|
||||
BOOST_CHECK_THROW(r.at(1), std::out_of_range);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(several_columns_several_rows)
|
||||
{
|
||||
rows r = makerows(2, 42u, "abc", nullptr, "bcd", 90u, nullptr);
|
||||
BOOST_TEST(r.at(0) == makerow(42u, "abc"));
|
||||
BOOST_TEST(r.at(1) == makerow(nullptr, "bcd"));
|
||||
BOOST_TEST(r.at(2) == makerow(90u, nullptr));
|
||||
BOOST_CHECK_THROW(r.at(3), std::out_of_range);
|
||||
}
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
|
||||
|
||||
BOOST_AUTO_TEST_SUITE(operator_square_brackets)
|
||||
BOOST_AUTO_TEST_CASE(one_column_one_row)
|
||||
{
|
||||
rows r = makerows(1, 42u);
|
||||
BOOST_TEST(r[0] == makerow(42u));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(one_column_several_rows)
|
||||
{
|
||||
rows r = makerows(1, 42u, "abc");
|
||||
BOOST_TEST(r[0] == makerow(42u));
|
||||
BOOST_TEST(r[1] == makerow("abc"));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(several_columns_one_row)
|
||||
{
|
||||
rows r = makerows(2, 42u, "abc");
|
||||
BOOST_TEST(r[0] == makerow(42u, "abc"));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(several_columns_several_rows)
|
||||
{
|
||||
rows r = makerows(2, 42u, "abc", nullptr, "bcd", 90u, nullptr);
|
||||
BOOST_TEST(r[0] == makerow(42u, "abc"));
|
||||
BOOST_TEST(r[1] == makerow(nullptr, "bcd"));
|
||||
BOOST_TEST(r[2] == makerow(90u, nullptr));
|
||||
}
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
|
||||
|
||||
BOOST_AUTO_TEST_CASE(front)
|
||||
{
|
||||
rows r = makerows(2, 42u, "abc", nullptr, "bcde");
|
||||
BOOST_TEST(r.front() == makerow(42u, "abc"));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(back)
|
||||
{
|
||||
rows r = makerows(2, 70.0f, "abc", nullptr, "bcde");
|
||||
BOOST_TEST(r.back() == makerow(nullptr, "bcde"));
|
||||
}
|
||||
|
||||
|
||||
BOOST_AUTO_TEST_CASE(empty)
|
||||
{
|
||||
BOOST_TEST(rows().empty());
|
||||
BOOST_TEST(!makerows(1, 42u).empty());
|
||||
}
|
||||
|
||||
|
||||
BOOST_AUTO_TEST_SUITE(size)
|
||||
BOOST_AUTO_TEST_CASE(empty)
|
||||
{
|
||||
rows r;
|
||||
BOOST_TEST(r.size() == 0);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(one_column_one_row)
|
||||
{
|
||||
rows r = makerows(1, 42u);
|
||||
BOOST_TEST(r.size() == 1);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(one_column_several_rows)
|
||||
{
|
||||
rows r = makerows(1, 42u, "abc");
|
||||
BOOST_TEST(r.size() == 2);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(several_columns_one_row)
|
||||
{
|
||||
rows r = makerows(2, 42u, "abc");
|
||||
BOOST_TEST(r.size() == 1);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(several_columns_several_rows)
|
||||
{
|
||||
rows r = makerows(3, 42u, "abc", nullptr, "bcd", 90u, nullptr);
|
||||
BOOST_TEST(r.size() == 2);
|
||||
}
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user