Add tests for FMT_ENFORCE_COMPILE_STRING, fix several errors (#2038)
This commit is contained in:
@@ -106,6 +106,14 @@ add_fmt_test(printf-test)
|
||||
add_fmt_test(ranges-test)
|
||||
add_fmt_test(scan-test)
|
||||
|
||||
if (NOT MSVC)
|
||||
# FMT_ENFORCE_COMPILE_STRING not supported under MSVC
|
||||
# See https://developercommunity.visualstudio.com/content/problem/1277597/internal-compiler-c0001-error-on-complex-nested-la.html
|
||||
add_fmt_test(enforce-compile-string-test)
|
||||
target_compile_definitions(enforce-compile-string-test PRIVATE
|
||||
"-DFMT_ENFORCE_COMPILE_STRING")
|
||||
endif()
|
||||
|
||||
if (NOT DEFINED MSVC_STATIC_RUNTIME AND MSVC)
|
||||
foreach (flag_var
|
||||
CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
|
||||
|
||||
74
test/enforce-compile-string-test.cc
Normal file
74
test/enforce-compile-string-test.cc
Normal file
@@ -0,0 +1,74 @@
|
||||
// Formatting library for C++ - formatting library tests
|
||||
//
|
||||
// Copyright (c) 2012 - present, Victor Zverovich
|
||||
// All rights reserved.
|
||||
//
|
||||
// For the license information refer to format.h.
|
||||
|
||||
#include <array>
|
||||
#include <chrono>
|
||||
#include <iterator>
|
||||
#include <list>
|
||||
#include <string>
|
||||
|
||||
#include "fmt/chrono.h"
|
||||
#include "fmt/color.h"
|
||||
#include "fmt/format.h"
|
||||
#include "fmt/locale.h"
|
||||
#include "fmt/ostream.h"
|
||||
#include "fmt/ranges.h"
|
||||
|
||||
// Exercise the API to verify that everything we expect to can compile.
|
||||
void test_format_api() {
|
||||
fmt::format(FMT_STRING("{}"), 42);
|
||||
fmt::format(FMT_STRING(L"{}"), 42);
|
||||
fmt::format(FMT_STRING("noop"));
|
||||
|
||||
fmt::to_string(42);
|
||||
fmt::to_wstring(42);
|
||||
|
||||
std::list<char> out;
|
||||
fmt::format_to(std::back_inserter(out), FMT_STRING("{}"), 42);
|
||||
|
||||
char buffer[4];
|
||||
fmt::format_to_n(buffer, 3, FMT_STRING("{}"), 12345);
|
||||
|
||||
wchar_t wbuffer[4];
|
||||
fmt::format_to_n(wbuffer, 3, FMT_STRING(L"{}"), 12345);
|
||||
}
|
||||
|
||||
void test_literals_api() {
|
||||
#if FMT_USE_UDL_TEMPLATE
|
||||
using namespace fmt::literals;
|
||||
"{}c{}"_format("ab", 1);
|
||||
L"{}c{}"_format(L"ab", 1);
|
||||
#endif
|
||||
}
|
||||
|
||||
void test_chrono() {
|
||||
fmt::format(FMT_STRING("{}"), std::chrono::seconds(42));
|
||||
fmt::format(FMT_STRING(L"{}"), std::chrono::seconds(42));
|
||||
}
|
||||
|
||||
void test_text_style() {
|
||||
fmt::print(fg(fmt::rgb(255, 20, 30)), FMT_STRING("{}"), "rgb(255,20,30)");
|
||||
fmt::format(fg(fmt::rgb(255, 20, 30)), FMT_STRING("{}"), "rgb(255,20,30)");
|
||||
|
||||
fmt::text_style ts = fg(fmt::rgb(255, 20, 30));
|
||||
std::string out;
|
||||
fmt::format_to(std::back_inserter(out), ts,
|
||||
FMT_STRING("rgb(255,20,30){}{}{}"), 1, 2, 3);
|
||||
}
|
||||
|
||||
void test_range() {
|
||||
std::array<char, 5> hello = {'h', 'e', 'l', 'l', 'o'};
|
||||
fmt::format(FMT_STRING("{}"), hello);
|
||||
}
|
||||
|
||||
int main() {
|
||||
test_format_api();
|
||||
test_literals_api();
|
||||
test_chrono();
|
||||
test_text_style();
|
||||
test_range();
|
||||
}
|
||||
@@ -51,6 +51,11 @@ TEST(RangesTest, FormatMap) {
|
||||
EXPECT_EQ("{(\"one\", 1), (\"two\", 2)}", fmt::format("{}", simap));
|
||||
}
|
||||
|
||||
TEST(RangesTest, FormatArrayOfLiterals) {
|
||||
const char* aol[] = {"1234", "abcd"};
|
||||
EXPECT_EQ("{\"1234\", \"abcd\"}", fmt::format("{}", aol));
|
||||
}
|
||||
|
||||
TEST(RangesTest, FormatPair) {
|
||||
std::pair<int64_t, float> pa1{42, 1.5f};
|
||||
EXPECT_EQ("(42, 1.5)", fmt::format("{}", pa1));
|
||||
|
||||
Reference in New Issue
Block a user