mirror of git://gcc.gnu.org/git/gcc.git
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
|
|
@ -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>
|
2012-11-03 Florian Weimer <fweimer@redhat.com>
|
||||||
|
|
||||||
* libsupc++/vec.cc (compute_size): New.
|
* libsupc++/vec.cc (compute_size): New.
|
||||||
|
|
@ -23,14 +41,12 @@
|
||||||
* doc/xml/manual/prerequisites.xml: Remove detailed reference
|
* doc/xml/manual/prerequisites.xml: Remove detailed reference
|
||||||
to binutils downloads.
|
to binutils downloads.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
2012-11-02 Paolo Carlini <paolo.carlini@oracle.com>
|
2012-11-02 Paolo Carlini <paolo.carlini@oracle.com>
|
||||||
|
|
||||||
PR libstdc++/55169
|
PR libstdc++/55169
|
||||||
* include/bits/random.h: Remove all uses of param().
|
* include/bits/random.h: Remove all uses of param().
|
||||||
(chi_squared_distribution<>::__generate_impl(_ForwardIterator,
|
(chi_squared_distribution<>::__generate_impl(_ForwardIterator,
|
||||||
_ForwardIterator, _UniformRandomNumberGenerator&): Declare
|
_ForwardIterator, _UniformRandomNumberGenerator&)): Declare
|
||||||
* include/bits/random.tcc: ... define.
|
* include/bits/random.tcc: ... define.
|
||||||
* include/ext/random: Remove all uses of param().
|
* include/ext/random: Remove all uses of param().
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -385,6 +385,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||||
}
|
}
|
||||||
if (__zero)
|
if (__zero)
|
||||||
_M_x[0] = __detail::_Shift<_UIntType, __w - 1>::__value;
|
_M_x[0] = __detail::_Shift<_UIntType, __w - 1>::__value;
|
||||||
|
_M_p = state_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename _UIntType, size_t __w,
|
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…
Reference in New Issue