diff --git a/test/unit/CMakeLists.txt b/test/unit/CMakeLists.txt index 85bcf8d6a..5ccc7b7f1 100644 --- a/test/unit/CMakeLists.txt +++ b/test/unit/CMakeLists.txt @@ -104,6 +104,7 @@ add_executable( test/resultset_view.cpp test/resultset.cpp test/client_errc.cpp + test/column_type.cpp test/common_server_errc.cpp test/mysql_server_errc.cpp test/mariadb_server_errc.cpp diff --git a/test/unit/Jamfile b/test/unit/Jamfile index cc989d47f..a85b5ba28 100644 --- a/test/unit/Jamfile +++ b/test/unit/Jamfile @@ -113,6 +113,7 @@ run test/resultset_view.cpp test/resultset.cpp test/client_errc.cpp + test/column_type.cpp test/common_server_errc.cpp test/mysql_server_errc.cpp test/mariadb_server_errc.cpp diff --git a/test/unit/test/column_type.cpp b/test/unit/test/column_type.cpp new file mode 100644 index 000000000..82ed0e279 --- /dev/null +++ b/test/unit/test/column_type.cpp @@ -0,0 +1,80 @@ +// +// Copyright (c) 2026 Vladislav Soulgard (vsoulgard 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 + +#include + +#include +#include +#include + +using namespace boost::mysql; + +BOOST_AUTO_TEST_SUITE(test_column_type) + +std::string to_string(column_type t) +{ + std::ostringstream oss; + auto& result = oss << t; + BOOST_TEST(!oss.fail()); + // Check if operator<< return same stream object + BOOST_TEST(&result == &oss); + return oss.str(); +} + +BOOST_AUTO_TEST_CASE(stream_operator_basic) +{ + // Numeric types + BOOST_TEST(to_string(column_type::tinyint) == "tinyint"); + BOOST_TEST(to_string(column_type::smallint) == "smallint"); + BOOST_TEST(to_string(column_type::mediumint) == "mediumint"); + BOOST_TEST(to_string(column_type::int_) == "int_"); + BOOST_TEST(to_string(column_type::bigint) == "bigint"); + + // Floating-point types + BOOST_TEST(to_string(column_type::float_) == "float_"); + BOOST_TEST(to_string(column_type::double_) == "double_"); + BOOST_TEST(to_string(column_type::decimal) == "decimal"); + + // Special types + BOOST_TEST(to_string(column_type::bit) == "bit"); + BOOST_TEST(to_string(column_type::year) == "year"); + + // Date/time types + BOOST_TEST(to_string(column_type::time) == "time"); + BOOST_TEST(to_string(column_type::date) == "date"); + BOOST_TEST(to_string(column_type::datetime) == "datetime"); + BOOST_TEST(to_string(column_type::timestamp) == "timestamp"); + + // String types + BOOST_TEST(to_string(column_type::char_) == "char_"); + BOOST_TEST(to_string(column_type::varchar) == "varchar"); + BOOST_TEST(to_string(column_type::binary) == "binary"); + BOOST_TEST(to_string(column_type::varbinary) == "varbinary"); + + // Large object types + BOOST_TEST(to_string(column_type::text) == "text"); + BOOST_TEST(to_string(column_type::blob) == "blob"); + + // Special MySQL types + BOOST_TEST(to_string(column_type::enum_) == "enum_"); + BOOST_TEST(to_string(column_type::set) == "set"); + BOOST_TEST(to_string(column_type::json) == "json"); + BOOST_TEST(to_string(column_type::geometry) == "geometry"); +} + +BOOST_AUTO_TEST_CASE(stream_operator_unknown) +{ + // Unknown type + BOOST_TEST(to_string(column_type::unknown) == ""); + + // Incorrect value + BOOST_TEST(to_string(static_cast(999)) == ""); +} + +BOOST_AUTO_TEST_SUITE_END()