@@ -363,7 +363,7 @@ TYPED_TEST(BuffersTest, TestCalculateSize) // NOLINT
363363 }
364364}
365365
366- TYPED_TEST (BuffersTest, TestGetValueAndMeta ) // NOLINT
366+ TYPED_TEST (BuffersTest, TestGetSetValueAndMeta ) // NOLINT
367367{
368368 const int n = 2 ;
369369 const size_t size = 4 ;
@@ -374,7 +374,7 @@ TYPED_TEST(BuffersTest, TestGetValueAndMeta) // NOLINT
374374 (sizeof (TypeParam) == 1 ) ? 1 : size * sizeof (TypeParam) / CHAR_BIT);
375375
376376 // vector of meta buffers, as `meta_size` depends on TypeParam
377- std::vector<std::vector<uint8_t >> metas = {
377+ std::vector<std::vector<uint8_t >> compacted_metas = {
378378 // for TypeParam = uint8_t
379379 {0b1010 , 0b1111 },
380380 // for TypeParam = uint16_t
@@ -394,7 +394,7 @@ TYPED_TEST(BuffersTest, TestGetValueAndMeta) // NOLINT
394394
395395 // vector stores expected meta per elements. These values are respect to
396396 // `metas`
397- std::vector<std::vector<uint8_t >> expected_metas = {
397+ std::vector<std::vector<TypeParam >> expanded_metas = {
398398 // for TypeParam = uint8_t: each element has a meta of 1 bit
399399 {0b0 , 0b1 , 0b0 , 0b1 , 0b1 , 0b1 , 0b1 , 0b1 },
400400 // for TypeParam = uint16_t: each element has a meta of 2 bits
@@ -413,7 +413,7 @@ TYPED_TEST(BuffersTest, TestGetValueAndMeta) // NOLINT
413413 };
414414
415415 // data buffers
416- std::vector<std::vector<TypeParam>> values = {
416+ std::vector<std::vector<TypeParam>> packed_values = {
417417 // for TypeParam = uint8_t
418418 {0x42 , 0x51 , 0x19 , 0x3a , 0xab , 0xdf , 0x1c , 0xa1 },
419419 // for TypeParam = uint16_t
@@ -451,7 +451,7 @@ TYPED_TEST(BuffersTest, TestGetValueAndMeta) // NOLINT
451451 } unpack;
452452
453453 // vector stores expected unpacked elements
454- std::vector<std::vector<unpack>> expected_unpacked_values = {
454+ std::vector<std::vector<unpack>> unpacked_values = {
455455 // for TypeParam = uint8_t: for each half part
456456 // - first 4 bits from meta
457457 // - last 4 bits from data
@@ -508,18 +508,19 @@ TYPED_TEST(BuffersTest, TestGetValueAndMeta) // NOLINT
508508
509509 const size_t id = quadiron::arith::log2<TypeParam>(sizeof (TypeParam));
510510
511- const std::vector<TypeParam*> mem = {values [id].data (),
512- values [id].data () + size};
513- const std::vector<uint8_t *> meta = {metas [id].data (),
514- metas [id].data () + meta_size};
511+ const std::vector<TypeParam*> mem = {packed_values [id].data (),
512+ packed_values [id].data () + size};
513+ const std::vector<uint8_t *> meta = {compacted_metas [id].data (),
514+ compacted_metas [id].data () + meta_size};
515515
516- vec::Buffers<TypeParam> buf (n, size, mem, &meta);
516+ // For checking get functions
517+ vec::Buffers<TypeParam> buf1 (n, size, mem, &meta);
517518
518519 // check get_meta
519520 for (int i = 0 ; i < n; ++i) {
520521 for (size_t j = 0 ; j < size; ++j) {
521- const TypeParam got = buf .get_meta (i, j);
522- const TypeParam expected = expected_metas [id][i * size + j];
522+ const TypeParam got = buf1 .get_meta (i, j);
523+ const TypeParam expected = expanded_metas [id][i * size + j];
523524 ASSERT_EQ (expected, got);
524525 }
525526 }
@@ -528,10 +529,41 @@ TYPED_TEST(BuffersTest, TestGetValueAndMeta) // NOLINT
528529 for (int i = 0 ; i < n; ++i) {
529530 for (size_t j = 0 ; j < size; ++j) {
530531 TypeParam hi, lo;
531- buf .get (i, j, hi, lo);
532- const unpack expected = expected_unpacked_values [id][i * size + j];
532+ buf1 .get (i, j, hi, lo);
533+ const unpack expected = unpacked_values [id][i * size + j];
533534 ASSERT_EQ (expected.hi , hi);
534535 ASSERT_EQ (expected.lo , lo);
535536 }
536537 }
538+
539+ // For checking set functions
540+ vec::Buffers<TypeParam> buf2 (n, size, true );
541+
542+ // set meta & check
543+ for (int i = 0 ; i < n; ++i) {
544+ for (size_t j = 0 ; j < size; ++j) {
545+ const TypeParam m_val = expanded_metas[id][i * size + j];
546+ buf2.set_meta (i, j, m_val);
547+ ASSERT_EQ (m_val, buf2.get_meta (i, j));
548+ }
549+ const uint8_t * got = buf2.get_meta (i);
550+ const uint8_t * expected = compacted_metas[id].data ();
551+ ASSERT_EQ (compacted_metas[id].size (), n * meta_size);
552+ ASSERT_TRUE (std::equal (got, got + meta_size, expected + i * meta_size));
553+ }
554+
555+ // set unpack element & check
556+ for (int i = 0 ; i < n; ++i) {
557+ for (size_t j = 0 ; j < size; ++j) {
558+ unpack p = unpacked_values[id][i * size + j];
559+ buf2.set (i, j, p.hi , p.lo );
560+ TypeParam hi, lo;
561+ buf2.get (i, j, hi, lo);
562+ ASSERT_EQ (p.hi , hi);
563+ ASSERT_EQ (p.lo , lo);
564+ }
565+ const TypeParam* got = buf2.get (i);
566+ const TypeParam* expected = packed_values[id].data ();
567+ ASSERT_TRUE (std::equal (got, got + size, expected + i * size));
568+ }
537569}
0 commit comments