127a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow//===----------------------------------------------------------------------===// 227a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow// 327a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow// The LLVM Compiler Infrastructure 427a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow// 527a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow// This file is dual licensed under the MIT and the University of Illinois Open 627a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow// Source Licenses. See LICENSE.TXT for details. 727a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow// 827a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow//===----------------------------------------------------------------------===// 927a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 1027a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow// dynarray.overview 1127a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 1227a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow// const_reference at(size_type n) const; 1327a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow// reference at(size_type n); 1427a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 1527a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow#include <__config> 1627a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 1727a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow#if _LIBCPP_STD_VER > 11 1827a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 196b7c2aeb004cc8e499f1a2281c356bee0bfc9061Marshall Clow#include <experimental/dynarray> 2027a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow#include <cassert> 2127a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 2227a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow#include <algorithm> 2327a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow#include <complex> 2427a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow#include <string> 2527a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 266b7c2aeb004cc8e499f1a2281c356bee0bfc9061Marshall Clowusing std::experimental::dynarray; 276b7c2aeb004cc8e499f1a2281c356bee0bfc9061Marshall Clow 2827a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clowtemplate <class T> 296b7c2aeb004cc8e499f1a2281c356bee0bfc9061Marshall Clowvoid dyn_test_const ( const dynarray<T> &dyn, const std::initializer_list<T> &vals ) { 3027a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow const T *data = dyn.data (); 3127a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow auto it = vals.begin (); 3227a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow for ( size_t i = 0; i < dyn.size(); ++i, ++it ) { 3327a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow assert ( data + i == &dyn[i]); 3427a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow assert ( *it == dyn[i]); 3527a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow } 3627a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow } 3727a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 3827a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clowtemplate <class T> 396b7c2aeb004cc8e499f1a2281c356bee0bfc9061Marshall Clowvoid dyn_test ( dynarray<T> &dyn, const std::initializer_list<T> &vals ) { 4027a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow T *data = dyn.data (); 4127a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow auto it = vals.begin (); 4227a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow for ( size_t i = 0; i < dyn.size(); ++i, ++it ) { 4327a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow assert ( data + i == &dyn[i]); 4427a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow assert ( *it == dyn[i]); 4527a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow } 4627a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow } 4727a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 4827a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 4927a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clowtemplate <class T> 5027a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clowvoid test ( std::initializer_list<T> vals ) { 516b7c2aeb004cc8e499f1a2281c356bee0bfc9061Marshall Clow typedef dynarray<T> dynA; 5227a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 5327a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow dynA d1 ( vals ); 5427a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow dyn_test ( d1, vals ); 5527a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow dyn_test_const ( d1, vals ); 5627a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow } 5727a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 5827a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clowint main() 5927a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow{ 6027a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow test ( { 1, 1, 2, 3, 5, 8 } ); 6127a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow test ( { 1., 1., 2., 3., 5., 8. } ); 6227a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow test ( { std::string("1"), std::string("1"), std::string("2"), std::string("3"), 6327a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow std::string("5"), std::string("8")} ); 6427a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 6527a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow test<int> ( {} ); 6627a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow test<std::complex<double>> ( {} ); 6727a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow test<std::string> ( {} ); 6827a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow} 6927a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow#else 7027a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clowint main() {} 7127a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow#endif 72