summaryrefslogtreecommitdiff
path: root/libstdc++-v3/testsuite/ext/rope
diff options
context:
space:
mode:
authorupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
committerupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
commit554fd8c5195424bdbcabf5de30fdc183aba391bd (patch)
tree976dc5ab7fddf506dadce60ae936f43f58787092 /libstdc++-v3/testsuite/ext/rope
downloadcbb-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.cc37
-rw-r--r--libstdc++-v3/testsuite/ext/rope/2.cc49
-rw-r--r--libstdc++-v3/testsuite/ext/rope/3.cc99
-rw-r--r--libstdc++-v3/testsuite/ext/rope/36832.cc35
-rw-r--r--libstdc++-v3/testsuite/ext/rope/4.cc39
-rw-r--r--libstdc++-v3/testsuite/ext/rope/40299.cc27
-rw-r--r--libstdc++-v3/testsuite/ext/rope/44708.cc31
-rw-r--r--libstdc++-v3/testsuite/ext/rope/44963.cc31
-rw-r--r--libstdc++-v3/testsuite/ext/rope/pthread7-rope.cc103
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;
+}