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);
std::string & append(std::string &s, float f)
use std streams API to do float conversion to string, then append it.
This file is inspired by the poor quality of string support in STL for what should be trivial capabil...
double interval()
Return time interval between start() and end()