gcc/libstdc++-v3/testsuite/ext/rope/3.cc
2009-04-09 17:00:19 +02:00

100 lines
3.0 KiB
C++

// Copyright (C) 2004, 2005, 2009 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 3, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
// rope (SGI extension)
#include <ext/rope>
#include <testsuite_hooks.h>
const char base[] =
"Happy families are all alike; every unhappy family is unhappy in \
its own way. \
\
Everything was in confusion in the Oblonskys' house. The wife \
had discovered that the husband was carrying on an intrigue with \
a French girl, who had been a governess in their family, and she \
had announced to her husband that she could not go on living in \
the same house with him. This position of affairs had now lasted \
three days, and not only the husband and wife themselves, but all \
the members of their family and household, were painfully \
conscious of it. Every person in the house felt that there was \
so sense in their living together, and that the stray people \
brought together by chance in any inn had more in common with one \
another than they, the members of the family and household of the \
Oblonskys. The wife did not leave her own room, the husband had \
not been at home for three days. The children ran wild all over \
the house; the English governess quarreled with the housekeeper, \
and wrote to a friend asking her to look out for a new situation \
for her; the man-cook had walked off the day before just at \
dinner time; the kitchen-maid, and the coachman had given \
warning."
;
int baselen = sizeof(base) - 1;
template<class StringType>
StringType
multiply(const StringType& s, int n)
{
StringType result;
while (n > 0)
{
result += s;
--n;
}
return result;
}
template <class StringType>
StringType
mung_substrings(const StringType& s, int len, int n, int skip)
{
StringType result;
int start = 0;
while (n > 0)
{
StringType tmp = s.substr (start, len);
result += tmp;
--n;
start += skip;
}
return result;
}
void
test01()
{
using namespace __gnu_cxx;
bool test __attribute__((unused)) = true;
crope r;
r = multiply(crope(base), 100000);
crope r1;
r1 = mung_substrings(r, 100000, 500, 73);
VERIFY( r1.size() == 50000000 );
VERIFY( r1.substr(88888, 6)[0] == 's' );
VERIFY( r1.substr(88888, 6)[2] == 'h' );
}
int main()
{
test01();
return 0;
}