summaryrefslogtreecommitdiffhomepage
path: root/src/test-unicode.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/test-unicode.cpp')
-rw-r--r--src/test-unicode.cpp51
1 files changed, 34 insertions, 17 deletions
diff --git a/src/test-unicode.cpp b/src/test-unicode.cpp
index d638cbb..a30be70 100644
--- a/src/test-unicode.cpp
+++ b/src/test-unicode.cpp
@@ -1,11 +1,11 @@
#define BOOST_TEST_MODULE unicode_test
+#include <boost/locale.hpp>
#include <boost/test/included/unit_test.hpp>
#include <boost/test/data/dataset.hpp>
#include <boost/test/data/monomorphic.hpp>
#include <boost/test/data/test_case.hpp>
-
-#include <boost/locale.hpp>
+#include <boost/timer/timer.hpp>
#include <array>
#include <chrono>
@@ -24,6 +24,7 @@
#include <unicode.h>
using namespace std::chrono_literals;
+using namespace std::string_literals;
typedef std::tuple<std::basic_string<utf8_t>, std::basic_string<char16_t>, std::basic_string<char32_t>> types_collection_type;
@@ -442,6 +443,27 @@ namespace {
}
}
+class CPUTimer
+{
+public:
+ CPUTimer(const std::string& name = "Timer"): mName(name), mWallTime0(std::chrono::steady_clock::now())
+ {
+ }
+
+ ~CPUTimer()
+ {
+ auto elapsed_cpu{mCPUTimer.elapsed()};
+ std::cout << mName << ": " << std::chrono::duration<double>(std::chrono::steady_clock::now() - mWallTime0).count() <<
+ "s (" << (double(elapsed_cpu.user + elapsed_cpu.system) / 1000000000) <<
+ "s CPU)" << std::endl;
+ }
+
+private:
+ std::string mName;
+ std::chrono::time_point<std::chrono::steady_clock> mWallTime0;
+ boost::timer::cpu_timer mCPUTimer;
+};
+
template<typename From, typename ToTypesCollectionType, size_t index = 0>
void test_random_valid(random_context& rc, size_t length, const std::string& description)
{
@@ -466,33 +488,24 @@ void test_random_valid(random_context& rc, size_t length, const std::string& des
}
{
- auto t0{std::chrono::steady_clock::now()};
+ CPUTimer timer("Performance test for converting "s + std::to_string(list.size()) +
+ " "s + description +
+ " from UTF-"s + std::to_string(sizeof(typename From::value_type) * 8) +
+ " to UTF-"s + std::to_string(sizeof(typename To::value_type) * 8));
for (const auto& i: list)
To result{unicode::convert<typename unicode::Encoding<typename From::value_type>::Facet,typename unicode::Encoding<typename To::value_type>::Facet>(i)};
- std::cout << "Performance test for converting " << list.size() <<
- " " << description <<
- " from UTF-" << (sizeof(typename From::value_type) * 8) <<
- " to UTF-" << (sizeof(typename To::value_type) * 8) << ": " <<
- std::chrono::duration<double>(std::chrono::steady_clock::now() - t0).count() << "s" <<
- std::endl;
}
{
- auto t0{std::chrono::steady_clock::now()};
+ CPUTimer timer(" -> Compare to boost::locale::conv::utf_to_utf");
for (const auto& i: list)
To result{boost::locale::conv::utf_to_utf<typename To::value_type, typename From::value_type>(i)};
- std::cout << " -> Compare to boost::locale::conv::utf_to_utf: " <<
- std::chrono::duration<double>(std::chrono::steady_clock::now() - t0).count() << "s" <<
- std::endl;
}
{
- auto t0{std::chrono::steady_clock::now()};
+ CPUTimer timer(" -> Compare to std::wstring_convert");
for (const auto& i: list)
To result{std_convert<typename From::value_type, typename To::value_type>(i)};
- std::cout << " -> Compare to std::wstring_convert: " <<
- std::chrono::duration<double>(std::chrono::steady_clock::now() - t0).count() << "s" <<
- std::endl;
}
// iterate over remaining To types
@@ -615,6 +628,10 @@ BOOST_AUTO_TEST_CASE(string_u8string)
a = std::string{b.begin(), b.end()};
BOOST_CHECK(a == std::string{"\xc3\xa4"});
+
+ BOOST_CHECK(sizeof(size_t) == 4 || sizeof(size_t) == 8);
+
+ std::cout << "Detected CPU Accu size: " << (sizeof(size_t) * 8) << std::endl;
}
// check environment: demonstrate how boost convert u8->u8 throws exception on invalid input