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.data
1127a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow
1227a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow// T* data() noexcept;
1327a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow// const T* data() const noexcept;
1427a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow
1527a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow
1627a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow#include <__config>
1727a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow
1827a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow#if _LIBCPP_STD_VER > 11
1927a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow
206b7c2aeb004cc8e499f1a2281c356bee0bfc9061Marshall Clow#include <experimental/dynarray>
2127a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow#include <cassert>
2227a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow
2327a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow#include <algorithm>
2427a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow#include <complex>
2527a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow#include <string>
2627a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow
276b7c2aeb004cc8e499f1a2281c356bee0bfc9061Marshall Clowusing std::experimental::dynarray;
2827a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow
2927a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clowtemplate <class T>
306b7c2aeb004cc8e499f1a2281c356bee0bfc9061Marshall Clowvoid dyn_test_const ( const dynarray<T> &dyn ) {
3127a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow    const T *data = dyn.data ();
3227a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow    assert ( data != NULL );
3327a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow    assert ( std::equal ( dyn.begin(), dyn.end(), data ));
3427a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow    }
3527a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow
3627a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clowtemplate <class T>
376b7c2aeb004cc8e499f1a2281c356bee0bfc9061Marshall Clowvoid dyn_test ( dynarray<T> &dyn ) {
3827a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow    T *data = dyn.data ();
3927a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow    assert ( data != NULL );
4027a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow    assert ( std::equal ( dyn.begin(), dyn.end(), data ));
4127a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow    }
4227a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow
4327a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow
4427a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow
4527a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clowtemplate <class T>
4627a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clowvoid test ( const T &val ) {
476b7c2aeb004cc8e499f1a2281c356bee0bfc9061Marshall Clow    typedef dynarray<T> dynA;
4827a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow
4927a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow    dynA d1 ( 4 );
5027a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow    dyn_test ( d1 );
5127a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow    dyn_test_const ( d1 );
5227a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow
5327a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow    dynA d2 ( 7, val );
5427a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow    dyn_test ( d2 );
5527a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow    dyn_test_const ( d2 );
5627a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow    }
5727a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow
5827a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clowint main()
5927a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow{
6027a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow    test<int> ( 14 );
6127a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow    test<double> ( 14.0 );
6227a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow    test<std::complex<double>> ( std::complex<double> ( 14, 0 ));
6327a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow    test<std::string> ( "fourteen" );
6427a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow}
6527a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow#else
6627a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clowint main() {}
6727a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow#endif
68