@@ -31,9 +31,8 @@ TEST( Array, constructors )
31
31
{
32
32
// Create an empty 2D array of integers.
33
33
LvArray::Array< int ,
34
- 2 ,
34
+ LvArray::DynamicExtent< 2 , std:: ptrdiff_t > ,
35
35
camp::idx_seq< 0 , 1 >,
36
- std::ptrdiff_t ,
37
36
LvArray::MallocBuffer > array;
38
37
EXPECT_TRUE ( array.empty () );
39
38
EXPECT_EQ ( array.size (), 0 );
@@ -44,9 +43,8 @@ TEST( Array, constructors )
44
43
{
45
44
// Create a 3D array of std::string of size 3 x 4 x 5.
46
45
LvArray::Array< std::string,
47
- 3 ,
46
+ LvArray::DynamicExtent< 3 , std:: ptrdiff_t > ,
48
47
camp::idx_seq< 0 , 1 , 2 >,
49
- std::ptrdiff_t ,
50
48
LvArray::MallocBuffer > array ( 3 , 4 , 5 );
51
49
EXPECT_FALSE ( array.empty () );
52
50
EXPECT_EQ ( array.size (), 3 * 4 * 5 );
@@ -69,9 +67,8 @@ TEST( Array, accessors )
69
67
{
70
68
// Create a 2D array of integers.
71
69
LvArray::Array< int ,
72
- 2 ,
70
+ LvArray::DynamicExtent< 2 , std:: ptrdiff_t > ,
73
71
camp::idx_seq< 0 , 1 >,
74
- std::ptrdiff_t ,
75
72
LvArray::MallocBuffer > array ( 3 , 4 );
76
73
77
74
// Access using operator().
@@ -100,15 +97,14 @@ TEST( Array, permutations )
100
97
{
101
98
// Create a 3D array of doubles in the standard layout.
102
99
LvArray::Array< int ,
103
- 3 ,
100
+ LvArray::DynamicExtent< 3 , std:: ptrdiff_t > ,
104
101
camp::idx_seq< 0 , 1 , 2 >,
105
- std::ptrdiff_t ,
106
102
LvArray::MallocBuffer > array ( 3 , 4 , 5 );
107
103
108
104
// 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 );
112
108
113
109
int const * const pointer = array.data ();
114
110
for ( std::ptrdiff_t i = 0 ; i < array.size ( 0 ); ++i )
@@ -128,15 +124,14 @@ TEST( Array, permutations )
128
124
{
129
125
// Create a 3D array of doubles in a flipped layout.
130
126
LvArray::Array< int ,
131
- 3 ,
127
+ LvArray::DynamicExtent< 3 , std:: ptrdiff_t > ,
132
128
camp::idx_seq< 2 , 1 , 0 >,
133
- std::ptrdiff_t ,
134
129
LvArray::MallocBuffer > array ( 3 , 4 , 5 );
135
130
136
131
// 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 ) );
140
135
141
136
int const * const pointer = array.data ();
142
137
for ( std::ptrdiff_t i = 0 ; i < array.size ( 0 ); ++i )
@@ -159,9 +154,8 @@ TEST( Array, permutations )
159
154
TEST ( Array, resize )
160
155
{
161
156
LvArray::Array< int ,
162
- 3 ,
157
+ LvArray::DynamicExtent< 3 , std:: ptrdiff_t > ,
163
158
camp::idx_seq< 0 , 1 , 2 >,
164
- std::ptrdiff_t ,
165
159
LvArray::MallocBuffer > array;
166
160
167
161
// Resize using a pointer
@@ -192,9 +186,8 @@ TEST( Array, resize )
192
186
TEST ( Array, resizeSingleDimension )
193
187
{
194
188
LvArray::Array< int ,
195
- 2 ,
189
+ LvArray::DynamicExtent< 2 , std:: ptrdiff_t > ,
196
190
camp::idx_seq< 1 , 0 >,
197
- std::ptrdiff_t ,
198
191
LvArray::MallocBuffer > array ( 5 , 6 );
199
192
200
193
for ( std::ptrdiff_t i = 0 ; i < array.size ( 0 ); ++i )
@@ -223,8 +216,7 @@ TEST( Array, resizeSingleDimension )
223
216
}
224
217
225
218
// Shrink the second dimension from 6 to 3;
226
- array.setSingleParameterResizeIndex ( 1 );
227
- array.resize ( 3 );
219
+ array.resizeDimension < 1 >( 3 );
228
220
for ( std::ptrdiff_t i = 0 ; i < array.size ( 0 ); ++i )
229
221
{
230
222
for ( std::ptrdiff_t j = 0 ; j < array.size ( 1 ); ++j )
@@ -246,32 +238,25 @@ TEST( Array, resizeSingleDimension )
246
238
TEST ( Array, arrayView )
247
239
{
248
240
LvArray::Array< int ,
249
- 2 ,
241
+ LvArray::DynamicExtent< 2 , std:: ptrdiff_t > ,
250
242
camp::idx_seq< 1 , 0 >,
251
- std::ptrdiff_t ,
252
243
LvArray::MallocBuffer > array ( 5 , 6 );
253
244
254
245
// Create a view.
255
246
LvArray::ArrayView< int ,
256
- 2 ,
257
- 0 ,
258
- std::ptrdiff_t ,
247
+ LvArray::DynamicLayout< 2 , std::ptrdiff_t , camp::idx_seq< 1 , 0 > >,
259
248
LvArray::MallocBuffer > const view = array;
260
249
EXPECT_EQ ( view.data (), array.data () );
261
250
262
251
// Create a view with const values.
263
252
LvArray::ArrayView< int const ,
264
- 2 ,
265
- 0 ,
266
- std::ptrdiff_t ,
253
+ LvArray::DynamicLayout< 2 , std::ptrdiff_t , camp::idx_seq< 1 , 0 > >,
267
254
LvArray::MallocBuffer > const viewConst = array.toViewConst ();
268
255
EXPECT_EQ ( viewConst.data (), array.data () );
269
256
270
257
// Copy a view.
271
258
LvArray::ArrayView< int ,
272
- 2 ,
273
- 0 ,
274
- std::ptrdiff_t ,
259
+ LvArray::DynamicLayout< 2 , std::ptrdiff_t , camp::idx_seq< 1 , 0 > >,
275
260
LvArray::MallocBuffer > const viewCopy = view;
276
261
EXPECT_EQ ( viewCopy.data (), array.data () );
277
262
}
@@ -282,17 +267,14 @@ TEST( Array, arraySlice )
282
267
{
283
268
{
284
269
LvArray::Array< int ,
285
- 2 ,
270
+ LvArray::DynamicExtent< 2 , std:: ptrdiff_t > ,
286
271
camp::idx_seq< 0 , 1 >,
287
- std::ptrdiff_t ,
288
272
LvArray::MallocBuffer > array ( 5 , 6 );
289
273
290
274
// The unit stride dimension of array is 1 so when we slice off
291
275
// the first dimension the unit stride dimension of the slice is 0.
292
276
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 ];
296
278
EXPECT_TRUE ( slice.isContiguous () );
297
279
EXPECT_EQ ( slice.size (), 6 );
298
280
EXPECT_EQ ( slice.size ( 0 ), 6 );
@@ -301,17 +283,14 @@ TEST( Array, arraySlice )
301
283
302
284
{
303
285
LvArray::Array< int ,
304
- 3 ,
286
+ LvArray::DynamicExtent< 3 , std:: ptrdiff_t > ,
305
287
camp::idx_seq< 2 , 1 , 0 >,
306
- std::ptrdiff_t ,
307
288
LvArray::MallocBuffer > array ( 3 , 5 , 6 );
308
289
309
290
// The unit stride dimension of array is 0 so when we slice off
310
291
// the first dimension the unit stride dimension of the slice is -1.
311
292
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 ];
315
294
EXPECT_FALSE ( slice.isContiguous () );
316
295
EXPECT_EQ ( slice.size (), 5 * 6 );
317
296
EXPECT_EQ ( slice.size ( 0 ), 5 );
@@ -326,9 +305,8 @@ TEST( Array, arraySlice )
326
305
CUDA_TEST ( Array, chaiBuffer )
327
306
{
328
307
LvArray::Array< int ,
329
- 2 ,
308
+ LvArray::DynamicExtent< 2 , std:: ptrdiff_t > ,
330
309
camp::idx_seq< 1 , 0 >,
331
- std::ptrdiff_t ,
332
310
LvArray::ChaiBuffer > array ( 5 , 6 );
333
311
334
312
// Move the array to the device.
@@ -344,9 +322,7 @@ CUDA_TEST( Array, chaiBuffer )
344
322
);
345
323
346
324
LvArray::ArrayView< int ,
347
- 2 ,
348
- 0 ,
349
- std::ptrdiff_t ,
325
+ LvArray::DynamicLayout< 2 , std::ptrdiff_t , camp::idx_seq< 1 , 0 > >,
350
326
LvArray::ChaiBuffer > const & view = array;
351
327
352
328
// Capture the view in a host kernel which moves the data back to the host.
@@ -364,9 +340,8 @@ CUDA_TEST( Array, chaiBuffer )
364
340
TEST ( Array, setName )
365
341
{
366
342
LvArray::Array< int ,
367
- 2 ,
343
+ LvArray::DynamicExtent< 2 , std:: ptrdiff_t > ,
368
344
camp::idx_seq< 1 , 0 >,
369
- std::ptrdiff_t ,
370
345
LvArray::ChaiBuffer > array ( 1024 , 1024 );
371
346
372
347
// Move the array to the device.
@@ -381,8 +356,8 @@ TEST( Array, setName )
381
356
#endif
382
357
383
358
// 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 )
386
361
{
387
362
int value = 0 ;
388
363
for ( int const val : slice )
@@ -395,8 +370,8 @@ int sum( LvArray::ArraySlice< int const, NDIM, USD, std::ptrdiff_t > const slice
395
370
// Sphinx end before sum int
396
371
397
372
// 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 )
400
375
{
401
376
double value = 0 ;
402
377
LvArray::forValuesInSlice ( slice, [&value] ( double const val )
@@ -409,11 +384,12 @@ double sum( LvArray::ArraySlice< double const, NDIM, USD, std::ptrdiff_t > const
409
384
// Sphinx end before sum double
410
385
411
386
// 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 )
415
390
{
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 )
417
393
{
418
394
LVARRAY_ERROR_IF_NE ( dst.size ( dim ), src.size ( dim ) );
419
395
}
@@ -431,15 +407,15 @@ void copy( LvArray::ArraySlice< int, NDIM, DST_USD, std::ptrdiff_t > const dst,
431
407
TEST ( Array, boundsCheck )
432
408
{
433
409
#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 );
435
411
436
412
// Out of bounds access aborts the program.
437
413
EXPECT_DEATH_IF_SUPPORTED ( x ( 2 , 3 , 4 ), " " );
438
414
EXPECT_DEATH_IF_SUPPORTED ( x ( -1 , 4 , 6 ), " " );
439
415
EXPECT_DEATH_IF_SUPPORTED ( x[ 0 ][ 10 ][ 2 ], " " );
440
416
441
417
// 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 );
443
419
EXPECT_DEATH_IF_SUPPORTED ( x.emplace ( -1 , 5 ) );
444
420
#endif
445
421
}
0 commit comments