18 #include "STLUtilities.h"
21 #define _STLUTILITIES_BENCHMARK_
24 #ifdef _STLUTILITIES_BENCHMARK_
25 #include "Performance.h"
27 #include "StringBasics.h"
31 #include <gtest/gtest.h>
33 TEST(STLUtilitiesTest, tSTLUtilitiesTest)
37 std::string::iterator result;
40 result = trimSequence(test,
'5',
true);
41 EXPECT_EQ(result - test.begin() , 2);
43 test =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ";
44 result = trimSequence(test,
'A',
true);
45 EXPECT_TRUE(result == test.begin());
53 toot <<
"double: " << 0.123456 <<
" LL: " << -5LL <<
" UL: " << 999UL <<
" char: " <<
'!';
55 EXPECT_TRUE(toot ==
"double: 0.123456 LL: -5 UL: 999 char: !");
75 append(toot, (
char) (
' ' + 1));
77 EXPECT_TRUE(toot ==
"double: 0.123456 LL: -5 UL: 999 char: !");
90 append(toot, v,
"\t",
true);
92 EXPECT_TRUE(toot ==
"array: 0: 1\t1: 2\t2: 3\t3: 4\t4: 5");
94 std::vector<std::string> tokens;
96 Tokenize(tokens,
"ab\tcd\tefg\thi\tjk",
'\t');
97 EXPECT_EQ(tokens.size(), 5U);
98 EXPECT_TRUE(tokens[0] ==
"ab");
99 EXPECT_TRUE(tokens[1] ==
"cd");
100 EXPECT_TRUE(tokens[2] ==
"efg");
101 EXPECT_TRUE(tokens[3] ==
"hi");
102 EXPECT_TRUE(tokens[4] ==
"jk");
105 Tokenize(tokens,
"ab\tcd\tefg\thi\tjk\t",
'\t');
106 EXPECT_EQ(tokens.size(), 6U);
107 EXPECT_TRUE(tokens[5] ==
"");
110 Tokenize(tokens,
"\t",
'\t');
111 EXPECT_EQ(tokens.size(), 2U);
112 EXPECT_TRUE(tokens[0] ==
"");
113 EXPECT_TRUE(tokens[1] ==
"");
116 Tokenize(tokens,
"bahbah",
'\t');
117 EXPECT_EQ(tokens.size(), 1U);
118 EXPECT_TRUE(tokens[0] ==
"bahbah");
126 Tokenize(tokens,
"",
'\t');
127 EXPECT_EQ(tokens.size(), 1U);
128 EXPECT_TRUE(tokens[0] ==
"");
132 append(toot, tokens,
'\t');
133 std::cout << toot << std::endl;
146 #if defined(__GXX_EXPERIMENTAL_CXX0X__)
147 TEST(STLUtilitiesTestPrintf, tSTLUtilitiesTestPrintf)
153 sprintf(result,
"Hello, world!");
154 EXPECT_TRUE(result==
"Hello, world!");
156 sprintf(result,
"n = %20.5lXXX", 123ULL);
157 EXPECT_TRUE(result==
"n = 7bXX");
159 sprintf(result,
"hello, world! %20sand boo",
"well then");
160 EXPECT_TRUE(result==
"hello, world! well thenand boo");
162 sprintf(result,
"addr = %08xXXX", 1234);
163 EXPECT_TRUE(result==
"addr = 000004d2XXX");
165 sprintf(result,
"Hello, world!! Imagine: %d!", 2345.1234);
166 EXPECT_TRUE(result==
"Hello, world!! Imagine: 2345.12!");
171 #ifdef _STLUTILITIES_BENCHMARK_
184 TEST(STLUtilitiesTestPrintf, Benchmark1) {
189 int range =
'z' -
'A';
190 unsigned int round = 1e6;
194 for (
unsigned int i = 0; i < round; i++)
196 result << (char)(
'A' + ( random.NextInt() % range));
199 std::cout <<
"STLUtilities " << round <<
" times takes " << timing.
interval() <<
" second " << std::endl;
204 for (
unsigned int i = 0; i < round; i++)
206 s += (char)(
'A' + ( random.NextInt() % range));
209 std::cout <<
"String " << round <<
" times takes " << timing.
interval() <<
" second " << std::endl;
210 EXPECT_EQ(result, s.c_str());
215 for (
unsigned int i = 0; i < round; i++)
217 st += (char)(
'A' + ( random.NextInt() % range));
220 std::cout <<
"std::string " << round <<
" times takes " << timing.
interval() <<
" second " << std::endl;
221 EXPECT_EQ(result, st);
225 TEST(STLUtilitiesTestPrintf, Benchmark2) {
230 unsigned int round = 1e6;
233 for (
unsigned int i = 0; i < round; i++)
236 for(
int j=0; j<15; j++) result << (
char)
'A';
239 std::cout <<
"STLUtilities " << round <<
" times takes " << timing.
interval() <<
" second " << std::endl;
243 for (
unsigned int i = 0; i < round; i++)
246 for(
int j=0; j<15; j++) s +=
'A';
249 std::cout <<
"String " << round <<
" times takes " << timing.
interval() <<
" second " << std::endl;
250 EXPECT_EQ(result, s.c_str());
254 for (
unsigned int i = 0; i < round; i++)
257 for(
int j=0; j<15; j++) st +=
'A';
260 std::cout <<
"std::string " << round <<
" times takes " << timing.
interval() <<
" second " << std::endl;
261 EXPECT_EQ(result, st);