1 | #include "StrUtils.hpp"
|
---|
2 | #include <boost/algorithm/string.hpp>
|
---|
3 |
|
---|
4 | #include <iostream>
|
---|
5 | #include <string>
|
---|
6 | #include <cassert>
|
---|
7 |
|
---|
8 | using std::string;
|
---|
9 | using std::cout;
|
---|
10 | using std::flush;
|
---|
11 |
|
---|
12 | using boost::algorithm::starts_with;
|
---|
13 | using boost::algorithm::istarts_with;
|
---|
14 | using boost::algorithm::iequals;
|
---|
15 | using boost::algorithm::to_lower_copy;
|
---|
16 | using boost::algorithm::to_upper_copy;
|
---|
17 | using boost::algorithm::to_lower;
|
---|
18 | using boost::algorithm::to_upper;
|
---|
19 | using boost::algorithm::equals;
|
---|
20 |
|
---|
21 | typedef unsigned long long Time_t;
|
---|
22 |
|
---|
23 | Time_t TimeNow();
|
---|
24 |
|
---|
25 | int main(int argc, const char** argv)
|
---|
26 | {
|
---|
27 | Time_t start, dur, prevDur;
|
---|
28 | string str;
|
---|
29 | #define TIMER_START \
|
---|
30 | start = TimeNow()
|
---|
31 | #define REPEAT(steps) \
|
---|
32 | for (unsigned int i = 0; i < 3000000; ++i) \
|
---|
33 | { \
|
---|
34 | steps; \
|
---|
35 | }
|
---|
36 | #define TIMER_END(desc) \
|
---|
37 | dur = TimeNow() - start; \
|
---|
38 | cout << desc << "| " << dur << " msec.\n" << flush
|
---|
39 | #define TIMER_END2(desc) \
|
---|
40 | prevDur = dur; \
|
---|
41 | dur = TimeNow() - start; \
|
---|
42 | cout << desc << "| " << dur << " msec.\n" << flush; \
|
---|
43 | cout << "Boost/hand ratio = " << (float(dur) / float(prevDur)) << "\n\n" << flush
|
---|
44 | #define TEST(steps) \
|
---|
45 | TIMER_START; \
|
---|
46 | REPEAT(steps); \
|
---|
47 | TIMER_END(#steps);
|
---|
48 | #define TEST2(steps) \
|
---|
49 | TIMER_START; \
|
---|
50 | REPEAT(steps); \
|
---|
51 | TIMER_END2(#steps);
|
---|
52 |
|
---|
53 | TEST(string("abcdefgh") == string("abcdefgh"));
|
---|
54 | TEST2(equals(string("abcdefgh"), string("abcdefgh")));
|
---|
55 |
|
---|
56 | TEST(StartsWith(string("abcdefghi"), "abcd"));
|
---|
57 | TEST2(starts_with(string("abcdefghi"), "abcd"));
|
---|
58 |
|
---|
59 | TEST(StartsWithI(string("abcdefghi"), "aBcD"));
|
---|
60 | TEST2(istarts_with(string("abcdefghi"), "aBcD"));
|
---|
61 |
|
---|
62 | TEST(EqualsI("abcdefghi", "aBcDeFgHi"));
|
---|
63 | TEST2(iequals("abcdefghi", "aBcDeFgHi"));
|
---|
64 |
|
---|
65 | TEST(ToUpperCopy(string("aBcDeFgHi")));
|
---|
66 | TEST2(to_upper_copy(string("aBcDeFgHi")));
|
---|
67 |
|
---|
68 | TEST(ToLowerCopy(string("aBcDeFgHi")));
|
---|
69 | TEST2(to_lower_copy(string("aBcDeFgHi")));
|
---|
70 |
|
---|
71 | str = "aBcDeFgHi";
|
---|
72 | TEST(ToLower(str));
|
---|
73 | str = "aBcDeFgHi";
|
---|
74 | TEST2(to_lower(str));
|
---|
75 |
|
---|
76 | str = "aBcDeFgHi";
|
---|
77 | TEST(ToUpper(str));
|
---|
78 | str = "aBcDeFgHi";
|
---|
79 | TEST2(to_upper(str));
|
---|
80 |
|
---|
81 | return 0;
|
---|
82 | }
|
---|
83 |
|
---|
84 | #ifdef UNIX32
|
---|
85 | # include <sys/time.h>
|
---|
86 |
|
---|
87 | Time_t TimeNow()
|
---|
88 | {
|
---|
89 | timeval tm;
|
---|
90 | gettimeofday(&tm, NULL);
|
---|
91 | return Time_t(tm.tv_sec) * 1000ULL + Time_t(tm.tv_usec) / 1000ULL;
|
---|
92 | }
|
---|
93 |
|
---|
94 | #elif defined(WIN32)
|
---|
95 | # include <Windows.h>
|
---|
96 |
|
---|
97 | Time_t TimeNow()
|
---|
98 | {
|
---|
99 | LARGE_INTEGER countsPerSec;
|
---|
100 | BOOL res = QueryPerformanceFrequency(&countsPerSec);
|
---|
101 | assert(res);
|
---|
102 |
|
---|
103 | LARGE_INTEGER count;
|
---|
104 | res = QueryPerformanceCounter(&count);
|
---|
105 | assert(res);
|
---|
106 |
|
---|
107 | return count.QuadPart / (countsPerSec.QuadPart / 1000LL);
|
---|
108 | }
|
---|
109 |
|
---|
110 | #else
|
---|
111 |
|
---|
112 | #error WIN32 or UNIX32 must be defined.
|
---|
113 |
|
---|
114 | #endif
|
---|