@@ -31,9 +31,8 @@ TEST( Array, constructors )
3131 {
3232 // Create an empty 2D array of integers.
3333 LvArray::Array< int ,
34- 2 ,
34+ LvArray::DynamicExtent< 2 , std:: ptrdiff_t > ,
3535 camp::idx_seq< 0 , 1 >,
36- std::ptrdiff_t ,
3736 LvArray::MallocBuffer > array;
3837 EXPECT_TRUE ( array.empty () );
3938 EXPECT_EQ ( array.size (), 0 );
@@ -44,9 +43,8 @@ TEST( Array, constructors )
4443 {
4544 // Create a 3D array of std::string of size 3 x 4 x 5.
4645 LvArray::Array< std::string,
47- 3 ,
46+ LvArray::DynamicExtent< 3 , std:: ptrdiff_t > ,
4847 camp::idx_seq< 0 , 1 , 2 >,
49- std::ptrdiff_t ,
5048 LvArray::MallocBuffer > array ( 3 , 4 , 5 );
5149 EXPECT_FALSE ( array.empty () );
5250 EXPECT_EQ ( array.size (), 3 * 4 * 5 );
@@ -69,9 +67,8 @@ TEST( Array, accessors )
6967{
7068 // Create a 2D array of integers.
7169 LvArray::Array< int ,
72- 2 ,
70+ LvArray::DynamicExtent< 2 , std:: ptrdiff_t > ,
7371 camp::idx_seq< 0 , 1 >,
74- std::ptrdiff_t ,
7572 LvArray::MallocBuffer > array ( 3 , 4 );
7673
7774 // Access using operator().
@@ -100,15 +97,14 @@ TEST( Array, permutations )
10097 {
10198 // Create a 3D array of doubles in the standard layout.
10299 LvArray::Array< int ,
103- 3 ,
100+ LvArray::DynamicExtent< 3 , std:: ptrdiff_t > ,
104101 camp::idx_seq< 0 , 1 , 2 >,
105- std::ptrdiff_t ,
106102 LvArray::MallocBuffer > array ( 3 , 4 , 5 );
107103
108104 // Index 0 has the largest stride while index 2 has unit stride.
109- EXPECT_EQ ( array.strides ()[ 0 ] , array.size ( 2 ) * array.size ( 1 ) );
110- EXPECT_EQ ( array.strides ()[ 1 ] , array.size ( 2 ) );
111- EXPECT_EQ ( array.strides ()[ 2 ] , 1 );
105+ EXPECT_EQ ( array.stride < 0 >() , array.size ( 2 ) * array.size ( 1 ) );
106+ EXPECT_EQ ( array.stride < 1 >() , array.size ( 2 ) );
107+ EXPECT_EQ ( array.stride < 2 >() , 1 );
112108
113109 int const * const pointer = array.data ();
114110 for ( std::ptrdiff_t i = 0 ; i < array.size ( 0 ); ++i )
@@ -128,15 +124,14 @@ TEST( Array, permutations )
128124 {
129125 // Create a 3D array of doubles in a flipped layout.
130126 LvArray::Array< int ,
131- 3 ,
127+ LvArray::DynamicExtent< 3 , std:: ptrdiff_t > ,
132128 camp::idx_seq< 2 , 1 , 0 >,
133- std::ptrdiff_t ,
134129 LvArray::MallocBuffer > array ( 3 , 4 , 5 );
135130
136131 // Index 0 has the unit stride while index 2 has the largest stride.
137- EXPECT_EQ ( array.strides ()[ 0 ] , 1 );
138- EXPECT_EQ ( array.strides ()[ 1 ] , array.size ( 0 ) );
139- EXPECT_EQ ( array.strides ()[ 2 ] , array.size ( 0 ) * array.size ( 1 ) );
132+ EXPECT_EQ ( array.stride < 0 >() , 1 );
133+ EXPECT_EQ ( array.stride < 1 >() , array.size ( 0 ) );
134+ EXPECT_EQ ( array.stride < 2 >() , array.size ( 0 ) * array.size ( 1 ) );
140135
141136 int const * const pointer = array.data ();
142137 for ( std::ptrdiff_t i = 0 ; i < array.size ( 0 ); ++i )
@@ -159,9 +154,8 @@ TEST( Array, permutations )
159154TEST ( Array, resize )
160155{
161156 LvArray::Array< int ,
162- 3 ,
157+ LvArray::DynamicExtent< 3 , std:: ptrdiff_t > ,
163158 camp::idx_seq< 0 , 1 , 2 >,
164- std::ptrdiff_t ,
165159 LvArray::MallocBuffer > array;
166160
167161 // Resize using a pointer
@@ -192,9 +186,8 @@ TEST( Array, resize )
192186TEST ( Array, resizeSingleDimension )
193187{
194188 LvArray::Array< int ,
195- 2 ,
189+ LvArray::DynamicExtent< 2 , std:: ptrdiff_t > ,
196190 camp::idx_seq< 1 , 0 >,
197- std::ptrdiff_t ,
198191 LvArray::MallocBuffer > array ( 5 , 6 );
199192
200193 for ( std::ptrdiff_t i = 0 ; i < array.size ( 0 ); ++i )
@@ -223,8 +216,7 @@ TEST( Array, resizeSingleDimension )
223216 }
224217
225218 // Shrink the second dimension from 6 to 3;
226- array.setSingleParameterResizeIndex ( 1 );
227- array.resize ( 3 );
219+ array.resizeDimension < 1 >( 3 );
228220 for ( std::ptrdiff_t i = 0 ; i < array.size ( 0 ); ++i )
229221 {
230222 for ( std::ptrdiff_t j = 0 ; j < array.size ( 1 ); ++j )
@@ -246,32 +238,25 @@ TEST( Array, resizeSingleDimension )
246238TEST ( Array, arrayView )
247239{
248240 LvArray::Array< int ,
249- 2 ,
241+ LvArray::DynamicExtent< 2 , std:: ptrdiff_t > ,
250242 camp::idx_seq< 1 , 0 >,
251- std::ptrdiff_t ,
252243 LvArray::MallocBuffer > array ( 5 , 6 );
253244
254245 // Create a view.
255246 LvArray::ArrayView< int ,
256- 2 ,
257- 0 ,
258- std::ptrdiff_t ,
247+ LvArray::DynamicLayout< 2 , std::ptrdiff_t , camp::idx_seq< 1 , 0 > >,
259248 LvArray::MallocBuffer > const view = array;
260249 EXPECT_EQ ( view.data (), array.data () );
261250
262251 // Create a view with const values.
263252 LvArray::ArrayView< int const ,
264- 2 ,
265- 0 ,
266- std::ptrdiff_t ,
253+ LvArray::DynamicLayout< 2 , std::ptrdiff_t , camp::idx_seq< 1 , 0 > >,
267254 LvArray::MallocBuffer > const viewConst = array.toViewConst ();
268255 EXPECT_EQ ( viewConst.data (), array.data () );
269256
270257 // Copy a view.
271258 LvArray::ArrayView< int ,
272- 2 ,
273- 0 ,
274- std::ptrdiff_t ,
259+ LvArray::DynamicLayout< 2 , std::ptrdiff_t , camp::idx_seq< 1 , 0 > >,
275260 LvArray::MallocBuffer > const viewCopy = view;
276261 EXPECT_EQ ( viewCopy.data (), array.data () );
277262}
@@ -282,17 +267,14 @@ TEST( Array, arraySlice )
282267{
283268 {
284269 LvArray::Array< int ,
285- 2 ,
270+ LvArray::DynamicExtent< 2 , std:: ptrdiff_t > ,
286271 camp::idx_seq< 0 , 1 >,
287- std::ptrdiff_t ,
288272 LvArray::MallocBuffer > array ( 5 , 6 );
289273
290274 // The unit stride dimension of array is 1 so when we slice off
291275 // the first dimension the unit stride dimension of the slice is 0.
292276 LvArray::ArraySlice< int ,
293- 1 ,
294- 0 ,
295- std::ptrdiff_t > const slice = array[ 2 ];
277+ LvArray::DynamicLayout1D< std::ptrdiff_t > > const slice = array[ 2 ];
296278 EXPECT_TRUE ( slice.isContiguous () );
297279 EXPECT_EQ ( slice.size (), 6 );
298280 EXPECT_EQ ( slice.size ( 0 ), 6 );
@@ -301,17 +283,14 @@ TEST( Array, arraySlice )
301283
302284 {
303285 LvArray::Array< int ,
304- 3 ,
286+ LvArray::DynamicExtent< 3 , std:: ptrdiff_t > ,
305287 camp::idx_seq< 2 , 1 , 0 >,
306- std::ptrdiff_t ,
307288 LvArray::MallocBuffer > array ( 3 , 5 , 6 );
308289
309290 // The unit stride dimension of array is 0 so when we slice off
310291 // the first dimension the unit stride dimension of the slice is -1.
311292 LvArray::ArraySlice< int ,
312- 2 ,
313- -1 ,
314- std::ptrdiff_t > const slice = array[ 2 ];
293+ LvArray::NonContiguousLayout< 2 , std::ptrdiff_t > > const slice = array[ 2 ];
315294 EXPECT_FALSE ( slice.isContiguous () );
316295 EXPECT_EQ ( slice.size (), 5 * 6 );
317296 EXPECT_EQ ( slice.size ( 0 ), 5 );
@@ -326,9 +305,8 @@ TEST( Array, arraySlice )
326305CUDA_TEST ( Array, chaiBuffer )
327306{
328307 LvArray::Array< int ,
329- 2 ,
308+ LvArray::DynamicExtent< 2 , std:: ptrdiff_t > ,
330309 camp::idx_seq< 1 , 0 >,
331- std::ptrdiff_t ,
332310 LvArray::ChaiBuffer > array ( 5 , 6 );
333311
334312 // Move the array to the device.
@@ -344,9 +322,7 @@ CUDA_TEST( Array, chaiBuffer )
344322 );
345323
346324 LvArray::ArrayView< int ,
347- 2 ,
348- 0 ,
349- std::ptrdiff_t ,
325+ LvArray::DynamicLayout< 2 , std::ptrdiff_t , camp::idx_seq< 1 , 0 > >,
350326 LvArray::ChaiBuffer > const & view = array;
351327
352328 // Capture the view in a host kernel which moves the data back to the host.
@@ -364,9 +340,8 @@ CUDA_TEST( Array, chaiBuffer )
364340TEST ( Array, setName )
365341{
366342 LvArray::Array< int ,
367- 2 ,
343+ LvArray::DynamicExtent< 2 , std:: ptrdiff_t > ,
368344 camp::idx_seq< 1 , 0 >,
369- std::ptrdiff_t ,
370345 LvArray::ChaiBuffer > array ( 1024 , 1024 );
371346
372347 // Move the array to the device.
@@ -381,8 +356,8 @@ TEST( Array, setName )
381356#endif
382357
383358// Sphinx start after sum int
384- template < int NDIM, int USD >
385- int sum ( LvArray::ArraySlice< int const , NDIM, USD, std:: ptrdiff_t > const slice )
359+ template < typename LAYOUT >
360+ int sum ( LvArray::ArraySlice< int const , LAYOUT > const slice )
386361{
387362 int value = 0 ;
388363 for ( int const val : slice )
@@ -395,8 +370,8 @@ int sum( LvArray::ArraySlice< int const, NDIM, USD, std::ptrdiff_t > const slice
395370// Sphinx end before sum int
396371
397372// Sphinx start after sum double
398- template < int NDIM, int USD >
399- double sum ( LvArray::ArraySlice< double const , NDIM, USD, std:: ptrdiff_t > const slice )
373+ template < typename LAYOUT >
374+ double sum ( LvArray::ArraySlice< double const , LAYOUT > const slice )
400375{
401376 double value = 0 ;
402377 LvArray::forValuesInSlice ( slice, [&value] ( double const val )
@@ -409,11 +384,12 @@ double sum( LvArray::ArraySlice< double const, NDIM, USD, std::ptrdiff_t > const
409384// Sphinx end before sum double
410385
411386// Sphinx start after copy
412- template < int NDIM, int DST_USD, int SRC_USD >
413- void copy ( LvArray::ArraySlice< int , NDIM, DST_USD, std:: ptrdiff_t > const dst,
414- LvArray::ArraySlice< int const , NDIM, SRC_USD, std:: ptrdiff_t > const src )
387+ template < typename SRC_LAYOUT, typename DST_LAYOUT >
388+ void copy ( LvArray::ArraySlice< int , DST_LAYOUT > const dst,
389+ LvArray::ArraySlice< int const , SRC_LAYOUT > const src )
415390{
416- for ( int dim = 0 ; dim < NDIM; ++dim )
391+ static_assert ( DST_LAYOUT::NDIM == SRC_LAYOUT::NDIM, " Layout ranks must match" );
392+ for ( int dim = 0 ; dim < DST_LAYOUT::NDIM; ++dim )
417393 {
418394 LVARRAY_ERROR_IF_NE ( dst.size ( dim ), src.size ( dim ) );
419395 }
@@ -431,15 +407,15 @@ void copy( LvArray::ArraySlice< int, NDIM, DST_USD, std::ptrdiff_t > const dst,
431407TEST ( Array, boundsCheck )
432408{
433409#if defined(ARRAY_USE_BOUNDS_CHECK)
434- LvArray::Array< int , 3 , camp::idx_seq< 0 , 1 , 2 >, std:: ptrdiff_t , LvArray::MallocBuffer > x ( 3 , 4 , 5 );
410+ LvArray::Array< int , LvArray::DynamicExtent< 3 , std:: ptrdiff_t >, camp::idx_seq< 0 , 1 , 2 >, LvArray::MallocBuffer > x ( 3 , 4 , 5 );
435411
436412 // Out of bounds access aborts the program.
437413 EXPECT_DEATH_IF_SUPPORTED ( x ( 2 , 3 , 4 ), " " );
438414 EXPECT_DEATH_IF_SUPPORTED ( x ( -1 , 4 , 6 ), " " );
439415 EXPECT_DEATH_IF_SUPPORTED ( x[ 0 ][ 10 ][ 2 ], " " );
440416
441417 // Out of bounds emplace
442- LvArray::Array< int , 1 , camp::idx_seq< 0 >, std:: ptrdiff_t , LvArray::MallocBuffer > x ( 10 );
418+ LvArray::Array< int , LvArray::DynamicExtent< 1 , std:: ptrdiff_t >, camp::idx_seq< 0 >, LvArray::MallocBuffer > x ( 10 );
443419 EXPECT_DEATH_IF_SUPPORTED ( x.emplace ( -1 , 5 ) );
444420#endif
445421}
0 commit comments