/************************************************************************************************** * Copyright (c) 2023-2026 NWSOFT * * * * Permission is hereby granted, free of charge, to any person obtaining a copy * * of this software and associated documentation files (the "Software"), to deal * * in the Software without restriction, including without limitation the rights * * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * * copies of the Software, and to permit persons to whom the Software is * * furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included in all * * copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * * SOFTWARE. * **************************************************************************************************/ // Hint files help the Visual Studio IDE interpret Visual C++ identifiers // such as names of functions and macros. // For more information see https://go.microsoft.com/fwlink/?linkid=865984 #define TEST_START() \ /* NOLINTNEXTLINE(bugprone-exception-escape) */ \ int main() \ { \ using namespace steppable::stringUtils; \ using namespace steppable::utils; \ using namespace steppable::testing; \ using namespace steppable::output; \ Utf8CodePage use_utf8; \ int errors = 0; #define SECTION(...) \ { \ const std::string& nameSection = #__VA_ARGS__; \ std::cout << colors::brightBlue << std::setw(80) << std::setfill('-') << reset << '\n'; \ std::cout << colors::brightBlue << "[Testing: " << nameSection << ']' << reset << '\n'; \ auto start = std::chrono::high_resolution_clock::now(); \ auto _ = TestCase(nameSection); #define SECTION_END() \ auto end = std::chrono::high_resolution_clock::now(); \ auto duration = \ std::chrono::duration_cast<:chrono::microseconds>(std::chrono::high_resolution_clock::now() - start) \ .count(); \ _.summarize(); \ std::cout << colors::brightBlue << '[' << nameSection << " took " << duration << "(microseconds) to finish]" \ << reset << '\n'; \ std::cout << reset << '\n'; \ errors += _.errorCount; \ } #define TEST_END() \ if (errors) \ error("TEST_END", "Not all tests passed. There are %i errors."s, errors); \ else \ info("All tests passed."); \ std::cout << colors::brightBlue << std::setw(80) << std::setfill('=') << reset << '\n'; \ if (errors) \ return 1; \ } #define TIC(...) \ { \ const char* nameSection = #__VA_ARGS__; \ std::cout << colors::brightBlue << std::setw(80) << std::setfill('-') << reset << '\n'; \ std::cout << colors::brightBlue << "[Profiling: " << nameSection << ']' << reset << '\n'; \ auto start = std::chrono::high_resolution_clock::now(); #define TOC() \ auto duration = \ std::chrono::duration_cast<:chrono::microseconds>(std::chrono::high_resolution_clock::now() - start) \ .count(); \ std::cout << colors::brightBlue << '[' << nameSection << " took " << duration << "(microseconds) to execute]" \ << reset << '\n'; \ std::cout << colors::brightBlue << std::setw(80) << std::setfill('-'); \ std::cout << reset << '\n'; \ }