Commit 31645179 by Paolo Carlini Committed by Paolo Carlini

re PR libstdc++/50951 (state of subtract_with_carry_engine not saved correctly to output stream)

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
parent e021c122
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> 2011-11-02 Benjamin Kosnik <bkoz@redhat.com>
* include/bits/c++config: Add tr2 to versioned namespaces. * include/bits/c++config: Add tr2 to versioned namespaces.
......
...@@ -491,7 +491,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -491,7 +491,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
friend bool friend bool
operator==(const mersenne_twister_engine& __lhs, operator==(const mersenne_twister_engine& __lhs,
const mersenne_twister_engine& __rhs) 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 * @brief Inserts the current state of a % mersenne_twister_engine
...@@ -705,7 +706,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -705,7 +706,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
friend bool friend bool
operator==(const subtract_with_carry_engine& __lhs, operator==(const subtract_with_carry_engine& __lhs,
const subtract_with_carry_engine& __rhs) 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 * @brief Inserts the current state of a % subtract_with_carry_engine
...@@ -1370,7 +1373,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -1370,7 +1373,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
friend bool friend bool
operator==(const shuffle_order_engine& __lhs, operator==(const shuffle_order_engine& __lhs,
const shuffle_order_engine& __rhs) 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 * @brief Inserts the current state of a %shuffle_order_engine random
......
...@@ -471,9 +471,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -471,9 +471,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__os.flags(__ios_base::dec | __ios_base::fixed | __ios_base::left); __os.flags(__ios_base::dec | __ios_base::fixed | __ios_base::left);
__os.fill(__space); __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[__i] << __space;
__os << __x._M_x[__n - 1]; __os << __x._M_p;
__os.flags(__flags); __os.flags(__flags);
__os.fill(__fill); __os.fill(__fill);
...@@ -498,6 +498,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -498,6 +498,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
for (size_t __i = 0; __i < __n; ++__i) for (size_t __i = 0; __i < __n; ++__i)
__is >> __x._M_x[__i]; __is >> __x._M_x[__i];
__is >> __x._M_p;
__is.flags(__flags); __is.flags(__flags);
return __is; return __is;
...@@ -627,7 +628,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -627,7 +628,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
for (size_t __i = 0; __i < __r; ++__i) for (size_t __i = 0; __i < __r; ++__i)
__os << __x._M_x[__i] << __space; __os << __x._M_x[__i] << __space;
__os << __x._M_carry; __os << __x._M_carry << __space << __x._M_p;
__os.flags(__flags); __os.flags(__flags);
__os.fill(__fill); __os.fill(__fill);
...@@ -649,6 +650,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -649,6 +650,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
for (size_t __i = 0; __i < __r; ++__i) for (size_t __i = 0; __i < __r; ++__i)
__is >> __x._M_x[__i]; __is >> __x._M_x[__i];
__is >> __x._M_carry; __is >> __x._M_carry;
__is >> __x._M_p;
__is.flags(__flags); __is.flags(__flags);
return __is; return __is;
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
// //
// 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net> // 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 // 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 // software; you can redistribute it and/or modify it under the
...@@ -46,6 +46,20 @@ test01() ...@@ -46,6 +46,20 @@ test01()
str >> v; str >> v;
VERIFY( u == 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() int main()
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
// //
// 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net> // 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 // 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 // software; you can redistribute it and/or modify it under the
...@@ -44,6 +44,20 @@ test01() ...@@ -44,6 +44,20 @@ test01()
str >> v; str >> v;
VERIFY( u == 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() int main()
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
// //
// 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net> // 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 // 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 // software; you can redistribute it and/or modify it under the
...@@ -33,15 +33,29 @@ test01() ...@@ -33,15 +33,29 @@ test01()
bool test __attribute__((unused)) = true; bool test __attribute__((unused)) = true;
std::stringstream str; std::stringstream str;
std::minstd_rand0 a; std::minstd_rand0 u;
std::minstd_rand0 b; std::minstd_rand0 v;
a(); // advance u(); // advance
str << a; str << u;
VERIFY( !(a == b) ); VERIFY( !(u == v) );
str >> b; str >> v;
VERIFY( a == b ); 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() int main()
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
// //
// 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net> // 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 // 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 // software; you can redistribute it and/or modify it under the
...@@ -47,6 +47,20 @@ test01() ...@@ -47,6 +47,20 @@ test01()
str >> v; str >> v;
VERIFY( u == 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() int main()
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
// //
// 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net> // 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 // 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 // software; you can redistribute it and/or modify it under the
...@@ -46,6 +46,20 @@ test01() ...@@ -46,6 +46,20 @@ test01()
str >> v; str >> v;
VERIFY( u == 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() int main()
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
// //
// 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net> // 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 // 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 // software; you can redistribute it and/or modify it under the
...@@ -43,6 +43,20 @@ test01() ...@@ -43,6 +43,20 @@ test01()
str >> v; str >> v;
VERIFY( u == 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() int main()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment