summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt2
-rw-r--r--include/fud_format.hpp171
-rw-r--r--include/fud_print.hpp2
-rw-r--r--include/fud_result.hpp6
-rw-r--r--source/fud_assert.cpp1
-rw-r--r--source/fud_print.cpp2
-rw-r--r--test/test_format.cpp85
7 files changed, 126 insertions, 143 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 27aa6dd..a72b6ca 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -5,7 +5,7 @@ if(${CMAKE_VERSION} VERSION_LESS 3.12)
endif()
project(libfud
- VERSION 0.43.0
+ VERSION 0.44.0
DESCRIPTION "Library of FUD"
LANGUAGES CXX)
diff --git a/include/fud_format.hpp b/include/fud_format.hpp
index 4536d69..bd44d26 100644
--- a/include/fud_format.hpp
+++ b/include/fud_format.hpp
@@ -20,8 +20,8 @@
// #include "fud_assert.hpp"
#include "dragonbox/dragonbox.h"
-#include "fud_drain.hpp"
#include "fud_array.hpp"
+#include "fud_drain.hpp"
#include "fud_option.hpp"
#include "fud_result.hpp"
#include "fud_status.hpp"
@@ -31,9 +31,9 @@
#include "fud_utf8.hpp"
#include <cstdint>
+#include <cstdio>
#include <limits>
#include <variant>
-#include <cstdio>
namespace fud {
@@ -44,7 +44,7 @@ constexpr size_t maxIntCharCount = (bitsPerOctal * sizeof(uint64_t)) + 4;
struct FormatString {
template <size_t N>
// NOLINTNEXTLINE(cppcoreguidelines-avoid-c-arrays)
- consteval FormatString(const utf8 (&input)[N]) : m_size{N - 1}, m_data{input}
+ consteval FormatString(const utf8 (&input)[N]) : m_size{N - 1}, m_data{input}
{
static_assert(N > 0);
}
@@ -279,86 +279,82 @@ using FormatResult = DrainResult;
/* TODO : require concept of a sink that takes pushBack() -> FudStatus */
/* TODO : sink concept also requires drain() -> FudStatus */
-template <typename Sink> requires Drainable<Sink, StringView>
-FormatResult format(Sink& sink, FormatCharMode formatMode, FormatString fmt);
+template <typename Sink>
+ requires Drainable<Sink, StringView>
+FormatResult format(Sink& sink, FormatString fmt);
-template <typename Sink, typename... Args> requires Drainable<Sink, StringView>
-FormatResult format(Sink& sink, FormatCharMode formatMode, FormatString fmt, Args&&... args);
+template <typename Sink, typename... Args>
+ requires Drainable<Sink, StringView>
+FormatResult format(Sink& sink, FormatString fmt, Args&&... args);
template <typename Sink>
-FormatResult format(Sink& sink, FormatCharMode formatMode, const FormatSpec& formatSpec, bool arg);
+FormatResult format(Sink& sink, const FormatSpec& formatSpec, bool arg);
template <typename Sink>
-FormatResult format(Sink& sink, FormatCharMode formatMode, const FormatSpec& formatSpec, char arg);
+FormatResult format(Sink& sink, const FormatSpec& formatSpec, char arg);
template <typename Sink>
-FormatResult format(Sink& sink, FormatCharMode formatMode, const FormatSpec& formatSpec, utf8 arg);
+FormatResult format(Sink& sink, const FormatSpec& formatSpec, utf8 arg);
template <typename Sink>
-FormatResult format(Sink& sink, FormatCharMode formatMode, const FormatSpec& formatSpec, int32_t arg);
+FormatResult format(Sink& sink, const FormatSpec& formatSpec, int32_t arg);
template <typename Sink>
-FormatResult format(Sink& sink, FormatCharMode formatMode, const FormatSpec& formatSpec, uint32_t arg);
+FormatResult format(Sink& sink, const FormatSpec& formatSpec, uint32_t arg);
template <typename Sink>
-FormatResult format(Sink& sink, FormatCharMode formatMode, const FormatSpec& formatSpec, int64_t arg);
+FormatResult format(Sink& sink, const FormatSpec& formatSpec, int64_t arg);
template <typename Sink>
-FormatResult format(Sink& sink, FormatCharMode formatMode, const FormatSpec& formatSpec, uint64_t arg);
+FormatResult format(Sink& sink, const FormatSpec& formatSpec, uint64_t arg);
template <typename Sink>
-FormatResult format(Sink& sink, FormatCharMode formatMode, const FormatSpec& formatSpec, float arg);
+FormatResult format(Sink& sink, const FormatSpec& formatSpec, float arg);
template <typename Sink>
-FormatResult format(Sink& sink, FormatCharMode formatMode, const FormatSpec& formatSpec, double arg);
+FormatResult format(Sink& sink, const FormatSpec& formatSpec, double arg);
template <typename Sink>
-FormatResult format(Sink& sink, FormatCharMode formatMode, const FormatSpec& formatSpec, long double arg);
+FormatResult format(Sink& sink, const FormatSpec& formatSpec, long double arg);
template <typename Sink>
-FormatResult format(Sink& sink, FormatCharMode formatMode, const FormatSpec& formatSpec, const utf8* arg);
+FormatResult format(Sink& sink, const FormatSpec& formatSpec, const utf8* arg);
template <typename Sink>
-FormatResult format(Sink& sink, FormatCharMode formatMode, const FormatSpec& formatSpec, const char* arg);
+FormatResult format(Sink& sink, const FormatSpec& formatSpec, const char* arg);
template <typename Sink>
-FormatResult format(Sink& sink, FormatCharMode formatMode, const FormatSpec& formatSpec, StringView arg);
+FormatResult format(Sink& sink, const FormatSpec& formatSpec, StringView arg);
template <typename Sink>
-FormatResult format(Sink& sink, FormatCharMode formatMode, const FormatSpec& formatSpec, const void* arg);
+FormatResult format(Sink& sink, const FormatSpec& formatSpec, const void* arg);
template <typename Sink>
-FormatResult format(Sink& sink, FormatCharMode formatMode, const FormatSpec& formatSpec, impl::FormatHandle arg);
+FormatResult format(Sink& sink, const FormatSpec& formatSpec, impl::FormatHandle arg);
namespace impl {
template <typename Sink, size_t Size>
-FormatResult vFormat(Sink& sink, FormatCharMode formatMode, FormatString fmt, const FormatArguments<Size>& args);
+FormatResult vFormat(Sink& sink, FormatString fmt, const FormatArguments<Size>& args);
size_t findSpec(StringView scanView);
} // namespace impl
-template <typename Sink, typename... Args> requires Drainable<Sink, StringView>
-FormatResult format(Sink& sink, FormatCharMode formatMode, FormatString fmt, Args&&... args)
+template <typename Sink, typename... Args>
+ requires Drainable<Sink, StringView>
+FormatResult format(Sink& sink, FormatString fmt, Args&&... args)
{
- if (formatMode != FormatCharMode::Unchecked) {
- return {0, FudStatus::NotImplemented};
- }
-
constexpr size_t numArgs = sizeof...(args);
auto formatArguments{FormatArguments<numArgs>::makeFormatArguments(std::forward<Args>(args)...)};
- return impl::vFormat(sink, formatMode, fmt, formatArguments);
+ return impl::vFormat(sink, fmt, formatArguments);
}
-template <typename Sink> requires Drainable<Sink, StringView>
-FormatResult format(Sink& sink, FormatCharMode formatMode, FormatString fmt)
+template <typename Sink>
+ requires Drainable<Sink, StringView>
+FormatResult format(Sink& sink, FormatString fmt)
{
- if (formatMode != FormatCharMode::Unchecked) {
- return {0, FudStatus::NotImplemented};
- }
-
auto scanView = fmt.view();
auto specIndex = impl::findSpec(scanView);
if (specIndex < scanView.length()) {
@@ -398,7 +394,7 @@ FudStatus vFormatPrepareNonPositionalSpec(
const uint32_t& argIndex);
template <typename Sink, size_t Size>
-FormatResult vFormat(Sink& sink, FormatCharMode formatMode, FormatString fmt, const FormatArguments<Size>& args)
+FormatResult vFormat(Sink& sink, FormatString fmt, const FormatArguments<Size>& args)
{
FormatResult result{0, FudStatus::Success};
auto scanView = fmt.view();
@@ -448,7 +444,7 @@ FormatResult vFormat(Sink& sink, FormatCharMode formatMode, FormatString fmt, co
return result;
}
auto argResult{std::visit(
- [&](const auto& arg) -> FormatResult { return format(sink, formatMode, formatSpec, arg); },
+ [&](const auto& arg) -> FormatResult { return format(sink, formatSpec, arg); },
args[formatArgIndex])};
if (argResult.status != FudStatus::Success) {
result.status = argResult.status;
@@ -801,9 +797,8 @@ StringView getSign(FormatSign formatSign, T arg)
template <typename Sink, typename T>
requires std::is_integral_v<T> and std::is_scalar_v<T>
-[[nodiscard]] FormatResult formatIntegral(Sink& sink, FormatCharMode formatMode, const FormatSpec& formatSpec, T arg)
+[[nodiscard]] FormatResult formatIntegral(Sink& sink, const FormatSpec& formatSpec, T arg)
{
- static_cast<void>(formatMode);
FormatResult result{0, FudStatus::Success};
if (formatSpec.takesPrecision || formatSpec.precision != FormatSpec::precisionUnspecified) {
result.status = FudStatus::FormatInvalid;
@@ -862,7 +857,6 @@ FudStatus fillIntegralBuffer(
}
}
if (formatType == FormatType::Character) {
- // return format(sink, formatMode, formatSpec, static_cast<utf8>(arg));
if constexpr (std::is_signed_v<T>) {
if (arg < 0) {
return FudStatus::FormatInvalid;
@@ -1024,7 +1018,7 @@ FormatResult rightPad(Sink& sink, FormatAlign::Value align, size_t width, utf8 f
[[nodiscard]] Result<bool, FudStatus> validateFloatFormatType(FormatType formatType);
template <typename Sink>
-[[nodiscard]] FormatResult formatNAN(Sink& sink, FormatCharMode formatMode, const FormatSpec& formatSpec, bool negative)
+[[nodiscard]] FormatResult formatNAN(Sink& sink, const FormatSpec& formatSpec, bool negative)
{
auto uppercaseResult = validateFloatFormatType(formatSpec.formatType);
if (uppercaseResult.isError()) {
@@ -1050,11 +1044,11 @@ template <typename Sink>
FormatSpec newSpec{};
newSpec.width = formatSpec.width;
newSpec.fill = formatSpec.fill;
- return format(sink, formatMode, newSpec, output);
+ return format(sink, newSpec, output);
}
template <typename Sink>
-[[nodiscard]] FormatResult formatINF(Sink& sink, FormatCharMode formatMode, const FormatSpec& formatSpec, bool negative)
+[[nodiscard]] FormatResult formatINF(Sink& sink, const FormatSpec& formatSpec, bool negative)
{
auto uppercaseResult = validateFloatFormatType(formatSpec.formatType);
if (uppercaseResult.isError()) {
@@ -1080,18 +1074,13 @@ template <typename Sink>
FormatSpec newSpec{};
newSpec.width = formatSpec.width;
newSpec.fill = formatSpec.fill;
- return format(sink, formatMode, newSpec, output);
+ return format(sink, newSpec, output);
}
template <typename Sink>
-[[nodiscard]] FormatResult formatZero(
- Sink& sink,
- FormatCharMode formatMode,
- const FormatSpec& formatSpec,
- bool negative)
+[[nodiscard]] FormatResult formatZero(Sink& sink, const FormatSpec& formatSpec, bool negative)
{
FormatResult result{0, FudStatus::NotImplemented};
- static_cast<void>(formatMode);
static_cast<void>(sink);
static_cast<void>(formatSpec);
static_cast<void>(negative);
@@ -1135,9 +1124,7 @@ void fillScientificBuffer(IntCharArray& buffer, Significand significand, uint8_t
}
}
- forEach(Span<utf8>{buffer.data(), bufferLength}, [&](uint8_t digit) {
- return static_cast<uint8_t>(digit + '0');
- });
+ forEach(Span<utf8>{buffer.data(), bufferLength}, [&](uint8_t digit) { return static_cast<uint8_t>(digit + '0'); });
for (size_t idx = 0; idx < bufferLength / 2; ++idx) {
auto rhsIndex = bufferLength - idx - 1;
@@ -1256,15 +1243,15 @@ template <typename Sink, typename DecimalRepr>
template <typename Sink, typename T>
requires std::is_floating_point_v<T> and std::is_scalar_v<T>
-[[nodiscard]] FormatResult formatFloat(Sink& sink, FormatCharMode formatMode, const FormatSpec& formatSpec, T arg)
+[[nodiscard]] FormatResult formatFloat(Sink& sink, const FormatSpec& formatSpec, T arg)
{
switch (std::fpclassify(arg)) {
case FP_INFINITE:
- return formatINF(sink, formatMode, formatSpec, std::signbit(arg));
+ return formatINF(sink, formatSpec, std::signbit(arg));
case FP_NAN:
- return formatNAN(sink, formatMode, formatSpec, std::signbit(arg));
+ return formatNAN(sink, formatSpec, std::signbit(arg));
case FP_ZERO:
- return formatZero(sink, formatMode, formatSpec, std::signbit(arg));
+ return formatZero(sink, formatSpec, std::signbit(arg));
default:
break;
}
@@ -1320,7 +1307,7 @@ template <typename Sink, typename T>
} // namespace impl
template <typename Sink>
-FormatResult format(Sink& sink, FormatCharMode formatMode, const FormatSpec& formatSpec, bool arg)
+FormatResult format(Sink& sink, const FormatSpec& formatSpec, bool arg)
{
FormatSpec boolSpec = formatSpec;
if (formatSpec.formatType == FormatType::Unspecified || formatSpec.formatType == FormatType::String) {
@@ -1328,65 +1315,64 @@ FormatResult format(Sink& sink, FormatCharMode formatMode, const FormatSpec& for
if (not arg) {
view = StringView{"false"};
}
- return format(sink, formatMode, boolSpec, view);
+ return format(sink, boolSpec, view);
}
boolSpec.formatType = FormatType::Unspecified;
- return impl::formatIntegral(sink, formatMode, boolSpec, static_cast<uint8_t>(arg));
+ return impl::formatIntegral(sink, boolSpec, static_cast<uint8_t>(arg));
}
template <typename Sink>
-FormatResult format(Sink& sink, FormatCharMode formatMode, const FormatSpec& formatSpec, utf8 arg)
+FormatResult format(Sink& sink, const FormatSpec& formatSpec, utf8 arg)
{
- return impl::formatIntegral(sink, formatMode, formatSpec, arg);
+ return impl::formatIntegral(sink, formatSpec, arg);
}
template <typename Sink>
-FormatResult format(Sink& sink, FormatCharMode formatMode, const FormatSpec& formatSpec, char arg)
+FormatResult format(Sink& sink, const FormatSpec& formatSpec, char arg)
{
- return impl::formatIntegral(sink, formatMode, formatSpec, arg);
+ return impl::formatIntegral(sink, formatSpec, arg);
}
template <typename Sink>
-FormatResult format(Sink& sink, FormatCharMode formatMode, const FormatSpec& formatSpec, int32_t arg)
+FormatResult format(Sink& sink, const FormatSpec& formatSpec, int32_t arg)
{
- return impl::formatIntegral(sink, formatMode, formatSpec, arg);
+ return impl::formatIntegral(sink, formatSpec, arg);
}
template <typename Sink>
-FormatResult format(Sink& sink, FormatCharMode formatMode, const FormatSpec& formatSpec, uint32_t arg)
+FormatResult format(Sink& sink, const FormatSpec& formatSpec, uint32_t arg)
{
- return impl::formatIntegral(sink, formatMode, formatSpec, arg);
+ return impl::formatIntegral(sink, formatSpec, arg);
}
template <typename Sink>
-FormatResult format(Sink& sink, FormatCharMode formatMode, const FormatSpec& formatSpec, int64_t arg)
+FormatResult format(Sink& sink, const FormatSpec& formatSpec, int64_t arg)
{
- return impl::formatIntegral(sink, formatMode, formatSpec, arg);
+ return impl::formatIntegral(sink, formatSpec, arg);
}
template <typename Sink>
-FormatResult format(Sink& sink, FormatCharMode formatMode, const FormatSpec& formatSpec, uint64_t arg)
+FormatResult format(Sink& sink, const FormatSpec& formatSpec, uint64_t arg)
{
- return impl::formatIntegral(sink, formatMode, formatSpec, arg);
+ return impl::formatIntegral(sink, formatSpec, arg);
}
template <typename Sink>
-FormatResult format(Sink& sink, FormatCharMode formatMode, const FormatSpec& formatSpec, float arg)
+FormatResult format(Sink& sink, const FormatSpec& formatSpec, float arg)
{
- return impl::formatFloat(sink, formatMode, formatSpec, arg);
+ return impl::formatFloat(sink, formatSpec, arg);
}
template <typename Sink>
-FormatResult format(Sink& sink, FormatCharMode formatMode, const FormatSpec& formatSpec, double arg)
+FormatResult format(Sink& sink, const FormatSpec& formatSpec, double arg)
{
- return impl::formatFloat(sink, formatMode, formatSpec, arg);
+ return impl::formatFloat(sink, formatSpec, arg);
}
template <typename Sink>
-FormatResult format(Sink& sink, FormatCharMode formatMode, const FormatSpec& formatSpec, long double arg)
+FormatResult format(Sink& sink, const FormatSpec& formatSpec, long double arg)
{
FormatResult result{0, FudStatus::NotImplemented};
- static_cast<void>(formatMode);
static_cast<void>(sink);
static_cast<void>(formatSpec);
static_cast<void>(arg);
@@ -1394,13 +1380,13 @@ FormatResult format(Sink& sink, FormatCharMode formatMode, const FormatSpec& for
}
template <typename Sink>
-FormatResult format(Sink& sink, FormatCharMode formatMode, const FormatSpec& formatSpec, const utf8* arg)
+FormatResult format(Sink& sink, const FormatSpec& formatSpec, const utf8* arg)
{
- return format(sink, formatMode, formatSpec, std::bit_cast<const char*>(arg));
+ return format(sink, formatSpec, std::bit_cast<const char*>(arg));
}
template <typename Sink>
-FormatResult format(Sink& sink, FormatCharMode formatMode, const FormatSpec& formatSpec, const char* arg)
+FormatResult format(Sink& sink, const FormatSpec& formatSpec, const char* arg)
{
if (arg == nullptr) {
return {0, FudStatus::NullPointer};
@@ -1410,19 +1396,15 @@ FormatResult format(Sink& sink, FormatCharMode formatMode, const FormatSpec& for
return {0, FudStatus::StringInvalid};
}
auto stringLength = static_cast<size_t>(stringLengthResult);
- return format(sink, formatMode, formatSpec, StringView{stringLength, arg});
+ return format(sink, formatSpec, StringView{stringLength, arg});
}
template <typename Sink>
-FormatResult format(Sink& sink, FormatCharMode formatMode, const FormatSpec& formatSpec, StringView arg)
+FormatResult format(Sink& sink, const FormatSpec& formatSpec, StringView arg)
{
/* TODO: implement unicode points, check with formatMode */
FormatResult result{0, FudStatus::Success};
- if (formatMode != FormatCharMode::Unchecked) {
- result.status = FudStatus::NotSupported;
- return result;
- }
if (formatSpec.formatType != FormatType::Unspecified && formatSpec.formatType != FormatType::String &&
formatSpec.formatType != FormatType::Escaped) {
@@ -1457,8 +1439,6 @@ FormatResult format(Sink& sink, FormatCharMode formatMode, const FormatSpec& for
return result;
}
- // printf("From format(sink, mode, spec, stringview arg): Arg contents are %p %zu?\n\n", arg.c_str(), arg.length());
- // printf("From format(sink, mode, spec, stringview arg): What?\n%s\n", std::format("{}", std::string_view{arg.c_str(), arg.length()}).c_str());
auto drainViewResult = sink.drain(arg);
result.bytesDrained += drainViewResult.bytesDrained;
result.status = drainViewResult.status;
@@ -1475,10 +1455,10 @@ FormatResult format(Sink& sink, FormatCharMode formatMode, const FormatSpec& for
}
template <typename Sink>
-FormatResult format(Sink& sink, FormatCharMode formatMode, const FormatSpec& formatSpec, const void* arg)
+FormatResult format(Sink& sink, const FormatSpec& formatSpec, const void* arg)
{
auto pointerFormatSpec = formatSpec;
- if (pointerFormatSpec.formatType == FormatType::Unspecified ||
+ if (pointerFormatSpec.formatType == FormatType::Unspecified ||
pointerFormatSpec.formatType == FormatType::PointerLower) {
pointerFormatSpec.formatType = FormatType::HexLower;
} else if (pointerFormatSpec.formatType == FormatType::PointerUpper) {
@@ -1492,19 +1472,18 @@ FormatResult format(Sink& sink, FormatCharMode formatMode, const FormatSpec& for
return DrainResult{0, FudStatus::FormatInvalid};
}
pointerFormatSpec.alternateForm = true;
- return impl::formatIntegral(sink, formatMode, pointerFormatSpec, std::bit_cast<uintptr_t>(arg));
+ return impl::formatIntegral(sink, pointerFormatSpec, std::bit_cast<uintptr_t>(arg));
}
template <typename Sink>
-FormatResult format(Sink& sink, FormatCharMode formatMode, const FormatSpec& formatSpec, impl::FormatHandle arg)
+FormatResult format(Sink& sink, const FormatSpec& formatSpec, impl::FormatHandle arg)
{
// FormatResult result{0, FudStatus::NotImplemented};
static_cast<void>(sink);
- static_cast<void>(formatMode);
static_cast<void>(formatSpec);
static_cast<void>(arg);
- return format(sink, formatMode, formatSpec, "not implemented");
+ return format(sink, formatSpec, "not implemented");
}
} // namespace fud
diff --git a/include/fud_print.hpp b/include/fud_print.hpp
index a8e61de..13b8a52 100644
--- a/include/fud_print.hpp
+++ b/include/fud_print.hpp
@@ -32,7 +32,7 @@ template <typename... Args>
FormatResult print(FormatString fmt, Args&&... args)
{
StdOutSink outSink{};
- return format(outSink, FormatCharMode::Unchecked, fmt, std::forward<Args>(args)...);
+ return format(outSink, fmt, std::forward<Args>(args)...);
}
inline void debugPrint(FormatString fmt)
diff --git a/include/fud_result.hpp b/include/fud_result.hpp
index 4e08323..ad5509f 100644
--- a/include/fud_result.hpp
+++ b/include/fud_result.hpp
@@ -203,6 +203,12 @@ class [[nodiscard]] Result {
return *std::bit_cast<const T*>(m_data.data());
}
+ [[nodiscard]] constexpr T& getMutOkay() &
+ {
+ fudAssert(isOkay());
+ return *std::bit_cast<T*>(m_data.data());
+ }
+
[[nodiscard]] constexpr const T& getOkayOr(const T& alternative) const&
{
if (!isOkay()) {
diff --git a/source/fud_assert.cpp b/source/fud_assert.cpp
index 64b3275..82230b9 100644
--- a/source/fud_assert.cpp
+++ b/source/fud_assert.cpp
@@ -63,7 +63,6 @@ void assertFailMessage(const char* assertion, const std::source_location sourceL
}
static_cast<void>(format(
sink,
- FormatCharMode::Unchecked,
u8"{}:{}:{}: {}\n",
fileName,
functionName,
diff --git a/source/fud_print.cpp b/source/fud_print.cpp
index 6b7bac1..65041e9 100644
--- a/source/fud_print.cpp
+++ b/source/fud_print.cpp
@@ -45,7 +45,7 @@ DrainResult StdOutSink::drain(StringView source)
FormatResult print(FormatString fmt)
{
StdOutSink outSink{};
- return format(outSink, FormatCharMode::Unchecked, fmt);
+ return outSink.drain(fmt.view());
}
} // namespace fud
diff --git a/test/test_format.cpp b/test/test_format.cpp
index 0c5c520..d70db34 100644
--- a/test/test_format.cpp
+++ b/test/test_format.cpp
@@ -17,7 +17,7 @@
#include "fud_format.hpp"
#include "fud_string_view.hpp"
-#include "fud_print.hpp"
+// #include "fud_print.hpp"
#include "gtest/gtest.h"
#include <format>
@@ -418,13 +418,13 @@ TEST(FormatTest, NoArgFormatTest)
{
String sink{};
auto expected = std::format("Test");
- auto formatResult = format(sink, FormatCharMode::Unchecked, u8"Test");
+ auto formatResult = format(sink, u8"Test");
EXPECT_TRUE(formatResult.isOkay());
EXPECT_STREQ(sink.c_str(), expected.c_str());
ASSERT_EQ(sink.clear(), FudStatus::Success);
expected = std::format("");
- formatResult = format(sink, FormatCharMode::Unchecked, u8"");
+ formatResult = format(sink, u8"");
EXPECT_TRUE(formatResult.isOkay());
EXPECT_STREQ(sink.c_str(), expected.c_str());
}
@@ -432,66 +432,66 @@ TEST(FormatTest, NoArgFormatTest)
TEST(FormatTest, OneNumberFormatTest)
{
String sink{};
- auto formatResult = format(sink, FormatCharMode::Unchecked, u8"Test {:}", 42U);
+ auto formatResult = format(sink, u8"Test {:}", 42U);
EXPECT_TRUE(formatResult.isOkay());
ASSERT_EQ(sink.clear(), FudStatus::Success);
auto expected = std::format("{:6}", 42U);
- formatResult = format(sink, FormatCharMode::Unchecked, u8"{:6}", 42U);
+ formatResult = format(sink, u8"{:6}", 42U);
EXPECT_TRUE(formatResult.isOkay());
EXPECT_STREQ(sink.c_str(), expected.c_str());
ASSERT_EQ(sink.clear(), FudStatus::Success);
expected = std::format("{:*<6}", std::numeric_limits<uint64_t>::max());
- formatResult = format(sink, FormatCharMode::Unchecked, u8"{:*<6}", std::numeric_limits<uint64_t>::max());
+ formatResult = format(sink, u8"{:*<6}", std::numeric_limits<uint64_t>::max());
EXPECT_TRUE(formatResult.isOkay());
EXPECT_STREQ(sink.c_str(), expected.c_str());
ASSERT_EQ(sink.clear(), FudStatus::Success);
expected = std::format("{:*<6}", std::numeric_limits<int64_t>::min());
- formatResult = format(sink, FormatCharMode::Unchecked, u8"{:*<6}", std::numeric_limits<int64_t>::min());
+ formatResult = format(sink, u8"{:*<6}", std::numeric_limits<int64_t>::min());
EXPECT_TRUE(formatResult.isOkay());
EXPECT_STREQ(sink.c_str(), expected.c_str());
ASSERT_EQ(sink.clear(), FudStatus::Success);
expected = std::format("{:}", std::numeric_limits<int8_t>::min());
- formatResult = format(sink, FormatCharMode::Unchecked, u8"{:}", std::numeric_limits<int8_t>::min());
+ formatResult = format(sink, u8"{:}", std::numeric_limits<int8_t>::min());
EXPECT_TRUE(formatResult.isOkay());
EXPECT_STREQ(sink.c_str(), expected.c_str());
ASSERT_EQ(sink.clear(), FudStatus::Success);
expected = std::format("{:#X}", std::numeric_limits<int8_t>::min());
- formatResult = format(sink, FormatCharMode::Unchecked, u8"{:#X}", std::numeric_limits<int8_t>::min());
+ formatResult = format(sink, u8"{:#X}", std::numeric_limits<int8_t>::min());
EXPECT_TRUE(formatResult.isOkay());
EXPECT_STREQ(sink.c_str(), expected.c_str());
ASSERT_EQ(sink.clear(), FudStatus::Success);
expected = std::format("{:*<6}", 42U);
- formatResult = format(sink, FormatCharMode::Unchecked, u8"{:*<6}", 42U);
+ formatResult = format(sink, u8"{:*<6}", 42U);
EXPECT_TRUE(formatResult.isOkay());
EXPECT_STREQ(sink.c_str(), expected.c_str());
ASSERT_EQ(sink.clear(), FudStatus::Success);
expected = std::format("{:*>6}", 42U);
- formatResult = format(sink, FormatCharMode::Unchecked, u8"{:*>6}", 42U);
+ formatResult = format(sink, u8"{:*>6}", 42U);
EXPECT_TRUE(formatResult.isOkay());
EXPECT_STREQ(sink.c_str(), expected.c_str());
ASSERT_EQ(sink.clear(), FudStatus::Success);
expected = std::format("{:*^6}", 42U);
- formatResult = format(sink, FormatCharMode::Unchecked, u8"{:*^6}", 42U);
+ formatResult = format(sink, u8"{:*^6}", 42U);
EXPECT_TRUE(formatResult.isOkay());
EXPECT_STREQ(sink.c_str(), expected.c_str());
ASSERT_EQ(sink.clear(), FudStatus::Success);
expected = std::format("{:*<6}", 'x');
- formatResult = format(sink, FormatCharMode::Unchecked, u8"{:*<6}", 'x');
+ formatResult = format(sink, u8"{:*<6}", 'x');
EXPECT_TRUE(formatResult.isOkay());
EXPECT_STREQ(sink.c_str(), expected.c_str());
ASSERT_EQ(sink.clear(), FudStatus::Success);
expected = std::format("{:6d}", 'x');
- formatResult = format(sink, FormatCharMode::Unchecked, u8"{:6d}", 'x');
+ formatResult = format(sink, u8"{:6d}", 'x');
EXPECT_TRUE(formatResult.isOkay());
EXPECT_STREQ(sink.c_str(), expected.c_str());
}
@@ -502,7 +502,7 @@ TEST(FormatTest, OneBoolFormatTest)
ASSERT_EQ(sink.clear(), FudStatus::Success);
auto expected = std::format("{:6}", true);
- auto formatResult = format(sink, FormatCharMode::Unchecked, u8"{:6}", true);
+ auto formatResult = format(sink, u8"{:6}", true);
EXPECT_TRUE(formatResult.isOkay());
EXPECT_STREQ(sink.c_str(), expected.c_str());
}
@@ -514,13 +514,13 @@ TEST(FormatTest, OneFloatFormatUnspecifiedTest)
ASSERT_EQ(sink.clear(), FudStatus::Success);
auto expected = std::format("{:}", 42.0);
- auto formatResult = format(sink, FormatCharMode::Unchecked, u8"{:}", 42.0);
+ auto formatResult = format(sink, u8"{:}", 42.0);
EXPECT_TRUE(formatResult.isOkay());
EXPECT_STREQ(sink.c_str(), expected.c_str());
ASSERT_EQ(sink.clear(), FudStatus::Success);
expected = std::format("{:1.0}", 42.0);
- formatResult = format(sink, FormatCharMode::Unchecked, u8"{:1.0}", 42.0);
+ formatResult = format(sink, u8"{:1.0}", 42.0);
EXPECT_TRUE(formatResult.isOkay());
EXPECT_STREQ(sink.c_str(), expected.c_str());
expected = std::format("{:1.0}", 42.0);
@@ -538,73 +538,73 @@ TEST(FormatTest, OneFloatFormatScientificTest)
ASSERT_EQ(sink.clear(), FudStatus::Success);
auto expected = std::format("{:e}", 42.0);
- auto formatResult = format(sink, FormatCharMode::Unchecked, u8"{:e}", 42.0);
+ auto formatResult = format(sink, u8"{:e}", 42.0);
EXPECT_TRUE(formatResult.isOkay());
EXPECT_STREQ(sink.c_str(), expected.c_str());
expected = std::format("{:1.2e}", 0.99);
ASSERT_EQ(sink.clear(), FudStatus::Success);
- formatResult = format(sink, FormatCharMode::Unchecked, u8"{:1.2e}", 0.99);
+ formatResult = format(sink, u8"{:1.2e}", 0.99);
EXPECT_TRUE(formatResult.isOkay());
EXPECT_STREQ(sink.c_str(), expected.c_str());
expected = std::format("{:1.1e}", 0.99);
ASSERT_EQ(sink.clear(), FudStatus::Success);
- formatResult = format(sink, FormatCharMode::Unchecked, u8"{:1.1e}", 0.99);
+ formatResult = format(sink, u8"{:1.1e}", 0.99);
EXPECT_TRUE(formatResult.isOkay());
EXPECT_STREQ(sink.c_str(), expected.c_str());
expected = std::format("{:1.0e}", 0.99);
ASSERT_EQ(sink.clear(), FudStatus::Success);
- formatResult = format(sink, FormatCharMode::Unchecked, u8"{:1.0e}", 0.99);
+ formatResult = format(sink, u8"{:1.0e}", 0.99);
EXPECT_TRUE(formatResult.isOkay());
EXPECT_STREQ(sink.c_str(), expected.c_str());
expected = std::format("{:1.0e}", -0.99);
ASSERT_EQ(sink.clear(), FudStatus::Success);
- formatResult = format(sink, FormatCharMode::Unchecked, u8"{:1.0e}", -0.99);
+ formatResult = format(sink, u8"{:1.0e}", -0.99);
EXPECT_TRUE(formatResult.isOkay());
EXPECT_STREQ(sink.c_str(), expected.c_str());
expected = std::format("{:1.0e}", 42.0);
ASSERT_EQ(sink.clear(), FudStatus::Success);
- formatResult = format(sink, FormatCharMode::Unchecked, u8"{:1.0e}", 42.0);
+ formatResult = format(sink, u8"{:1.0e}", 42.0);
EXPECT_TRUE(formatResult.isOkay());
EXPECT_STREQ(sink.c_str(), expected.c_str());
expected = std::format("{:1.0e}", 4.20e-5);
ASSERT_EQ(sink.clear(), FudStatus::Success);
- formatResult = format(sink, FormatCharMode::Unchecked, u8"{:1.0e}", 4.20e-5);
+ formatResult = format(sink, u8"{:1.0e}", 4.20e-5);
EXPECT_TRUE(formatResult.isOkay());
EXPECT_STREQ(sink.c_str(), expected.c_str());
expected = std::format("{:1.0e}", -4.20e-5);
ASSERT_EQ(sink.clear(), FudStatus::Success);
- formatResult = format(sink, FormatCharMode::Unchecked, u8"{:1.0e}", -4.20e-5);
+ formatResult = format(sink, u8"{:1.0e}", -4.20e-5);
EXPECT_TRUE(formatResult.isOkay());
EXPECT_STREQ(sink.c_str(), expected.c_str());
expected = std::format("e {:e}", 3.14);
ASSERT_EQ(sink.clear(), FudStatus::Success);
- formatResult = format(sink, FormatCharMode::Unchecked, u8"e {:e}", 3.14);
+ formatResult = format(sink, u8"e {:e}", 3.14);
EXPECT_TRUE(formatResult.isOkay());
EXPECT_STREQ(sink.c_str(), expected.c_str());
expected = std::format("E {:E}", 3.14);
ASSERT_EQ(sink.clear(), FudStatus::Success);
- formatResult = format(sink, FormatCharMode::Unchecked, u8"E {:E}", 3.14);
+ formatResult = format(sink, u8"E {:E}", 3.14);
EXPECT_TRUE(formatResult.isOkay());
EXPECT_STREQ(sink.c_str(), expected.c_str());
expected = std::format("e {:.0e}", 3.14);
ASSERT_EQ(sink.clear(), FudStatus::Success);
- formatResult = format(sink, FormatCharMode::Unchecked, u8"e {:.0e}", 3.14);
+ formatResult = format(sink, u8"e {:.0e}", 3.14);
EXPECT_TRUE(formatResult.isOkay());
EXPECT_STREQ(sink.c_str(), expected.c_str());
expected = std::format("e {:+#010.0e}", 3.14);
ASSERT_EQ(sink.clear(), FudStatus::Success);
- formatResult = format(sink, FormatCharMode::Unchecked, u8"e {:+#010.0e}", 3.14);
+ formatResult = format(sink, u8"e {:+#010.0e}", 3.14);
EXPECT_TRUE(formatResult.isOkay());
EXPECT_STREQ(sink.c_str(), expected.c_str());
@@ -613,31 +613,31 @@ TEST(FormatTest, OneFloatFormatScientificTest)
expected = std::format("e {:.0e}", maxVal / 4);
ASSERT_EQ(sink.clear(), FudStatus::Success);
- formatResult = format(sink, FormatCharMode::Unchecked, u8"e {:.0e}", maxVal / 4);
+ formatResult = format(sink, u8"e {:.0e}", maxVal / 4);
EXPECT_TRUE(formatResult.isOkay());
EXPECT_STREQ(sink.c_str(), expected.c_str());
expected = std::format("e {:.0e}", maxVal / 2);
ASSERT_EQ(sink.clear(), FudStatus::Success);
- formatResult = format(sink, FormatCharMode::Unchecked, u8"e {:.0e}", maxVal / 2);
+ formatResult = format(sink, u8"e {:.0e}", maxVal / 2);
EXPECT_TRUE(formatResult.isOkay());
EXPECT_STREQ(sink.c_str(), expected.c_str());
expected = std::format("e {:.0e}", maxVal);
ASSERT_EQ(sink.clear(), FudStatus::Success);
- formatResult = format(sink, FormatCharMode::Unchecked, u8"e {:.0e}", maxVal);
+ formatResult = format(sink, u8"e {:.0e}", maxVal);
EXPECT_TRUE(formatResult.isOkay());
EXPECT_STREQ(sink.c_str(), expected.c_str());
expected = std::format("e {:.0e}", std::numeric_limits<double>::min());
ASSERT_EQ(sink.clear(), FudStatus::Success);
- formatResult = format(sink, FormatCharMode::Unchecked, u8"e {:.0e}", std::numeric_limits<double>::min());
+ formatResult = format(sink, u8"e {:.0e}", std::numeric_limits<double>::min());
EXPECT_TRUE(formatResult.isOkay());
EXPECT_STREQ(sink.c_str(), expected.c_str());
expected = std::format("e {:.0e}", subNormMin);
ASSERT_EQ(sink.clear(), FudStatus::Success);
- formatResult = format(sink, FormatCharMode::Unchecked, u8"e {:.0e}", subNormMin);
+ formatResult = format(sink, u8"e {:.0e}", subNormMin);
EXPECT_TRUE(formatResult.isOkay());
EXPECT_STREQ(sink.c_str(), expected.c_str());
@@ -645,7 +645,7 @@ TEST(FormatTest, OneFloatFormatScientificTest)
expected = std::format("E#+ {:+#060.50E}", val);
ASSERT_EQ(sink.clear(), FudStatus::Success);
- formatResult = format(sink, FormatCharMode::Unchecked, u8"E#+ {:+#060.50E}", val);
+ formatResult = format(sink, u8"E#+ {:+#060.50E}", val);
EXPECT_TRUE(formatResult.isOkay());
EXPECT_STREQ(sink.c_str(), expected.c_str());
// Which is: "E#+ +0003.0000000000000000000000000000000000E+00"
@@ -654,19 +654,19 @@ TEST(FormatTest, OneFloatFormatScientificTest)
/*
expected = std::format("E#+ {:Z>+#060.30E}", val);
ASSERT_EQ(sink.clear(), FudStatus::Success);
- formatResult = format(sink, FormatCharMode::Unchecked, u8"E#+ {:Z>+#060.30E}", val);
+ formatResult = format(sink, u8"E#+ {:Z>+#060.30E}", val);
EXPECT_TRUE(formatResult.isOkay());
EXPECT_STREQ(sink.c_str(), expected.c_str());
expected = std::format("E#+ {:Z<+#060.30E}", val);
ASSERT_EQ(sink.clear(), FudStatus::Success);
- formatResult = format(sink, FormatCharMode::Unchecked, u8"E#+ {:Z<+#060.30E}", val);
+ formatResult = format(sink, u8"E#+ {:Z<+#060.30E}", val);
EXPECT_TRUE(formatResult.isOkay());
EXPECT_STREQ(sink.c_str(), expected.c_str());
expected = std::format("E#+ {:Z^+#060.30E}", val);
ASSERT_EQ(sink.clear(), FudStatus::Success);
- formatResult = format(sink, FormatCharMode::Unchecked, u8"E#+ {:Z^+#060.30E}", val);
+ formatResult = format(sink, u8"E#+ {:Z^+#060.30E}", val);
EXPECT_TRUE(formatResult.isOkay());
EXPECT_STREQ(sink.c_str(), expected.c_str());
*/
@@ -701,13 +701,13 @@ TEST(FormatTest, TwoArgFormatTest)
{
String sink{};
auto expected = std::format("Test {:} {:}", 1U, false);
- auto formatResult = format(sink, FormatCharMode::Unchecked, u8"Test {:} {:}", 1U, false);
+ auto formatResult = format(sink, u8"Test {:} {:}", 1U, false);
EXPECT_TRUE(formatResult.isOkay());
EXPECT_STREQ(sink.c_str(), expected.c_str());
ASSERT_EQ(sink.clear(), FudStatus::Success);
expected = std::format("Test {:} {:}", 1U, "Hello");
- formatResult = format(sink, FormatCharMode::Unchecked, u8"Test {:} {:}", 1U, u8"Hello");
+ formatResult = format(sink, u8"Test {:} {:}", 1U, u8"Hello");
EXPECT_TRUE(formatResult.isOkay());
EXPECT_STREQ(sink.c_str(), expected.c_str());
}
@@ -716,14 +716,13 @@ TEST(FormatTest, StringView)
{
String sink{};
auto expected = std::format("Test {}", std::string_view{"Hello, World!"});
- auto formatResult = format(sink, FormatCharMode::Unchecked, u8"Test {}", StringView{u8"Hello, World!"});
+ auto formatResult = format(sink, u8"Test {}", StringView{u8"Hello, World!"});
EXPECT_TRUE(formatResult.isOkay());
EXPECT_STREQ(sink.c_str(), expected.c_str());
ASSERT_EQ(sink.clear(), FudStatus::Success);
formatResult = fud::format(
sink,
- fud::FormatCharMode::Unchecked,
u8"CREATE TABLE IF NOT EXISTS {} ({} {} {});",
StringView{u8"AtomicSymbol"}.as_string_view(),
StringView{u8"AtomicNumber INTEGER PRIMARY KEY"}.as_string_view(),
@@ -742,7 +741,7 @@ TEST(FormatTest, StringView)
TEST(FormatTest, NumArgs)
{
String sink{};
- auto formatResult = format(sink, FormatCharMode::Unchecked, u8"Test {} {} {}", StringView{u8"Hello, World!"});
+ auto formatResult = format(sink, u8"Test {} {} {}", StringView{u8"Hello, World!"});
ASSERT_EQ(formatResult.status, FudStatus::FormatInvalid);
}