@@ -33,6 +33,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3333#include < ginkgo/core/base/array.hpp>
3434
3535
36+ #include < algorithm>
37+
38+
3639#include < gtest/gtest.h>
3740
3841
@@ -284,14 +287,43 @@ TYPED_TEST(Array, CanBeResized)
284287}
285288
286289
287- TYPED_TEST (Array, VewCanBeResetNotResized )
290+ TYPED_TEST (Array, ViewCannotBeResized )
288291{
289292 TypeParam data[] = {1 , 2 , 3 };
290293 auto view = gko::Array<TypeParam>::view (this ->exec , 3 , data);
291- view.resize_and_reset (1 );
292294
293- EXPECT_EQ (view.get_const_data (), nullptr );
294- ASSERT_EQ (view.get_num_elems (), 1 );
295+ EXPECT_THROW (view.resize_and_reset (1 ), gko::NotSupported);
296+ EXPECT_EQ (view.get_num_elems (), 3 );
297+ ASSERT_EQ (view.get_data ()[0 ], TypeParam{1 });
298+ }
299+
300+
301+ template <typename T>
302+ class my_null_deleter {
303+ public:
304+ using pointer = T *;
305+
306+ void operator ()(pointer) const noexcept {}
307+ };
308+
309+ template <typename T>
310+ class my_null_deleter <T[]> {
311+ public:
312+ using pointer = T[];
313+
314+ void operator ()(pointer) const noexcept {}
315+ };
316+
317+
318+ TYPED_TEST (Array, CustomDeleterCannotBeResized)
319+ {
320+ TypeParam data[] = {1 , 2 , 3 };
321+ auto view_custom_deleter = gko::Array<TypeParam>(
322+ this ->exec , 3 , data, my_null_deleter<TypeParam[]>{});
323+
324+ EXPECT_THROW (view_custom_deleter.resize_and_reset (1 ), gko::NotSupported);
325+ EXPECT_EQ (view_custom_deleter.get_num_elems (), 3 );
326+ ASSERT_EQ (view_custom_deleter.get_data ()[0 ], TypeParam{1 });
295327}
296328
297329
@@ -342,6 +374,7 @@ TYPED_TEST(Array, CopyArrayToArray)
342374 EXPECT_EQ (array.get_data ()[2 ], TypeParam{2 });
343375 EXPECT_EQ (array.get_data ()[3 ], TypeParam{1 });
344376 EXPECT_EQ (array.get_num_elems (), 4 );
377+ EXPECT_NE (array.get_data (), array2.get_data ());
345378 ASSERT_EQ (array2.get_num_elems (), 4 );
346379}
347380
@@ -363,6 +396,7 @@ TYPED_TEST(Array, CopyViewToView)
363396 EXPECT_EQ (data[2 ], TypeParam{2 });
364397 EXPECT_EQ (view.get_num_elems (), 3 );
365398 EXPECT_EQ (view2.get_num_elems (), 3 );
399+ EXPECT_EQ (view2.get_data ()[0 ], TypeParam{2 });
366400 ASSERT_THROW (view2 = view_size4, gko::OutOfBoundsError);
367401}
368402
@@ -407,9 +441,11 @@ TYPED_TEST(Array, MoveArrayToArray)
407441{
408442 gko::Array<TypeParam> array (this ->exec , {1 , 2 , 3 });
409443 gko::Array<TypeParam> array2 (this ->exec , {5 , 4 , 2 , 1 });
444+ auto data2 = array2.get_data ();
410445
411446 array = std::move (array2);
412447
448+ EXPECT_EQ (array.get_data (), data2);
413449 EXPECT_EQ (array.get_data ()[0 ], TypeParam{5 });
414450 EXPECT_EQ (array.get_data ()[1 ], TypeParam{4 });
415451 EXPECT_EQ (array.get_data ()[2 ], TypeParam{2 });
@@ -435,7 +471,12 @@ TYPED_TEST(Array, MoveViewToView)
435471 EXPECT_EQ (view.get_data ()[2 ], TypeParam{2 });
436472 EXPECT_EQ (view.get_num_elems (), 3 );
437473 EXPECT_EQ (view2.get_data (), nullptr );
438- ASSERT_EQ (view2.get_num_elems (), 0 );
474+ EXPECT_EQ (view2.get_num_elems (), 0 );
475+ EXPECT_NE (data, nullptr );
476+ EXPECT_EQ (data[0 ], TypeParam{1 });
477+ EXPECT_EQ (data[1 ], TypeParam{2 });
478+ EXPECT_EQ (data[2 ], TypeParam{3 });
479+ ASSERT_EQ (data[3 ], TypeParam{4 });
439480}
440481
441482
@@ -468,13 +509,18 @@ TYPED_TEST(Array, MoveArrayToView)
468509 auto view = gko::Array<TypeParam>::view (this ->exec , 3 , data);
469510 gko::Array<TypeParam> array_size2 (this ->exec , {5 , 4 });
470511 gko::Array<TypeParam> array_size4 (this ->exec , {5 , 4 , 2 , 1 });
512+ auto size2_ptr = array_size2.get_data ();
513+ auto size4_ptr = array_size4.get_data ();
471514
472515 view = std::move (array_size2);
473516
474517 EXPECT_EQ (view.get_data ()[0 ], TypeParam{5 });
475518 EXPECT_EQ (view.get_data ()[1 ], TypeParam{4 });
476519 EXPECT_EQ (view.get_num_elems (), 2 );
477- EXPECT_NO_THROW (view = array_size4);
520+ EXPECT_NE (view.get_data (), data);
521+ EXPECT_EQ (view.get_data (), size2_ptr);
522+ EXPECT_NO_THROW (view = std::move (array_size4));
523+ EXPECT_EQ (view.get_data (), size4_ptr);
478524 EXPECT_EQ (array_size2.get_data (), nullptr );
479525 ASSERT_EQ (array_size2.get_num_elems (), 0 );
480526}
0 commit comments