#include "StrUtils.hpp" #include #include #include #include using std::string; using std::cout; using std::flush; using boost::algorithm::starts_with; using boost::algorithm::istarts_with; using boost::algorithm::iequals; using boost::algorithm::to_lower_copy; using boost::algorithm::to_upper_copy; using boost::algorithm::to_lower; using boost::algorithm::to_upper; using boost::algorithm::equals; typedef unsigned long long Time_t; Time_t TimeNow(); int main(int argc, const char** argv) { #ifdef WIN32 cout << "Windows build: _SECURE_SCL = " << _SECURE_SCL << "\n" << flush; #endif Time_t start, dur, prevDur; string str; #define TIMER_START \ start = TimeNow() #define REPEAT(steps) \ for (unsigned int i = 0; i < 3000000; ++i) \ { \ steps; \ } #define TIMER_END(desc) \ dur = TimeNow() - start; \ cout << desc << "| " << dur << " msec.\n" << flush #define TIMER_END2(desc) \ prevDur = dur; \ dur = TimeNow() - start; \ cout << desc << "| " << dur << " msec.\n" << flush; \ cout << "Boost/hand ratio = " << (float(dur) / float(prevDur)) << "\n\n" << flush #define TEST(steps) \ TIMER_START; \ REPEAT(steps); \ TIMER_END(#steps); #define TEST2(steps) \ TIMER_START; \ REPEAT(steps); \ TIMER_END2(#steps); TEST(string("abcdefgh") == string("abcdefgh")); TEST2(equals(string("abcdefgh"), string("abcdefgh"))); TEST(StartsWith(string("abcdefghi"), "abcd")); TEST2(starts_with(string("abcdefghi"), "abcd")); TEST(StartsWithI(string("abcdefghi"), "aBcD")); TEST2(istarts_with(string("abcdefghi"), "aBcD")); TEST(EqualsI("abcdefghi", "aBcDeFgHi")); TEST2(iequals("abcdefghi", "aBcDeFgHi")); TEST(ToUpperCopy(string("aBcDeFgHi"))); TEST2(to_upper_copy(string("aBcDeFgHi"))); TEST(ToLowerCopy(string("aBcDeFgHi"))); TEST2(to_lower_copy(string("aBcDeFgHi"))); str = "aBcDeFgHi"; TEST(ToLower(str)); str = "aBcDeFgHi"; TEST2(to_lower(str)); str = "aBcDeFgHi"; TEST(ToUpper(str)); str = "aBcDeFgHi"; TEST2(to_upper(str)); return 0; } #ifdef UNIX32 # include Time_t TimeNow() { timeval tm; gettimeofday(&tm, NULL); return Time_t(tm.tv_sec) * 1000ULL + Time_t(tm.tv_usec) / 1000ULL; } #elif defined(WIN32) # include Time_t TimeNow() { LARGE_INTEGER countsPerSec; BOOL res = QueryPerformanceFrequency(&countsPerSec); assert(res); LARGE_INTEGER count; res = QueryPerformanceCounter(&count); assert(res); return count.QuadPart / (countsPerSec.QuadPart / 1000LL); } #else # error WIN32 or UNIX32 must be defined. #endif