re PR libstdc++/55215 (Constructor seeding is broken for Mersenne twister)
2012-11-05 Paolo Carlini <paolo.carlini@oracle.com> PR libstdc++/55215 * include/bits/random.tcc (mersenne_twister_engine<>::seed(_Sseq&)): Assign state_size to _M_p. * testsuite/26_numerics/random/mersenne_twister_engine/cons/55215.cc: New. * testsuite/26_numerics/random/independent_bits_engine/cons/55215.cc: Likewise. * testsuite/26_numerics/random/shuffle_order_engine/cons/55215.cc: Likewise. * testsuite/26_numerics/random/subtract_with_carry_engine/cons/ 55215.cc: Likewise. * testsuite/26_numerics/random/discard_block_engine/cons/55215.cc: Likewise. * testsuite/26_numerics/random/linear_congruential_engine/cons/ 55215.cc: Likewise. From-SVN: r193181
This commit is contained in:
parent
d18090b591
commit
935ec36fdd
8 changed files with 370 additions and 3 deletions
|
@ -1,3 +1,21 @@
|
|||
2012-11-05 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR libstdc++/55215
|
||||
* include/bits/random.tcc (mersenne_twister_engine<>::seed(_Sseq&)):
|
||||
Assign state_size to _M_p.
|
||||
* testsuite/26_numerics/random/mersenne_twister_engine/cons/55215.cc:
|
||||
New.
|
||||
* testsuite/26_numerics/random/independent_bits_engine/cons/55215.cc:
|
||||
Likewise.
|
||||
* testsuite/26_numerics/random/shuffle_order_engine/cons/55215.cc:
|
||||
Likewise.
|
||||
* testsuite/26_numerics/random/subtract_with_carry_engine/cons/
|
||||
55215.cc: Likewise.
|
||||
* testsuite/26_numerics/random/discard_block_engine/cons/55215.cc:
|
||||
Likewise.
|
||||
* testsuite/26_numerics/random/linear_congruential_engine/cons/
|
||||
55215.cc: Likewise.
|
||||
|
||||
2012-11-03 Florian Weimer <fweimer@redhat.com>
|
||||
|
||||
* libsupc++/vec.cc (compute_size): New.
|
||||
|
@ -23,14 +41,12 @@
|
|||
* doc/xml/manual/prerequisites.xml: Remove detailed reference
|
||||
to binutils downloads.
|
||||
|
||||
|
||||
|
||||
2012-11-02 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR libstdc++/55169
|
||||
* include/bits/random.h: Remove all uses of param().
|
||||
(chi_squared_distribution<>::__generate_impl(_ForwardIterator,
|
||||
_ForwardIterator, _UniformRandomNumberGenerator&): Declare
|
||||
_ForwardIterator, _UniformRandomNumberGenerator&)): Declare
|
||||
* include/bits/random.tcc: ... define.
|
||||
* include/ext/random: Remove all uses of param().
|
||||
|
||||
|
|
|
@ -385,6 +385,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|||
}
|
||||
if (__zero)
|
||||
_M_x[0] = __detail::_Shift<_UIntType, __w - 1>::__value;
|
||||
_M_p = state_size;
|
||||
}
|
||||
|
||||
template<typename _UIntType, size_t __w,
|
||||
|
|
|
@ -0,0 +1,58 @@
|
|||
// { dg-options "-std=gnu++11" }
|
||||
// { dg-require-cstdint "" }
|
||||
//
|
||||
// Copyright (C) 2012 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 <random>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
int f(int x)
|
||||
{
|
||||
std::seed_seq sq(&x, &x + 1);
|
||||
auto rnd = std::ranlux24(sq);
|
||||
return std::uniform_int_distribution<int>()(rnd);
|
||||
}
|
||||
|
||||
int g(int x)
|
||||
{
|
||||
std::seed_seq sq(&x, &x + 1);
|
||||
auto rnd = std::ranlux24();
|
||||
rnd.seed(sq);
|
||||
return std::uniform_int_distribution<int>()(rnd);
|
||||
}
|
||||
|
||||
void test01()
|
||||
{
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
const int f1 = f(0);
|
||||
const int f2 = f(0);
|
||||
|
||||
const int g1 = g(0);
|
||||
const int g2 = g(0);
|
||||
|
||||
VERIFY( f1 == f2 );
|
||||
VERIFY( g1 == g2 );
|
||||
VERIFY( f1 == g1 );
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test01();
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,60 @@
|
|||
// { dg-options "-std=gnu++11" }
|
||||
// { dg-require-cstdint "" }
|
||||
//
|
||||
// Copyright (C) 2012 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 <random>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
int f(int x)
|
||||
{
|
||||
std::seed_seq sq(&x, &x + 1);
|
||||
auto rnd = std::independent_bits_engine<std::mt19937, 9,
|
||||
std::uint_fast32_t>(sq);
|
||||
return std::uniform_int_distribution<int>()(rnd);
|
||||
}
|
||||
|
||||
int g(int x)
|
||||
{
|
||||
std::seed_seq sq(&x, &x + 1);
|
||||
auto rnd = std::independent_bits_engine<std::mt19937, 9,
|
||||
std::uint_fast32_t>();
|
||||
rnd.seed(sq);
|
||||
return std::uniform_int_distribution<int>()(rnd);
|
||||
}
|
||||
|
||||
void test01()
|
||||
{
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
const int f1 = f(0);
|
||||
const int f2 = f(0);
|
||||
|
||||
const int g1 = g(0);
|
||||
const int g2 = g(0);
|
||||
|
||||
VERIFY( f1 == f2 );
|
||||
VERIFY( g1 == g2 );
|
||||
VERIFY( f1 == g1 );
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test01();
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,58 @@
|
|||
// { dg-options "-std=gnu++11" }
|
||||
// { dg-require-cstdint "" }
|
||||
//
|
||||
// Copyright (C) 2012 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 <random>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
int f(int x)
|
||||
{
|
||||
std::seed_seq sq(&x, &x + 1);
|
||||
auto rnd = std::minstd_rand(sq);
|
||||
return std::uniform_int_distribution<int>()(rnd);
|
||||
}
|
||||
|
||||
int g(int x)
|
||||
{
|
||||
std::seed_seq sq(&x, &x + 1);
|
||||
auto rnd = std::minstd_rand();
|
||||
rnd.seed(sq);
|
||||
return std::uniform_int_distribution<int>()(rnd);
|
||||
}
|
||||
|
||||
void test01()
|
||||
{
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
const int f1 = f(0);
|
||||
const int f2 = f(0);
|
||||
|
||||
const int g1 = g(0);
|
||||
const int g2 = g(0);
|
||||
|
||||
VERIFY( f1 == f2 );
|
||||
VERIFY( g1 == g2 );
|
||||
VERIFY( f1 == g1 );
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test01();
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,58 @@
|
|||
// { dg-options "-std=gnu++11" }
|
||||
// { dg-require-cstdint "" }
|
||||
//
|
||||
// Copyright (C) 2012 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 <random>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
int f(int x)
|
||||
{
|
||||
std::seed_seq sq(&x, &x + 1);
|
||||
auto rnd = std::mt19937(sq);
|
||||
return std::uniform_int_distribution<int>()(rnd);
|
||||
}
|
||||
|
||||
int g(int x)
|
||||
{
|
||||
std::seed_seq sq(&x, &x + 1);
|
||||
auto rnd = std::mt19937();
|
||||
rnd.seed(sq);
|
||||
return std::uniform_int_distribution<int>()(rnd);
|
||||
}
|
||||
|
||||
void test01()
|
||||
{
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
const int f1 = f(0);
|
||||
const int f2 = f(0);
|
||||
|
||||
const int g1 = g(0);
|
||||
const int g2 = g(0);
|
||||
|
||||
VERIFY( f1 == f2 );
|
||||
VERIFY( g1 == g2 );
|
||||
VERIFY( f1 == g1 );
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test01();
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,58 @@
|
|||
// { dg-options "-std=gnu++11" }
|
||||
// { dg-require-cstdint "" }
|
||||
//
|
||||
// Copyright (C) 2012 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 <random>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
int f(int x)
|
||||
{
|
||||
std::seed_seq sq(&x, &x + 1);
|
||||
auto rnd = std::knuth_b(sq);
|
||||
return std::uniform_int_distribution<int>()(rnd);
|
||||
}
|
||||
|
||||
int g(int x)
|
||||
{
|
||||
std::seed_seq sq(&x, &x + 1);
|
||||
auto rnd = std::knuth_b();
|
||||
rnd.seed(sq);
|
||||
return std::uniform_int_distribution<int>()(rnd);
|
||||
}
|
||||
|
||||
void test01()
|
||||
{
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
const int f1 = f(0);
|
||||
const int f2 = f(0);
|
||||
|
||||
const int g1 = g(0);
|
||||
const int g2 = g(0);
|
||||
|
||||
VERIFY( f1 == f2 );
|
||||
VERIFY( g1 == g2 );
|
||||
VERIFY( f1 == g1 );
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test01();
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,58 @@
|
|||
// { dg-options "-std=gnu++11" }
|
||||
// { dg-require-cstdint "" }
|
||||
//
|
||||
// Copyright (C) 2012 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 <random>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
int f(int x)
|
||||
{
|
||||
std::seed_seq sq(&x, &x + 1);
|
||||
auto rnd = std::ranlux24_base(sq);
|
||||
return std::uniform_int_distribution<int>()(rnd);
|
||||
}
|
||||
|
||||
int g(int x)
|
||||
{
|
||||
std::seed_seq sq(&x, &x + 1);
|
||||
auto rnd = std::ranlux24_base();
|
||||
rnd.seed(sq);
|
||||
return std::uniform_int_distribution<int>()(rnd);
|
||||
}
|
||||
|
||||
void test01()
|
||||
{
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
const int f1 = f(0);
|
||||
const int f2 = f(0);
|
||||
|
||||
const int g1 = g(0);
|
||||
const int g2 = g(0);
|
||||
|
||||
VERIFY( f1 == f2 );
|
||||
VERIFY( g1 == g2 );
|
||||
VERIFY( f1 == g1 );
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test01();
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Reference in a new issue