/* * Copyright (C) 2022 Riyyi * * SPDX-License-Identifier: MIT */ #include // size_t #include // int32_t, uint32_t, int64_t #include #include #include #include #include "macro.h" #include "testcase.h" #include "testsuite.h" #include "util/format/format.h" // ----------------------------------------- TEST_CASE(FormatBasicTypes) { std::string result; result = Util::format(""); EXPECT_EQ(result, ""); result = Util::format("{}", nullptr); EXPECT_EQ(result, "(nil)"); int* number = new int(3); result = Util::format("{}", number); EXPECT_EQ(result.substr(0, 2), "0x"); result = Util::format("{}", true); EXPECT_EQ(result, "true"); result = Util::format("{}", false); EXPECT_EQ(result, "false"); result = Util::format("{}", 'c'); EXPECT_EQ(result, "c"); const char* cString = "C string"; result = Util::format("{}", cString); EXPECT_EQ(result, "C string"); std::string string = "string"; result = Util::format("{}", string); EXPECT_EQ(result, "string"); std::string_view stringView = "string_view"; result = Util::format("{}", stringView); EXPECT_EQ(result, "string_view"); result = Util::format("{} {}", "Hello", "World"); EXPECT_EQ(result, "Hello World"); result = Util::format("{{escaped braces}}"); EXPECT_EQ(result, "{escaped braces}"); result = Util::format("{{braces{}}}", "Something"); EXPECT_EQ(result, "{bracesSomething}"); } TEST_CASE(FormatNumbers) { std::string result; int32_t i32 = 68766; result = Util::format("{}", i32); // int EXPECT_EQ(result, "68766"); uint32_t u32 = 123841; // unsigned int result = Util::format("{}", u32); EXPECT_EQ(result, "123841"); int64_t i64 = 237942768427; // long int result = Util::format("{}", i64); EXPECT_EQ(result, "237942768427"); size_t u64 = 1337; // long unsigned int result = Util::format("{}", u64); EXPECT_EQ(result, "1337"); float f32R = 245789.70000; result = Util::format("{}", f32R); EXPECT_EQ(result, "245789.703125"); float f32 = 45645.3233; result = Util::format("{}", f32); EXPECT_EQ(result, "45645.324219"); double f64 = 87522.300000000; result = Util::format("{}", f64); EXPECT_EQ(result, "87522.300000"); double pi = 3.14159265359; result = Util::format("{:.15}", pi); EXPECT_EQ(result, "3.141592653590000"); } TEST_CASE(FormatContainers) { std::string result; std::vector vector { "thing1", "thing2", "thing3" }; result = Util::format("{}", vector); EXPECT_EQ(result, R"({ thing1, thing2, thing3 })"); std::map map { { "thing3", 3 }, { "thing2", 2 }, { "thing1", 1 } }; result = Util::format("{}", map); EXPECT_EQ(result, R"({ "thing1": 1, "thing2": 2, "thing3": 3 })"); // Multidimensional containers arent supported, // the user should write a customization point std::vector> twoDimensionalVector { { "thing1", "thing2", "thing3" }, { "thing1", "thing2", "thing3" } }; result = Util::format("{}", twoDimensionalVector); EXPECT_EQ(result, R"({ { thing1, thing2, thing3 }, { thing1, thing2, thing3 } })"); }