[gcc(refs/users/ppalka/heads/libstdcxx-constrained-algos)] Fix outstanding testsuite failures

Patrick Palka ppalka@gcc.gnu.org
Fri Jan 24 22:51:00 GMT 2020


https://gcc.gnu.org/g:3664a80b8e29f2f088fd991ca04dbc989442616b

commit 3664a80b8e29f2f088fd991ca04dbc989442616b
Author: Patrick Palka <ppalka@redhat.com>
Date:   Fri Jan 24 17:46:44 2020 -0500

    Fix outstanding testsuite failures
    
    The problem was that we were performing multiple passes over input_iterators.
    We need to reset BoundsContainer<T>::first before we can perform a second pass
    over an input_iterator.  See also mismatch/2.cc.

Diff:
---
 libstdc++-v3/testsuite/25_algorithms/all_of/constrained.cc        | 2 ++
 libstdc++-v3/testsuite/25_algorithms/count/constrained.cc         | 2 ++
 libstdc++-v3/testsuite/25_algorithms/equal/constrained.cc         | 6 ++++++
 libstdc++-v3/testsuite/25_algorithms/find/constrained.cc          | 2 ++
 libstdc++-v3/testsuite/25_algorithms/find_first_of/constrained.cc | 1 +
 libstdc++-v3/testsuite/25_algorithms/find_if/constrained.cc       | 2 ++
 libstdc++-v3/testsuite/25_algorithms/find_if_not/constrained.cc   | 2 ++
 libstdc++-v3/testsuite/25_algorithms/mismatch/constrained.cc      | 7 +++++--
 libstdc++-v3/testsuite/25_algorithms/replace/constrained.cc       | 3 +++
 libstdc++-v3/testsuite/25_algorithms/replace_if/constrained.cc    | 3 +++
 10 files changed, 28 insertions(+), 2 deletions(-)

diff --git a/libstdc++-v3/testsuite/25_algorithms/all_of/constrained.cc b/libstdc++-v3/testsuite/25_algorithms/all_of/constrained.cc
index fe100bb..a472dd0 100644
--- a/libstdc++-v3/testsuite/25_algorithms/all_of/constrained.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/all_of/constrained.cc
@@ -67,6 +67,8 @@ test01()
 
   test_range<X, input_iterator_wrapper> r(x);
   VERIFY( ranges::all_of(r, NotZero<int>{}, &X::i) );
+
+  r.bounds.first = x;
   VERIFY( ranges::all_of(r, NotZero<X* const>{}, [](X& x) { return &x; }) );
 }
 
diff --git a/libstdc++-v3/testsuite/25_algorithms/count/constrained.cc b/libstdc++-v3/testsuite/25_algorithms/count/constrained.cc
index 18ff693..2a9bb27 100644
--- a/libstdc++-v3/testsuite/25_algorithms/count/constrained.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/count/constrained.cc
@@ -51,6 +51,8 @@ test01()
   test_range<X, input_iterator_wrapper> r(x);
   res = ranges::count(r, 2, &X::i);
   VERIFY( res == 3 );
+
+  r.bounds.first = x;
   res = ranges::count(r, 9, &X::i);
   VERIFY( res == 0 );
 }
diff --git a/libstdc++-v3/testsuite/25_algorithms/equal/constrained.cc b/libstdc++-v3/testsuite/25_algorithms/equal/constrained.cc
index b1f9977..231bd8c 100644
--- a/libstdc++-v3/testsuite/25_algorithms/equal/constrained.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/equal/constrained.cc
@@ -53,7 +53,13 @@ test01()
   test_range<int, input_iterator_wrapper> rx(x), ry(y);
   test_range<X, input_iterator_wrapper> rz(z);
   VERIFY( ranges::equal(rx, ry) );
+
+  rx.bounds.first = x;
+  ry.bounds.first = y;
   VERIFY( !ranges::equal(rx, ry, {}, {}, [] (int a) { return a+1; }) );
+
+  rx.bounds.first = x;
+  rz.bounds.first = z;
   VERIFY( !ranges::equal(rx, rz, {}, {}, &X::i) );
 }
 
diff --git a/libstdc++-v3/testsuite/25_algorithms/find/constrained.cc b/libstdc++-v3/testsuite/25_algorithms/find/constrained.cc
index 5042138..6f6b954 100644
--- a/libstdc++-v3/testsuite/25_algorithms/find/constrained.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/find/constrained.cc
@@ -51,6 +51,8 @@ test01()
   test_range<X, input_iterator_wrapper> r(x);
   auto res3 = ranges::find(r, 8, &X::i);
   VERIFY( res3 != ranges::end(r) && res3->i == 8 );
+
+  r.bounds.first = x;
   res3 = ranges::find(r, 9, &X::i);
   VERIFY( res3 == ranges::end(r) );
 }
diff --git a/libstdc++-v3/testsuite/25_algorithms/find_first_of/constrained.cc b/libstdc++-v3/testsuite/25_algorithms/find_first_of/constrained.cc
index ccb4558..81a1576 100644
--- a/libstdc++-v3/testsuite/25_algorithms/find_first_of/constrained.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/find_first_of/constrained.cc
@@ -60,6 +60,7 @@ test01()
   VERIFY( res3 != ranges::end(r) && res3->i == 8 );
 
   test_range<X, forward_iterator_wrapper> s2(w+3, w+4);
+  r.bounds.first = x;
   res3 = ranges::find_first_of(r, s2, {}, &X::i, &X::i);
   VERIFY( res3 == ranges::end(r) );
 }
diff --git a/libstdc++-v3/testsuite/25_algorithms/find_if/constrained.cc b/libstdc++-v3/testsuite/25_algorithms/find_if/constrained.cc
index 26f4311..299bdd0 100644
--- a/libstdc++-v3/testsuite/25_algorithms/find_if/constrained.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/find_if/constrained.cc
@@ -51,6 +51,8 @@ test01()
   test_range<X, input_iterator_wrapper> r(x);
   auto res3 = ranges::find_if(r, [] (int i) { return i > 10; }, &X::i);
   VERIFY( res3 != ranges::end(r) && res3->i == 11 );
+
+  r.bounds.first = x;
   res3 = ranges::find_if(r, [] (int i) { return i == 9; }, &X::i);
   VERIFY( res3 == ranges::end(r) );
 }
diff --git a/libstdc++-v3/testsuite/25_algorithms/find_if_not/constrained.cc b/libstdc++-v3/testsuite/25_algorithms/find_if_not/constrained.cc
index 3c16a5d..838434a 100644
--- a/libstdc++-v3/testsuite/25_algorithms/find_if_not/constrained.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/find_if_not/constrained.cc
@@ -51,6 +51,8 @@ test01()
   test_range<X, input_iterator_wrapper> r(x);
   auto res3 = ranges::find_if_not(r, [] (int i) { return i <= 10; }, &X::i);
   VERIFY( res3 != ranges::end(r) && res3->i == 11 );
+
+  r.bounds.first = x;
   res3 = ranges::find_if_not(r, [] (int i) { return i != 9; }, &X::i);
   VERIFY( res3 == ranges::end(r) );
 }
diff --git a/libstdc++-v3/testsuite/25_algorithms/mismatch/constrained.cc b/libstdc++-v3/testsuite/25_algorithms/mismatch/constrained.cc
index 27f5bc3..37e79a2 100644
--- a/libstdc++-v3/testsuite/25_algorithms/mismatch/constrained.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/mismatch/constrained.cc
@@ -50,8 +50,11 @@ test01()
   test_range<X, input_iterator_wrapper> rb(xb);
   auto res3 = ranges::mismatch(ra, rb, {}, &X::i, &X::i);
   VERIFY( res3.in1->i == 4 && res3.in2->i == 3 );
-  res3 = ranges::mismatch(ra, ra, {}, &X::i, &X::i);
-  VERIFY( res3.in1 == ranges::end(ra) && res3.in2 == ranges::end(ra) );
+
+  test_range<X, input_iterator_wrapper> ra2(xa);
+  ra.bounds.first = xa;
+  res3 = ranges::mismatch(ra, ra2, {}, &X::i, &X::i);
+  VERIFY( res3.in1 == ranges::end(ra) && res3.in2 == ranges::end(ra2) );
 }
 
 struct Y { int i; int j; };
diff --git a/libstdc++-v3/testsuite/25_algorithms/replace/constrained.cc b/libstdc++-v3/testsuite/25_algorithms/replace/constrained.cc
index b36a53a..3546872 100644
--- a/libstdc++-v3/testsuite/25_algorithms/replace/constrained.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/replace/constrained.cc
@@ -74,6 +74,9 @@ test01()
       test_range<int, input_iterator_wrapper> rx(x), ry(y);
       auto res = ranges::replace(rx, 2, 7);
       VERIFY( res == rx.end() );
+
+      rx.bounds.first = x;
+      ry.bounds.first = y;
       VERIFY( ranges::equal(rx, ry) );
     }
 }
diff --git a/libstdc++-v3/testsuite/25_algorithms/replace_if/constrained.cc b/libstdc++-v3/testsuite/25_algorithms/replace_if/constrained.cc
index ed95829..8ebcc411 100644
--- a/libstdc++-v3/testsuite/25_algorithms/replace_if/constrained.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/replace_if/constrained.cc
@@ -77,6 +77,9 @@ test01()
       test_range<int, input_iterator_wrapper> rx(x), ry(y);
       auto res = ranges::replace_if(rx, is_two_p, 7);
       VERIFY( res == rx.end() );
+
+      rx.bounds.first = x;
+      ry.bounds.first = y;
       VERIFY( ranges::equal(rx, ry) );
     }
 }



More information about the Libstdc++-cvs mailing list