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 1327a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow// iterator begin() noexcept; 1427a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow// const_iterator begin() const noexcept; 1527a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow// const_iterator cbegin() const noexcept; 1627a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow// iterator end() noexcept; 1727a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow// const_iterator end() const noexcept; 1827a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow// const_iterator cend() const noexcept; 1927a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow// 2027a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow// reverse_iterator rbegin() noexcept; 2127a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow// const_reverse_iterator rbegin() const noexcept; 2227a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow// const_reverse_iterator crbegin() const noexcept; 2327a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow// reverse_iterator rend() noexcept; 2427a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow// const_reverse_iterator rend() const noexcept; 2527a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow// const_reverse_iterator crend() const noexcept; 2627a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 2727a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 2827a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow#include <__config> 2927a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 3027a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow#if _LIBCPP_STD_VER > 11 3127a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 326b7c2aeb004cc8e499f1a2281c356bee0bfc9061Marshall Clow#include <experimental/dynarray> 3327a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow#include <cassert> 3427a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 3527a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow#include <algorithm> 3627a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow#include <complex> 3727a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow#include <string> 3827a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 396b7c2aeb004cc8e499f1a2281c356bee0bfc9061Marshall Clowusing std::experimental::dynarray; 406b7c2aeb004cc8e499f1a2281c356bee0bfc9061Marshall Clow 4127a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clowtemplate <class T> 426b7c2aeb004cc8e499f1a2281c356bee0bfc9061Marshall Clowvoid dyn_test_const ( const dynarray<T> &dyn ) { 4327a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow const T *data = dyn.data (); 4427a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow assert ( data == &*dyn.begin ()); 4527a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow assert ( data == &*dyn.cbegin ()); 4627a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 4727a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow assert ( data + dyn.size() - 1 == &*dyn.rbegin ()); 4827a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow assert ( data + dyn.size() - 1 == &*dyn.crbegin ()); 4927a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 5027a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow assert ( dyn.size () == std::distance ( dyn.begin(), dyn.end())); 5127a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow assert ( dyn.size () == std::distance ( dyn.cbegin(), dyn.cend())); 5227a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow assert ( dyn.size () == std::distance ( dyn.rbegin(), dyn.rend())); 5327a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow assert ( dyn.size () == std::distance ( dyn.crbegin(), dyn.crend())); 5427a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 5527a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow assert ( dyn.begin () == dyn.cbegin ()); 5627a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow assert ( &*dyn.begin () == &*dyn.cbegin ()); 5727a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow assert ( dyn.rbegin () == dyn.crbegin ()); 5827a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow assert ( &*dyn.rbegin () == &*dyn.crbegin ()); 5927a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow assert ( dyn.end () == dyn.cend ()); 6027a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow assert ( dyn.rend () == dyn.crend ()); 6127a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow } 6227a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 6327a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clowtemplate <class T> 646b7c2aeb004cc8e499f1a2281c356bee0bfc9061Marshall Clowvoid dyn_test ( dynarray<T> &dyn ) { 6527a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow T *data = dyn.data (); 6627a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow assert ( data == &*dyn.begin ()); 6727a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow assert ( data == &*dyn.cbegin ()); 6827a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 6927a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow assert ( data + dyn.size() - 1 == &*dyn.rbegin ()); 7027a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow assert ( data + dyn.size() - 1 == &*dyn.crbegin ()); 7127a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 7227a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow assert ( dyn.size () == std::distance ( dyn.begin(), dyn.end())); 7327a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow assert ( dyn.size () == std::distance ( dyn.cbegin(), dyn.cend())); 7427a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow assert ( dyn.size () == std::distance ( dyn.rbegin(), dyn.rend())); 7527a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow assert ( dyn.size () == std::distance ( dyn.crbegin(), dyn.crend())); 7627a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 7727a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow assert ( dyn.begin () == dyn.cbegin ()); 7827a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow assert ( &*dyn.begin () == &*dyn.cbegin ()); 7927a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow assert ( dyn.rbegin () == dyn.crbegin ()); 8027a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow assert ( &*dyn.rbegin () == &*dyn.crbegin ()); 8127a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow assert ( dyn.end () == dyn.cend ()); 8227a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow assert ( dyn.rend () == dyn.crend ()); 8327a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow } 8427a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 8527a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 8627a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clowtemplate <class T> 8727a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clowvoid test ( const T &val ) { 886b7c2aeb004cc8e499f1a2281c356bee0bfc9061Marshall Clow typedef dynarray<T> dynA; 8927a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 9027a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow dynA d1 ( 4 ); 9127a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow dyn_test ( d1 ); 9227a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow dyn_test_const ( d1 ); 9327a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 9427a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow dynA d2 ( 7, val ); 9527a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow dyn_test ( d2 ); 9627a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow dyn_test_const ( d2 ); 9727a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow } 9827a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow 9927a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clowint main() 10027a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow{ 10127a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow test<int> ( 14 ); 10227a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow test<double> ( 14.0 ); 10327a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow test<std::complex<double>> ( std::complex<double> ( 14, 0 )); 10427a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow test<std::string> ( "fourteen" ); 10527a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow} 10627a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow#else 10727a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clowint main() {} 10827a1c252e3f2c0d1192e1e275ce3489b9f0025f9Marshall Clow#endif 109