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
This commit is contained in:
parent
e021c122e5
commit
3164517929
9 changed files with 139 additions and 19 deletions
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Add table
Reference in a new issue