Lately, 26_numerics/random/binomial_distribution/operators/values.cc has started to FAIL on trunk with a timeout for my autotester for cris-elf, a soft-float simulator target running a cgen-generated simulator on a six-year-old x86_64-linux-gnu host. The reason it's started to fail in the last few days are not clear, except that they're probably local: I've eliminated code quality issues and the test-case itself hasn't changed in about 1.5 years (a few more details in the PR).
Anyway, the test-case is by appearance a few test-cases bundled together, which seem to be just as well tested individually considering the apparent intent of the test and considering that the last non-comment change was to add the last two sub-tests. (A split-up is also what's done in the past, in preference to cutting down the test with ifdefs for simulator targets.) So, I split out all-but-the-first subtest from values.cc. For those interested, the individual runtimes (total M:S) for the plain simulator runs on that machine, together with the cycle counts (when using --cris-cycles=all) after the split-up are: values: 0:51.131 4011197245 values2: 3:16.39 15456247210 values3: 1:11.76 5633161989 values4: 0:20.944 1626754775 values5: 3:24.28 16163068067 (I just wanted to make sure the longest run wasn't over half the default time out, i.e. not over five minutes.) Ok to commit? PR testsuite/65093 * testsuite/26_numerics/random/binomial_distribution/operators/values.cc (test01): Add explanatory comment. Keep only the bd1 sub-test and split out bd2, bd3, bd4, and bd5 sub-tests into... * testsuite/26_numerics/random/binomial_distribution/operators/values2.cc, testsuite/26_numerics/random/binomial_distribution/operators/values3.cc, testsuite/26_numerics/random/binomial_distribution/operators/values4.cc, testsuite/26_numerics/random/binomial_distribution/operators/values5.cc: New separate files with the old parts. Index: testsuite/26_numerics/random/binomial_distribution/operators/values.cc =================================================================== --- testsuite/26_numerics/random/binomial_distribution/operators/values.cc (revision 220801) +++ testsuite/26_numerics/random/binomial_distribution/operators/values.cc (working copy) @@ -35,25 +35,8 @@ void test01() auto bbd1 = std::bind(bd1, eng); testDiscreteDist(bbd1, [](int n) { return binomial_pdf(n, 5, 0.3); } ); - std::binomial_distribution<> bd2(55, 0.3); - auto bbd2 = std::bind(bd2, eng); - testDiscreteDist(bbd2, [](int n) { return binomial_pdf(n, 55, 0.3); } ); - - // libstdc++/48114 - std::binomial_distribution<> bd3(10, 0.75); - auto bbd3 = std::bind(bd3, eng); - testDiscreteDist(bbd3, [](int n) { return binomial_pdf(n, 10, 0.75); } ); - - // libstdc++/57674 - std::binomial_distribution<> bd4(1, 0.8); - const std::binomial_distribution<>::param_type pm4(1, 0.3); - auto bbd4 = std::bind(bd4, eng, pm4); - testDiscreteDist(bbd4, [](int n) { return binomial_pdf(n, 1, 0.3); } ); - - std::binomial_distribution<> bd5(100, 0.3); - const std::binomial_distribution<>::param_type pm5(100, 0.8); - auto bbd5 = std::bind(bd5, eng, pm5); - testDiscreteDist(bbd5, [](int n) { return binomial_pdf(n, 100, 0.8); } ); + // These tests take a relatively long time on soft-float simulated + // targets, so please don't add new tests here, instead add a new file. } int main() --- /dev/null 2014-05-03 23:56:36.661002562 +0200 +++ testsuite/26_numerics/random/binomial_distribution/operators/values2.cc 2015-02-19 02:39:09.000000000 +0100 @@ -0,0 +1,43 @@ +// { dg-options "-std=gnu++11" } +// { dg-require-cstdint "" } +// { dg-require-cmath "" } +// +// Copyright (C) 2011-2015 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/>. + +// 26.5.8.2.2 Class template binomial_distribution [rand.dist.bern.bin] + +#include <random> +#include <functional> +#include <testsuite_random.h> + +void test01() +{ + using namespace __gnu_test; + + std::mt19937 eng; + + std::binomial_distribution<> bd2(55, 0.3); + auto bbd2 = std::bind(bd2, eng); + testDiscreteDist(bbd2, [](int n) { return binomial_pdf(n, 55, 0.3); } ); +} + +int main() +{ + test01(); + return 0; +} --- /dev/null 2014-05-03 23:56:36.661002562 +0200 +++ testsuite/26_numerics/random/binomial_distribution/operators/values3.cc 2015-02-19 02:39:24.000000000 +0100 @@ -0,0 +1,44 @@ +// { dg-options "-std=gnu++11" } +// { dg-require-cstdint "" } +// { dg-require-cmath "" } +// +// Copyright (C) 2011-2015 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/>. + +// 26.5.8.2.2 Class template binomial_distribution [rand.dist.bern.bin] + +#include <random> +#include <functional> +#include <testsuite_random.h> + +void test01() +{ + using namespace __gnu_test; + + std::mt19937 eng; + + // libstdc++/48114 + std::binomial_distribution<> bd3(10, 0.75); + auto bbd3 = std::bind(bd3, eng); + testDiscreteDist(bbd3, [](int n) { return binomial_pdf(n, 10, 0.75); } ); +} + +int main() +{ + test01(); + return 0; +} --- /dev/null 2014-05-03 23:56:36.661002562 +0200 +++ testsuite/26_numerics/random/binomial_distribution/operators/values4.cc 2015-02-19 02:39:38.000000000 +0100 @@ -0,0 +1,45 @@ +// { dg-options "-std=gnu++11" } +// { dg-require-cstdint "" } +// { dg-require-cmath "" } +// +// Copyright (C) 2011-2015 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/>. + +// 26.5.8.2.2 Class template binomial_distribution [rand.dist.bern.bin] + +#include <random> +#include <functional> +#include <testsuite_random.h> + +void test01() +{ + using namespace __gnu_test; + + std::mt19937 eng; + + // libstdc++/57674 + std::binomial_distribution<> bd4(1, 0.8); + const std::binomial_distribution<>::param_type pm4(1, 0.3); + auto bbd4 = std::bind(bd4, eng, pm4); + testDiscreteDist(bbd4, [](int n) { return binomial_pdf(n, 1, 0.3); } ); +} + +int main() +{ + test01(); + return 0; +} --- /dev/null 2014-05-03 23:56:36.661002562 +0200 +++ testsuite/26_numerics/random/binomial_distribution/operators/values5.cc 2015-02-19 02:39:47.000000000 +0100 @@ -0,0 +1,44 @@ +// { dg-options "-std=gnu++11" } +// { dg-require-cstdint "" } +// { dg-require-cmath "" } +// +// Copyright (C) 2011-2015 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/>. + +// 26.5.8.2.2 Class template binomial_distribution [rand.dist.bern.bin] + +#include <random> +#include <functional> +#include <testsuite_random.h> + +void test01() +{ + using namespace __gnu_test; + + std::mt19937 eng; + + std::binomial_distribution<> bd5(100, 0.3); + const std::binomial_distribution<>::param_type pm5(100, 0.8); + auto bbd5 = std::bind(bd5, eng, pm5); + testDiscreteDist(bbd5, [](int n) { return binomial_pdf(n, 100, 0.8); } ); +} + +int main() +{ + test01(); + return 0; +} brgds, H-P