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