CaseyCarter removed rL LLVM as the repository for this revision.
CaseyCarter updated this revision to Diff 75936.
CaseyCarter added a comment.

Cleanup nonportable behavior in tests for `std::any`

Fixes MS issues 63, 64, and 65.

test/std/utilities/any/any.class/any.cons/move.pass.cpp:

- "Moves are always destructive" is not a portable assumption; check with 
`LIBCPP_ASSERT`.

test/std/utilities/any/any.class/any.cons/value.pass.cpp:

- The standard does not forbid initializing `std::any` from any 
pointer-to-function type. Remove the non-conforming `DecayTag` test.

test/std/utilities/any/any.class/any.modifiers/swap.pass.cpp:

- Self-swap is not specified to perform no moves; check with `LIBCPP_ASSERT`.


https://reviews.llvm.org/D26007

Files:
  test/std/utilities/any/any.class/any.cons/move.pass.cpp
  test/std/utilities/any/any.class/any.cons/value.pass.cpp
  test/std/utilities/any/any.class/any.modifiers/swap.pass.cpp


Index: test/std/utilities/any/any.class/any.modifiers/swap.pass.cpp
===================================================================
--- test/std/utilities/any/any.class/any.modifiers/swap.pass.cpp
+++ test/std/utilities/any/any.class/any.modifiers/swap.pass.cpp
@@ -104,7 +104,7 @@
         assertContains<T>(a, 42);
         assert(T::count == 1);
         assert(T::copied == 0);
-        assert(T::moved == 0);
+        LIBCPP_ASSERT(T::moved == 0);
     }
     assert(small::count == 0);
     { // large
@@ -113,9 +113,9 @@
         T::reset();
         a.swap(a);
         assertContains<T>(a, 42);
-        assert(T::copied == 0);
-        assert(T::moved == 0);
         assert(T::count == 1);
+        assert(T::copied == 0);
+        LIBCPP_ASSERT(T::moved == 0);
     }
     assert(large::count == 0);
 }
Index: test/std/utilities/any/any.class/any.cons/value.pass.cpp
===================================================================
--- test/std/utilities/any/any.class/any.cons/value.pass.cpp
+++ test/std/utilities/any/any.class/any.cons/value.pass.cpp
@@ -137,10 +137,6 @@
         static_assert(!std::is_constructible<std::any, T>::value, "");
     }
     {
-        using DecayTag = std::decay_t<BadTag>;
-        static_assert(!std::is_constructible<std::any, DecayTag>::value, "");
-    }
-    {
         // Test that the ValueType&& constructor SFINAE's away when the
         // argument is non-copyable
         struct NoCopy {
Index: test/std/utilities/any/any.class/any.cons/move.pass.cpp
===================================================================
--- test/std/utilities/any/any.class/any.cons/move.pass.cpp
+++ test/std/utilities/any/any.class/any.cons/move.pass.cpp
@@ -80,8 +80,8 @@
         assert(Type::moved == 1 || Type::moved == 2); // zero or more move 
operations can be performed.
         assert(Type::copied == 0); // no copies can be performed.
         assert(Type::count == 1 + a.has_value());
-        assertEmpty(a); // Moves are always destructive.
         assertContains<Type>(a2, 42);
+        LIBCPP_ASSERT(!a.has_value()); // Moves are always destructive.
         if (a.has_value())
             assertContains<Type>(a, 0);
     }


Index: test/std/utilities/any/any.class/any.modifiers/swap.pass.cpp
===================================================================
--- test/std/utilities/any/any.class/any.modifiers/swap.pass.cpp
+++ test/std/utilities/any/any.class/any.modifiers/swap.pass.cpp
@@ -104,7 +104,7 @@
         assertContains<T>(a, 42);
         assert(T::count == 1);
         assert(T::copied == 0);
-        assert(T::moved == 0);
+        LIBCPP_ASSERT(T::moved == 0);
     }
     assert(small::count == 0);
     { // large
@@ -113,9 +113,9 @@
         T::reset();
         a.swap(a);
         assertContains<T>(a, 42);
-        assert(T::copied == 0);
-        assert(T::moved == 0);
         assert(T::count == 1);
+        assert(T::copied == 0);
+        LIBCPP_ASSERT(T::moved == 0);
     }
     assert(large::count == 0);
 }
Index: test/std/utilities/any/any.class/any.cons/value.pass.cpp
===================================================================
--- test/std/utilities/any/any.class/any.cons/value.pass.cpp
+++ test/std/utilities/any/any.class/any.cons/value.pass.cpp
@@ -137,10 +137,6 @@
         static_assert(!std::is_constructible<std::any, T>::value, "");
     }
     {
-        using DecayTag = std::decay_t<BadTag>;
-        static_assert(!std::is_constructible<std::any, DecayTag>::value, "");
-    }
-    {
         // Test that the ValueType&& constructor SFINAE's away when the
         // argument is non-copyable
         struct NoCopy {
Index: test/std/utilities/any/any.class/any.cons/move.pass.cpp
===================================================================
--- test/std/utilities/any/any.class/any.cons/move.pass.cpp
+++ test/std/utilities/any/any.class/any.cons/move.pass.cpp
@@ -80,8 +80,8 @@
         assert(Type::moved == 1 || Type::moved == 2); // zero or more move operations can be performed.
         assert(Type::copied == 0); // no copies can be performed.
         assert(Type::count == 1 + a.has_value());
-        assertEmpty(a); // Moves are always destructive.
         assertContains<Type>(a2, 42);
+        LIBCPP_ASSERT(!a.has_value()); // Moves are always destructive.
         if (a.has_value())
             assertContains<Type>(a, 0);
     }
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to