diff options
Diffstat (limited to 'test/std/numerics/rand/rand.device/ctor.pass.cpp')
-rw-r--r-- | test/std/numerics/rand/rand.device/ctor.pass.cpp | 43 |
1 files changed, 25 insertions, 18 deletions
diff --git a/test/std/numerics/rand/rand.device/ctor.pass.cpp b/test/std/numerics/rand/rand.device/ctor.pass.cpp index dfeccc81e30ee..8c45bb19a0a6b 100644 --- a/test/std/numerics/rand/rand.device/ctor.pass.cpp +++ b/test/std/numerics/rand/rand.device/ctor.pass.cpp @@ -22,7 +22,13 @@ #include <random> #include <system_error> #include <cassert> + +#if !defined(_WIN32) #include <unistd.h> +#endif + +#include "test_macros.h" + bool is_valid_random_device(const std::string &token) { #if defined(_LIBCPP_USING_DEV_RANDOM) @@ -40,33 +46,20 @@ void check_random_device_valid(const std::string &token) { void check_random_device_invalid(const std::string &token) { try { std::random_device r(token); - assert(false); - } catch (const std::system_error &e) { + LIBCPP_ASSERT(false); + } catch (const std::system_error&) { } } -int main() { - { std::random_device r; } +int main() { { - int ec; - ec = close(STDIN_FILENO); - assert(!ec); - ec = close(STDOUT_FILENO); - assert(!ec); - ec = close(STDERR_FILENO); - assert(!ec); std::random_device r; } - { std::string token = "wrong file"; - if (is_valid_random_device(token)) - check_random_device_valid(token); - else - check_random_device_invalid(token); + check_random_device_invalid(token); } - { std::string token = "/dev/urandom"; if (is_valid_random_device(token)) @@ -74,7 +67,6 @@ int main() { else check_random_device_invalid(token); } - { std::string token = "/dev/random"; if (is_valid_random_device(token)) @@ -82,4 +74,19 @@ int main() { else check_random_device_invalid(token); } +#if !defined(_WIN32) +// Test that random_device(const string&) properly handles getting +// a file descriptor with the value '0'. Do this by closing the standard +// streams so that the descriptor '0' is available. + { + int ec; + ec = close(STDIN_FILENO); + assert(!ec); + ec = close(STDOUT_FILENO); + assert(!ec); + ec = close(STDERR_FILENO); + assert(!ec); + std::random_device r; + } +#endif // !defined(_WIN32) } |