2019-05-29 Jonathan Wakely <jwakely@redhat.com>
+ PR libstdc++/85494
+ * testsuite/26_numerics/random/random_device/cons/token.cc: Fix test
+ that fails on mingw-w64.
+
PR libstdc++/88881
* src/c++17/fs_ops.cc [_GLIBCXX_FILESYSTEM_IS_WINDOWS]
(status(const path&, error_code&)): Use parent_path() to remove
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-// 26.4.6 class random_device [rand.device]
-// 26.4.6 [3]
+// C++11 26.5.6 class random_device [rand.device]
#include <random>
+#include <stdexcept>
#include <testsuite_hooks.h>
void
test01()
{
-#ifdef _GLIBCXX_USE_DEV_RANDOM
- std::random_device x("/dev/random");
-#else
- std::random_device x("0");
-#endif
+ std::random_device x("default");
VERIFY( x.min() == std::numeric_limits<std::random_device::result_type>::min() );
VERIFY( x.max() == std::numeric_limits<std::random_device::result_type>::max() );
+
+}
+
+void
+test02()
+{
+#ifdef _GLIBCXX_USE_DEV_RANDOM
+ std::random_device x1("/dev/urandom");
+ std::random_device x2("/dev/random");
+#endif
+}
+
+void
+test03()
+{
+ // At least one of these tokens should be valid.
+ const std::string tokens[] = {
+ "rdseed", "rdrand", "rand_s", "/dev/urandom", "/dev/random", "mt19337"
+ };
+ int count = 0;
+ for (const std::string& token : tokens)
+ {
+ try
+ {
+ std::random_device x(token);
+ ++count;
+ }
+ catch (const std::runtime_error&)
+ {
+ }
+ }
+ VERIFY( count != 0 );
+}
+
+void
+test04()
+{
+ bool can_use_mt19937 = true;
+ try
+ {
+ std::random_device x("mt19937");
+ }
+ catch (const std::runtime_error&)
+ {
+ can_use_mt19937 = false;
+ }
+
+ // If "mt19337" is a valid token then numeric seeds should be too.
+ if (can_use_mt19937)
+ {
+ std::random_device x1("0");
+ std::random_device x2("1234");
+ std::random_device x3("0xc0fefe");
+ }
}
int main()
{
test01();
- return 0;
+ test02();
+ test03();
+ test04();
}