@@ -439,32 +439,47 @@ TEST(DataBagTest, SetGetWithFallbackObjectId) {
439439 }
440440
441441 // General case
442+ std::vector<arolla::OptionalValue<ObjectId>> main_b_ids (size);
442443 std::vector<arolla::OptionalValue<ObjectId>> main_b_values (size);
444+ std::vector<arolla::OptionalValue<ObjectId>> fallback_b_ids (size);
443445 std::vector<arolla::OptionalValue<ObjectId>> fallback_b_values (size);
444446 std::vector<arolla::OptionalValue<ObjectId>> merge_b_values (size);
445447 AllocationId alloc_b1 = Allocate (size);
446448 AllocationId alloc_b2 = Allocate (size);
447449 for (size_t i = 0 ; i < size; ++i) {
448450 ObjectId id1 = alloc_b1.ObjectByOffset (i);
449451 ObjectId id2 = alloc_b2.ObjectByOffset (i);
450- if (i % 4 == 0 ) {
452+ if (int group = i % 5 ; group == 0 ) {
453+ main_b_ids[i] = ds[i].value <ObjectId>();
451454 main_b_values[i] = id1;
452455 merge_b_values[i] = id1;
453- } else if (i % 4 == 1 ) {
456+ } else if (group == 1 ) {
457+ fallback_b_ids[i] = ds[i].value <ObjectId>();
454458 fallback_b_values[i] = id2;
455459 merge_b_values[i] = id2;
456- } else if (i % 4 == 2 ) {
460+ } else if (group == 2 ) {
461+ main_b_ids[i] = ds[i].value <ObjectId>();
457462 main_b_values[i] = id1;
463+ fallback_b_ids[i] = ds[i].value <ObjectId>();
458464 fallback_b_values[i] = id2;
459465 merge_b_values[i] = id1;
466+ } else if (group == 3 ) {
467+ // Note: main_b_values contains removed values, fallback not used
468+ main_b_ids[i] = ds[i].value <ObjectId>();
469+ fallback_b_ids[i] = ds[i].value <ObjectId>();
470+ fallback_b_values[i] = id2;
460471 }
461472 }
473+ auto main_ds_ids_b = DataSliceImpl::Create (
474+ arolla::CreateDenseArray<ObjectId>(main_b_ids));
462475 auto main_ds_b = DataSliceImpl::Create (
463476 arolla::CreateDenseArray<ObjectId>(main_b_values));
464- ASSERT_OK (db->SetAttr (ds, " b" , main_ds_b));
477+ ASSERT_OK (db->SetAttr (main_ds_ids_b, " b" , main_ds_b));
478+ auto fallback_ds_ids_b = DataSliceImpl::Create (
479+ arolla::CreateDenseArray<ObjectId>(fallback_b_ids));
465480 auto fallback_ds_b = DataSliceImpl::Create (
466481 arolla::CreateDenseArray<ObjectId>(fallback_b_values));
467- ASSERT_OK (db_f->SetAttr (ds , " b" , fallback_ds_b));
482+ ASSERT_OK (db_f->SetAttr (fallback_ds_ids_b , " b" , fallback_ds_b));
468483 ASSERT_OK_AND_ASSIGN (DataSliceImpl ds_b_get,
469484 db->GetAttr (ds, " b" , {db_f.get ()}));
470485 auto merge_ds_b = DataSliceImpl::Create (
@@ -526,7 +541,7 @@ TEST(DataBagTest, SetGetWithFallbackPrimitive) {
526541 merge_b_values[i] = val1;
527542 } else if (i % 4 == 1 ) {
528543 fallback_b_values[i] = val2;
529- merge_b_values[i] = val2;
544+ // Note: main_b_values contains removed values, fallback not used
530545 } else if (i % 4 == 2 ) {
531546 main_b_values[i] = val1;
532547 fallback_b_values[i] = val2;
@@ -559,31 +574,42 @@ TEST(DataBagTest, SetGetWithFallbackPrimitiveMixedType) {
559574 for (size_t size : {1 , 2 , 4 , 17 , 126 }) {
560575 auto ds = DataSliceImpl::AllocateEmptyObjects (size);
561576
577+ std::vector<arolla::OptionalValue<ObjectId>> main_b_ids (size);
562578 std::vector<arolla::OptionalValue<int64_t >> main_b_values (size);
579+ std::vector<arolla::OptionalValue<ObjectId>> fallback_b_ids (size);
563580 std::vector<arolla::OptionalValue<double >> fallback_b_values (size);
581+
564582 std::vector<arolla::OptionalValue<int64_t >> merge_b_values_int64 (size);
565583 std::vector<arolla::OptionalValue<double >> merge_b_values_double (size);
566584 for (size_t i = 0 ; i < size; ++i) {
567585 int64_t val1 = i + 1 ;
568586 double val2 = -i - 1 ;
569587 if (i % 4 == 0 ) {
588+ main_b_ids[i] = ds[i].value <ObjectId>();
570589 main_b_values[i] = val1;
571590 merge_b_values_int64[i] = val1;
572591 } else if (i % 4 == 1 ) {
592+ fallback_b_ids[i] = ds[i].value <ObjectId>();
573593 fallback_b_values[i] = val2;
574594 merge_b_values_double[i] = val2;
575595 } else if (i % 4 == 2 ) {
596+ main_b_ids[i] = ds[i].value <ObjectId>();
597+ fallback_b_ids[i] = ds[i].value <ObjectId>();
576598 main_b_values[i] = val1;
577599 fallback_b_values[i] = val2;
578600 merge_b_values_int64[i] = val1;
579601 }
580602 }
603+ auto main_ds_ids_b =
604+ DataSliceImpl::Create (arolla::CreateDenseArray<ObjectId>(main_b_ids));
581605 auto main_ds_b =
582606 DataSliceImpl::Create (arolla::CreateDenseArray<int64_t >(main_b_values));
583- ASSERT_OK (db->SetAttr (ds, " b" , main_ds_b));
607+ ASSERT_OK (db->SetAttr (main_ds_ids_b, " b" , main_ds_b));
608+ auto fallback_ds_ids_b = DataSliceImpl::Create (
609+ arolla::CreateDenseArray<ObjectId>(fallback_b_ids));
584610 auto fallback_ds_b = DataSliceImpl::Create (
585611 arolla::CreateDenseArray<double >(fallback_b_values));
586- ASSERT_OK (db_f->SetAttr (ds , " b" , fallback_ds_b));
612+ ASSERT_OK (db_f->SetAttr (fallback_ds_ids_b , " b" , fallback_ds_b));
587613 ASSERT_OK_AND_ASSIGN (DataSliceImpl ds_b_get,
588614 db->GetAttr (ds, " b" , {db_f.get ()}));
589615 auto merge_ds_b = DataSliceImpl::Create (
0 commit comments