Guard use of <unistd.h> in test.
authorEric Fiselier <eric@efcs.ca>
Tue, 3 May 2016 00:36:57 +0000 (00:36 +0000)
committerEric Fiselier <eric@efcs.ca>
Tue, 3 May 2016 00:36:57 +0000 (00:36 +0000)
llvm-svn: 268346

libcxx/test/std/numerics/rand/rand.device/ctor.pass.cpp

index dfeccc8..9709484 100644 (file)
 #include <random>
 #include <system_error>
 #include <cassert>
+
+#if !defined(_WIN32)
 #include <unistd.h>
+#endif
+
 
 bool is_valid_random_device(const std::string &token) {
 #if defined(_LIBCPP_USING_DEV_RANDOM)
@@ -41,32 +45,19 @@ void check_random_device_invalid(const std::string &token) {
   try {
     std::random_device r(token);
     assert(false);
-  } catch (const std::system_error &e) {
+  } 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 +65,6 @@ int main() {
     else
       check_random_device_invalid(token);
   }
-
   {
     std::string token = "/dev/random";
     if (is_valid_random_device(token))
@@ -82,4 +72,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)
 }