From ef6f1151b0d1f32b80d8d326e7176ca06e06a2f4 Mon Sep 17 00:00:00 2001 From: Marshall Clow Date: Fri, 13 Sep 2013 15:22:55 +0000 Subject: Initial implementation of . No allocator support pending resolution of LWG #2235; no stack allocation pending compiler support llvm-svn: 190697 --- .../dynarray/dynarray.overview/at.pass.cpp | 92 ++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 libcxx/test/containers/sequences/dynarray/dynarray.overview/at.pass.cpp (limited to 'libcxx/test/containers/sequences/dynarray/dynarray.overview/at.pass.cpp') diff --git a/libcxx/test/containers/sequences/dynarray/dynarray.overview/at.pass.cpp b/libcxx/test/containers/sequences/dynarray/dynarray.overview/at.pass.cpp new file mode 100644 index 00000000000..dca4ff80ce6 --- /dev/null +++ b/libcxx/test/containers/sequences/dynarray/dynarray.overview/at.pass.cpp @@ -0,0 +1,92 @@ +//===----------------------------------------------------------------------===// +// +// 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.overview + +// const_reference at(size_type n) const; +// reference at(size_type n); + +#include <__config> + +#if _LIBCPP_STD_VER > 11 + +#include +#include + +#include +#include +#include + +template +void dyn_at_fail ( std::dynarray &dyn, size_t sz ) { + try { dyn.at (sz); } + catch (const std::out_of_range &) { return; } + assert ( false ); + } + +template +void dyn_at_fail_const ( const std::dynarray &dyn, size_t sz ) { + try { dyn.at (sz); } + catch (const std::out_of_range &) { return; } + assert ( false ); + } + + +template +void dyn_test_const ( const std::dynarray &dyn, const std::initializer_list &vals ) { + const T *data = dyn.data (); + auto it = vals.begin (); + for ( size_t i = 0; i < dyn.size(); ++i, ++it ) { + assert ( data + i == &dyn.at(i)); + assert ( *it == dyn.at(i)); + } + + dyn_at_fail_const ( dyn, dyn.size ()); + dyn_at_fail_const ( dyn, 2*dyn.size ()); + dyn_at_fail_const ( dyn, size_t (-1)); + } + +template +void dyn_test ( std::dynarray &dyn, const std::initializer_list &vals ) { + T *data = dyn.data (); + auto it = vals.begin (); + for ( size_t i = 0; i < dyn.size(); ++i, ++it ) { + assert ( data + i == &dyn.at(i)); + assert ( *it == dyn.at(i)); + } + + dyn_at_fail ( dyn, dyn.size ()); + dyn_at_fail ( dyn, 2*dyn.size ()); + dyn_at_fail ( dyn, size_t (-1)); + } + + +template +void test ( std::initializer_list vals ) { + typedef std::dynarray dynA; + + dynA d1 ( vals ); + dyn_test ( d1, vals ); + dyn_test_const ( d1, vals ); + } + +int main() +{ + 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")} ); + + test ( {} ); + test> ( {} ); + test ( {} ); +} +#else +int main() {} +#endif -- cgit v1.2.3