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// reference front(); 1327a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow// const_reference front() const; 1427a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow// reference back(); 1527a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow// const_reference back() const; 1627a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 1727a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 1827a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow#include <__config> 1927a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 2027a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow#if _LIBCPP_STD_VER > 11 2127a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 226b7c2aeb004cc8e499f1a2281c356bee0bfc9061Marshall Clow#include <experimental/dynarray> 2327a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow#include <cassert> 2427a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 2527a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow#include <algorithm> 2627a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow#include <complex> 2727a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow#include <string> 2827a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 296b7c2aeb004cc8e499f1a2281c356bee0bfc9061Marshall Clowusing std::experimental::dynarray; 306b7c2aeb004cc8e499f1a2281c356bee0bfc9061Marshall Clow 3127a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clowtemplate <class T> 326b7c2aeb004cc8e499f1a2281c356bee0bfc9061Marshall Clowvoid dyn_test_const ( const dynarray<T> &dyn ) { 3327a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow const T *data = dyn.data (); 3427a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow assert ( *data == dyn.front ()); 3527a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow assert ( *(data + dyn.size() - 1 ) == dyn.back ()); 3627a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow } 3727a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 3827a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clowtemplate <class T> 396b7c2aeb004cc8e499f1a2281c356bee0bfc9061Marshall Clowvoid dyn_test ( dynarray<T> &dyn ) { 4027a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow T *data = dyn.data (); 4127a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow assert ( *data == dyn.front ()); 4227a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow assert ( *(data + dyn.size() - 1 ) == dyn.back ()); 4327a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow } 4427a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 4527a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 4627a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clowtemplate <class T> 4727a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clowvoid test ( const T &val ) { 486b7c2aeb004cc8e499f1a2281c356bee0bfc9061Marshall Clow typedef dynarray<T> dynA; 4927a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 5027a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow dynA d1 ( 4 ); 5127a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow dyn_test ( d1 ); 5227a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow dyn_test_const ( d1 ); 5327a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 5427a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow dynA d2 ( 7, val ); 5527a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow dyn_test ( d2 ); 5627a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow dyn_test_const ( d2 ); 5727a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow } 5827a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 5927a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clowint main() 6027a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow{ 6127a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow test<int> ( 14 ); 6227a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow test<double> ( 14.0 ); 6327a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow test<std::complex<double>> ( std::complex<double> ( 14, 0 )); 6427a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow test<std::string> ( "fourteen" ); 6527a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow} 6627a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow#else 6727a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clowint main() {} 6827a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow#endif 69