diff options
author | upstream source tree <ports@midipix.org> | 2015-03-15 20:14:05 -0400 |
---|---|---|
committer | upstream source tree <ports@midipix.org> | 2015-03-15 20:14:05 -0400 |
commit | 554fd8c5195424bdbcabf5de30fdc183aba391bd (patch) | |
tree | 976dc5ab7fddf506dadce60ae936f43f58787092 /libstdc++-v3/testsuite/ext/rope | |
download | cbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.bz2 cbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.xz |
obtained gcc-4.6.4.tar.bz2 from upstream website;upstream
verified gcc-4.6.4.tar.bz2.sig;
imported gcc-4.6.4 source tree from verified upstream tarball.
downloading a git-generated archive based on the 'upstream' tag
should provide you with a source tree that is binary identical
to the one extracted from the above tarball.
if you have obtained the source via the command 'git clone',
however, do note that line-endings of files in your working
directory might differ from line-endings of the respective
files in the upstream repository.
Diffstat (limited to 'libstdc++-v3/testsuite/ext/rope')
-rw-r--r-- | libstdc++-v3/testsuite/ext/rope/1.cc | 37 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/ext/rope/2.cc | 49 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/ext/rope/3.cc | 99 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/ext/rope/36832.cc | 35 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/ext/rope/4.cc | 39 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/ext/rope/40299.cc | 27 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/ext/rope/44708.cc | 31 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/ext/rope/44963.cc | 31 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/ext/rope/pthread7-rope.cc | 103 |
9 files changed, 451 insertions, 0 deletions
diff --git a/libstdc++-v3/testsuite/ext/rope/1.cc b/libstdc++-v3/testsuite/ext/rope/1.cc new file mode 100644 index 000000000..3fd84e541 --- /dev/null +++ b/libstdc++-v3/testsuite/ext/rope/1.cc @@ -0,0 +1,37 @@ +// 2001-10-03 From: Dimitris Vyzovitis <vyzo@media.mit.edu> + +// Copyright (C) 2001, 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 <iostream> + +void test01() +{ + __gnu_cxx::crope foo; + foo += "bar"; + const char* data = foo.c_str(); + std::cout << data << std::endl; +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/ext/rope/2.cc b/libstdc++-v3/testsuite/ext/rope/2.cc new file mode 100644 index 000000000..212ba0a08 --- /dev/null +++ b/libstdc++-v3/testsuite/ext/rope/2.cc @@ -0,0 +1,49 @@ +// 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> + +void +test01() +{ + using namespace std; + using namespace __gnu_cxx; + bool test __attribute__((unused)) = true; + + crope r(10000, 'x'); + crope r2 = r + "abc" + r; + crope r3 = r2.substr(10000, 3); + crope r4 = r2.substr(10000, 10000); + + reverse(r2.mutable_begin(), r2.mutable_end()); + VERIFY( r2[10000] == 'c' ); + + crope r5('a'); + r5.push_front('b'); + VERIFY( r5[0] == 'b' ); + VERIFY( r5[1] == 'a' ); +} + +int main() +{ + test01(); + return 0; +} + diff --git a/libstdc++-v3/testsuite/ext/rope/3.cc b/libstdc++-v3/testsuite/ext/rope/3.cc new file mode 100644 index 000000000..1b319f7eb --- /dev/null +++ b/libstdc++-v3/testsuite/ext/rope/3.cc @@ -0,0 +1,99 @@ +// 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; +} diff --git a/libstdc++-v3/testsuite/ext/rope/36832.cc b/libstdc++-v3/testsuite/ext/rope/36832.cc new file mode 100644 index 000000000..063df3cc9 --- /dev/null +++ b/libstdc++-v3/testsuite/ext/rope/36832.cc @@ -0,0 +1,35 @@ +// Copyright (C) 2008, 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> + +// libstdc++/36832 +void test01() +{ + __gnu_cxx::crope myRope; + myRope = "1234567890"; + char buffer[100]; + myRope.copy(1, 1, buffer); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/ext/rope/4.cc b/libstdc++-v3/testsuite/ext/rope/4.cc new file mode 100644 index 000000000..a7421f345 --- /dev/null +++ b/libstdc++-v3/testsuite/ext/rope/4.cc @@ -0,0 +1,39 @@ +// Copyright (C) 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/>. + +// sequence_buffer (SGI extension) + +#include <ext/rope> +#include <algorithm> +#include <testsuite_hooks.h> + +void test01() +{ + bool test __attribute__((unused)) = true; + + __gnu_cxx::crope r1("wibble"); + __gnu_cxx::crope r2; + std::copy( r1.begin(), r1.end(), + __gnu_cxx::sequence_buffer<__gnu_cxx::crope>(r2) ); + VERIFY( r1 == r2 ); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/ext/rope/40299.cc b/libstdc++-v3/testsuite/ext/rope/40299.cc new file mode 100644 index 000000000..4d83fc98c --- /dev/null +++ b/libstdc++-v3/testsuite/ext/rope/40299.cc @@ -0,0 +1,27 @@ +// { dg-options "-std=gnu++0x" } +// { dg-do compile } + +// Copyright (C) 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/>. + +#include <ext/rope> + +// libstdc++/40299 +void test01() +{ + __gnu_cxx::crope asdf; +} diff --git a/libstdc++-v3/testsuite/ext/rope/44708.cc b/libstdc++-v3/testsuite/ext/rope/44708.cc new file mode 100644 index 000000000..ac2fa95c7 --- /dev/null +++ b/libstdc++-v3/testsuite/ext/rope/44708.cc @@ -0,0 +1,31 @@ +// { dg-options "-std=gnu++0x" } +// { dg-do compile } + +// Copyright (C) 2010 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/>. + +#include <iostream> +#include <ext/rope> + +using namespace std; + +// libstdc++/44708 +void test01() +{ + __gnu_cxx::crope line("test-test-test"); + cout << line.c_str() << endl; +} diff --git a/libstdc++-v3/testsuite/ext/rope/44963.cc b/libstdc++-v3/testsuite/ext/rope/44963.cc new file mode 100644 index 000000000..32bd9ded6 --- /dev/null +++ b/libstdc++-v3/testsuite/ext/rope/44963.cc @@ -0,0 +1,31 @@ +// { dg-options "-std=gnu++0x" } +// { dg-do compile } + +// Copyright (C) 2010 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/>. + +#include <ext/rope> + +// libstdc++/44963 +void test01() +{ + __gnu_cxx::crope line("test"); + auto ii(std::back_inserter(line)); + + *ii++ = 'm'; + *ii++ = 'e'; +} diff --git a/libstdc++-v3/testsuite/ext/rope/pthread7-rope.cc b/libstdc++-v3/testsuite/ext/rope/pthread7-rope.cc new file mode 100644 index 000000000..fd1ed09c6 --- /dev/null +++ b/libstdc++-v3/testsuite/ext/rope/pthread7-rope.cc @@ -0,0 +1,103 @@ +// 2003-05-03 Loren J. Rittle <rittle@labs.mot.com> <ljrittle@acm.org> +// +// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009, 2010 +// 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/>. + +// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } } +// { dg-options "-pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } } +// { dg-options "-pthreads" { target *-*-solaris* } } + +#include <ext/rope> +#include <cstring> +#include <pthread.h> +#include <testsuite_hooks.h> + +const int max_thread_count = 4; +const int max_loop_count = 10000; + +typedef __gnu_cxx::rope<char, std::allocator<char> > rope_type; +rope_type foo2; +rope_type foo4; + +void* thread_main(void *) +{ + // To see a problem with gcc 3.3 and before, set a break point here. + // Single step through c_str implementation, call sched_yield after + // capture of NULL __old_c_string in any thread. Single step + // through another thread past that same point. Now, one thread + // will receive a bad pointer return. Adding dummy sched_yield + // should never change program semantics under POSIX threads. + const char* data4 = foo4.c_str(); + + // Please note that the memory leak in the rope implementation with + // this test case, existed before and after fixing this bug... + bool test __attribute__((unused)) = true; + VERIFY( !std::strcmp (data4, "barbazbonglehellohellohello") ); + return 0; +} + +int +main() +{ + bool test __attribute__((unused)) = true; + + pthread_t tid[max_thread_count]; + +#if defined(__sun) && defined(__svr4__) && _XOPEN_VERSION >= 500 + pthread_setconcurrency (max_thread_count); +#endif + + rope_type foo; + foo += "bar"; + foo += "baz"; + foo += "bongle"; + const char* data = foo.c_str(); + VERIFY( !std::strcmp (data, "barbazbongle") ); + + const char* data2; + { + foo2 += "bar2"; + foo2 += "baz2"; + foo2 += "bongle2"; + data2 = foo2.c_str(); + VERIFY( !std::strcmp (data2, "bar2baz2bongle2") ); + } + + rope_type foo3 ("hello"); + const char* data3 = foo3.c_str(); + VERIFY( !std::strcmp (data3, "hello") ); + + for (int j = 0; j < max_loop_count; j++) + { + foo4 = foo; + foo4 += foo3; + foo4 += foo3; + foo4 += foo3; + + for (int i = 0; i < max_thread_count; i++) + pthread_create (&tid[i], 0, thread_main, 0); + + for (int i = 0; i < max_thread_count; i++) + pthread_join (tid[i], 0); + } + + VERIFY( !std::strcmp (data, "barbazbongle") ); + VERIFY( !std::strcmp (data2, "bar2baz2bongle2") ); + + return 0; +} |