]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR libstdc++/50951 (state of subtract_with_carry_engine not saved correctly to...
authorPaolo Carlini <paolo.carlini@oracle.com>
Wed, 2 Nov 2011 10:06:08 +0000 (10:06 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Wed, 2 Nov 2011 10:06:08 +0000 (10:06 +0000)
2011-11-02  Paolo Carlini  <paolo.carlini@oracle.com>

PR libstdc++/50951
* include/bits/random.tcc (operator<<(basic_ostream<>&,
const mersenne_twister_engine<>&): Output _M_p too.
(operator<<(basic_ostream<>&, const
subtract_with_carry_engine<>&): Likewise.
(operator>>(basic_istream<>&, mersenne_twister_engine<>&):
Reload it.
(operator>>(basic_istream<>&, subtract_with_carry_engine<>&):
Likewise.
* include/bits/random.h (mersenne_twister_engine<>::operator==):
Compare _M_p too.
(subtract_with_carry_engine<>::operator==): Compare _M_carry
and _M_p too.
(shuffle_order_engine<>::operator==): Compare _M_v(s) and _M_y too.
* testsuite/26_numerics/random/independent_bits_engine/
operators/serialize.cc: Extend.
* testsuite/26_numerics/random/subtract_with_carry_engine/
operators/serialize.cc: Likewise.
* testsuite/26_numerics/random/discard_block_engine/
operators/serialize.cc: Likewise.
* testsuite/26_numerics/random/mersenne_twister_engine/
operators/serialize.cc: Likewise.
* testsuite/26_numerics/random/linear_congruential_engine/
operators/serialize.cc: Likewise.
* testsuite/26_numerics/random/shuffle_order_engine/
operators/serialize.cc: Likewise.

From-SVN: r180764

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/random.h
libstdc++-v3/include/bits/random.tcc
libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/operators/serialize.cc
libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/operators/serialize.cc
libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/operators/serialize.cc
libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/operators/serialize.cc
libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/operators/serialize.cc
libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/operators/serialize.cc

index 9f6c755cd6ae55142652ef00bb9bb8377e16407b..82a0b911412c80b3085dc1c9fb028c3d4a0f041f 100644 (file)
@@ -1,3 +1,32 @@
+2011-11-02  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR libstdc++/50951
+       * include/bits/random.tcc (operator<<(basic_ostream<>&,
+       const mersenne_twister_engine<>&): Output _M_p too.
+       (operator<<(basic_ostream<>&, const
+       subtract_with_carry_engine<>&): Likewise.
+       (operator>>(basic_istream<>&, mersenne_twister_engine<>&):
+       Reload it.
+       (operator>>(basic_istream<>&, subtract_with_carry_engine<>&):
+       Likewise.
+       * include/bits/random.h (mersenne_twister_engine<>::operator==):
+       Compare _M_p too.
+       (subtract_with_carry_engine<>::operator==): Compare _M_carry
+       and _M_p too.
+       (shuffle_order_engine<>::operator==): Compare _M_v(s) and _M_y too.
+       * testsuite/26_numerics/random/independent_bits_engine/
+       operators/serialize.cc: Extend.
+       * testsuite/26_numerics/random/subtract_with_carry_engine/
+       operators/serialize.cc: Likewise.
+       * testsuite/26_numerics/random/discard_block_engine/
+       operators/serialize.cc: Likewise.
+       * testsuite/26_numerics/random/mersenne_twister_engine/
+       operators/serialize.cc: Likewise.
+       * testsuite/26_numerics/random/linear_congruential_engine/
+       operators/serialize.cc: Likewise.
+       * testsuite/26_numerics/random/shuffle_order_engine/
+       operators/serialize.cc: Likewise.
+
 2011-11-02  Benjamin Kosnik  <bkoz@redhat.com>
 
        * include/bits/c++config: Add tr2 to versioned namespaces.
index 7c66d633863b3824ba33f072b900ce489ddd98d9..d109224d1bf2b38b799e1bedfa4d761fd6b7941f 100644 (file)
@@ -491,7 +491,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       friend bool
       operator==(const mersenne_twister_engine& __lhs,
                 const mersenne_twister_engine& __rhs)
-      { return std::equal(__lhs._M_x, __lhs._M_x + state_size, __rhs._M_x); }
+      { return (std::equal(__lhs._M_x, __lhs._M_x + state_size, __rhs._M_x)
+               && __lhs._M_p == __rhs._M_p); }
 
       /**
        * @brief Inserts the current state of a % mersenne_twister_engine
@@ -705,7 +706,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       friend bool
       operator==(const subtract_with_carry_engine& __lhs,
                 const subtract_with_carry_engine& __rhs)
-      { return std::equal(__lhs._M_x, __lhs._M_x + long_lag, __rhs._M_x); }
+      { return (std::equal(__lhs._M_x, __lhs._M_x + long_lag, __rhs._M_x)
+               && __lhs._M_carry == __rhs._M_carry
+               && __lhs._M_p == __rhs._M_p); }
 
       /**
        * @brief Inserts the current state of a % subtract_with_carry_engine
@@ -1370,7 +1373,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       friend bool
       operator==(const shuffle_order_engine& __lhs,
                 const shuffle_order_engine& __rhs)
-      { return __lhs._M_b == __rhs._M_b; }
+      { return (__lhs._M_b == __rhs._M_b
+               && std::equal(__lhs._M_v, __lhs._M_v + __k, __rhs._M_v)
+               && __lhs._M_y == __rhs._M_y); }
 
       /**
        * @brief Inserts the current state of a %shuffle_order_engine random
index 0e74848ff3c43efa75b224e87cc24bf38bf9889e..8936a62316aed15e7f958fc35089134a5dd91d99 100644 (file)
@@ -471,9 +471,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       __os.flags(__ios_base::dec | __ios_base::fixed | __ios_base::left);
       __os.fill(__space);
 
-      for (size_t __i = 0; __i < __n - 1; ++__i)
+      for (size_t __i = 0; __i < __n; ++__i)
        __os << __x._M_x[__i] << __space;
-      __os << __x._M_x[__n - 1];
+      __os << __x._M_p;
 
       __os.flags(__flags);
       __os.fill(__fill);
@@ -498,6 +498,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
       for (size_t __i = 0; __i < __n; ++__i)
        __is >> __x._M_x[__i];
+      __is >> __x._M_p;
 
       __is.flags(__flags);
       return __is;
@@ -627,7 +628,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
       for (size_t __i = 0; __i < __r; ++__i)
        __os << __x._M_x[__i] << __space;
-      __os << __x._M_carry;
+      __os << __x._M_carry << __space << __x._M_p;
 
       __os.flags(__flags);
       __os.fill(__fill);
@@ -649,6 +650,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       for (size_t __i = 0; __i < __r; ++__i)
        __is >> __x._M_x[__i];
       __is >> __x._M_carry;
+      __is >> __x._M_p;
 
       __is.flags(__flags);
       return __is;
index 7aec649c03b9c5cec6b722c05bcfbaf57aa0dcaa..4249d975a8214d9fdcba8f03d9879700d3f4a41d 100644 (file)
@@ -3,7 +3,7 @@
 //
 // 2008-11-24  Edward M. Smith-Rowland <3dw4rd@verizon.net>
 //
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011 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
@@ -46,6 +46,20 @@ test01()
 
   str >> v;
   VERIFY( u == v );
+  for (unsigned i = 0; i < 1000; ++i)
+    VERIFY( u() == v() );
+
+  str.clear();
+  str << v;
+
+  u();
+  u();
+  u();
+
+  str >> u;
+  VERIFY( u == v );
+  for (unsigned i = 0; i < 1000; ++i)
+    VERIFY( u() == v() );
 }
 
 int main()
index 332931addfa2906bbd2f0373154dbf16b9f71aa5..32a5157608cdf8939fbd5ad521bc15fd30a58917 100644 (file)
@@ -3,7 +3,7 @@
 //
 // 2008-11-24  Edward M. Smith-Rowland <3dw4rd@verizon.net>
 //
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011 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
@@ -44,6 +44,20 @@ test01()
 
   str >> v;
   VERIFY( u == v );
+  for (unsigned i = 0; i < 1000; ++i)
+    VERIFY( u() == v() );
+
+  str.clear();
+  str << v;
+
+  u();
+  u();
+  u();
+
+  str >> u;
+  VERIFY( u == v );
+  for (unsigned i = 0; i < 1000; ++i)
+    VERIFY( u() == v() );
 }
 
 int main()
index 8b67e5f3a335a64bd449f7c4f44ce2f9d9655555..a83b22ef65106152392c06bee0edd2914a66b0f5 100644 (file)
@@ -3,7 +3,7 @@
 //
 // 2008-11-24  Edward M. Smith-Rowland <3dw4rd@verizon.net>
 //
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011 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
@@ -33,15 +33,29 @@ test01()
   bool test __attribute__((unused)) = true;
 
   std::stringstream str;
-  std::minstd_rand0 a;
-  std::minstd_rand0 b;
+  std::minstd_rand0 u;
+  std::minstd_rand0 v;
 
-  a(); // advance
-  str << a;
-  VERIFY( !(a == b) );
+  u(); // advance
+  str << u;
+  VERIFY( !(u == v) );
 
-  str >> b;
-  VERIFY( a == b );
+  str >> v;
+  VERIFY( u == v );
+  for (unsigned i = 0; i < 1000; ++i)
+    VERIFY( u() == v() );
+
+  str.clear();
+  str << v;
+
+  u();
+  u();
+  u();
+
+  str >> u;
+  VERIFY( u == v );
+  for (unsigned i = 0; i < 1000; ++i)
+    VERIFY( u() == v() );
 }
 
 int main()
index 03fb8b04fa120394ce3ecbb559ca778e28a0f8d1..7c90e3d390fabb3cf026475f0e63bca535cb0cc4 100644 (file)
@@ -3,7 +3,7 @@
 //
 // 2008-11-24  Edward M. Smith-Rowland <3dw4rd@verizon.net>
 //
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011 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
@@ -47,6 +47,20 @@ test01()
 
   str >> v;
   VERIFY( u == v );
+  for (unsigned i = 0; i < 1000; ++i)
+    VERIFY( u() == v() );
+
+  str.clear();
+  str << v;
+
+  u();
+  u();
+  u();
+
+  str >> u;
+  VERIFY( u == v );
+  for (unsigned i = 0; i < 1000; ++i)
+    VERIFY( u() == v() );
 }
 
 int main()
index 578e49593714f4b1ccad705387aa9a5f7631bf7a..c7b15d1ba15c010587e6bdc6798c513fce7747dc 100644 (file)
@@ -3,7 +3,7 @@
 //
 // 2008-11-24  Edward M. Smith-Rowland <3dw4rd@verizon.net>
 //
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011 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
@@ -46,6 +46,20 @@ test01()
 
   str >> v;
   VERIFY( u == v );
+  for (unsigned i = 0; i < 1000; ++i)
+    VERIFY( u() == v() );
+
+  str.clear();
+  str << v;
+
+  u();
+  u();
+  u();
+
+  str >> u;
+  VERIFY( u == v );
+  for (unsigned i = 0; i < 1000; ++i)
+    VERIFY( u() == v() );
 }
 
 int main()
index e4129fc8df5060d5c6ed94f730ae3980aae08c6d..1e2e53ac59304c8ff541ebfc4a2208960e0f2351 100644 (file)
@@ -3,7 +3,7 @@
 //
 // 2008-11-24  Edward M. Smith-Rowland <3dw4rd@verizon.net>
 //
-// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011 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
@@ -43,6 +43,20 @@ test01()
 
   str >> v;
   VERIFY( u == v );
+  for (unsigned i = 0; i < 1000; ++i)
+    VERIFY( u() == v() );
+
+  str.clear();
+  str << v;
+
+  u();
+  u();
+  u();
+
+  str >> u;
+  VERIFY( u == v );
+  for (unsigned i = 0; i < 1000; ++i)
+    VERIFY( u() == v() );
 }
 
 int main()