diff --git a/libcxx/test/libcxx/experimental/containers/sequences/dynarray/dynarray.cons/default.pass.cpp b/libcxx/test/libcxx/experimental/containers/sequences/dynarray/dynarray.cons/default.pass.cpp index 0effac2fc142..09969049cf7d 100644 --- a/libcxx/test/libcxx/experimental/containers/sequences/dynarray/dynarray.cons/default.pass.cpp +++ b/libcxx/test/libcxx/experimental/containers/sequences/dynarray/dynarray.cons/default.pass.cpp @@ -7,6 +7,8 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: c++98, c++03, c++11 + // dynarray.cons // explicit dynarray(size_type c); @@ -16,22 +18,21 @@ // ~dynarray(); - -#include <__config> - -#if _LIBCPP_STD_VER > 11 #include #include #include #include +#include +#include #include + using std::experimental::dynarray; template -void test ( const std::initializer_list &vals ) { +void testInitList( const std::initializer_list &vals ) { typedef dynarray dynA; dynA d1 ( vals ); @@ -41,12 +42,14 @@ void test ( const std::initializer_list &vals ) { template -void test ( const T &val ) { +void test ( const T &val, bool DefaultValueIsIndeterminate = false) { typedef dynarray dynA; dynA d1 ( 4 ); assert ( d1.size () == 4 ); - assert ( std::all_of ( d1.begin (), d1.end (), []( const T &item ){ return item == T(); } )); + if (!DefaultValueIsIndeterminate) { + assert ( std::all_of ( d1.begin (), d1.end (), []( const T &item ){ return item == T(); } )); + } dynA d2 ( 7, val ); assert ( d2.size () == 7 ); @@ -60,27 +63,23 @@ void test ( const T &val ) { void test_bad_length () { try { dynarray ( std::numeric_limits::max() / sizeof ( int ) + 1 ); } catch ( std::bad_array_length & ) { return ; } + catch (...) { assert(false); } assert ( false ); - } +} -void test_bad_alloc () { - try { dynarray ( std::numeric_limits::max() / sizeof ( int ) - 1 ); } - catch ( std::bad_alloc & ) { return ; } - assert ( false ); - } int main() { -// test ( 14 ); // ints don't get default initialized - test ( 0 ); - test ( 14.0 ); + test ( 14, /* DefaultValueIsIndeterminate */ true ); // ints don't get default initialized + test ( 0, true); + test ( 14.0, true ); test> ( std::complex ( 14, 0 )); test ( "fourteen" ); - test ( { 1, 1, 2, 3, 5, 8 } ); - test ( { 1., 1., 2., 3., 5., 8. } ); - test ( { std::string("1"), std::string("1"), std::string("2"), std::string("3"), - std::string("5"), std::string("8")} ); + testInitList( { 1, 1, 2, 3, 5, 8 } ); + testInitList( { 1., 1., 2., 3., 5., 8. } ); + testInitList( { std::string("1"), std::string("1"), std::string("2"), std::string("3"), + std::string("5"), std::string("8")} ); // Make sure we don't pick up the Allocator version here dynarray d1 ( 20, 3 ); @@ -88,8 +87,4 @@ int main() assert ( std::all_of ( d1.begin (), d1.end (), []( long item ){ return item == 3L; } )); test_bad_length (); - test_bad_alloc (); } -#else -int main() {} -#endif diff --git a/libcxx/test/libcxx/experimental/containers/sequences/dynarray/dynarray.cons/default_throws_bad_alloc.pass.cpp b/libcxx/test/libcxx/experimental/containers/sequences/dynarray/dynarray.cons/default_throws_bad_alloc.pass.cpp new file mode 100644 index 000000000000..6868e80b3adb --- /dev/null +++ b/libcxx/test/libcxx/experimental/containers/sequences/dynarray/dynarray.cons/default_throws_bad_alloc.pass.cpp @@ -0,0 +1,33 @@ +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// dynarray.cons + +// explicit dynarray(size_type c); + +// UNSUPPORTED: c++98, c++03, c++11 + +// The sanitizers replace new/delete with versions that do not throw bad_alloc. +// UNSUPPORTED: sanitizer-new-delete, ubsan + + +#include +#include +#include +#include + + +using std::experimental::dynarray; + +int main() { + try { dynarray((std::numeric_limits::max() / sizeof(int)) - 1); } + catch (std::bad_alloc &) { return 0; } + catch (...) { assert(false); } + assert(false); +}