|
22 | 22 | #include "gtest/gtest.h" |
23 | 23 | #include "absl/types/span.h" |
24 | 24 | #include "arolla/dense_array/dense_array.h" |
| 25 | +#include "arolla/qtype/qtype_traits.h" |
25 | 26 | #include "arolla/util/bytes.h" |
26 | 27 | #include "arolla/util/text.h" |
27 | 28 | #include "koladata/internal/data_bag.h" |
@@ -1081,5 +1082,63 @@ TEST_P(DeepCloneTest, SchemaMetadata_SchemaSlice) { |
1081 | 1082 | EXPECT_THAT(result_db, DataBagEqual(*expected_db)); |
1082 | 1083 | } |
1083 | 1084 |
|
| 1085 | +TEST_P(DeepCloneTest, SparseSliceWithItemIds) { |
| 1086 | + const int64_t ds_size = 4; |
| 1087 | + |
| 1088 | + auto db = DataBagImpl::CreateEmptyDatabag(); |
| 1089 | + auto ds2 = DataSliceImpl::AllocateEmptyObjects(ds_size); |
| 1090 | + auto ds3 = DataSliceImpl::AllocateEmptyObjects(ds_size); |
| 1091 | + ASSERT_OK_AND_ASSIGN( |
| 1092 | + auto schemas2, |
| 1093 | + CreateUuidWithMainObject<internal::ObjectId::kUuidImplicitSchemaFlag>( |
| 1094 | + ds2, schema::kImplicitSchemaSeed)); |
| 1095 | + ASSERT_OK(db->SetAttr(ds2, schema::kSchemaAttr, schemas2)); |
| 1096 | + |
| 1097 | + ASSERT_OK(db->SetSchemaAttr(schemas2, "a", DataItem(schema::kItemId))); |
| 1098 | + ASSERT_OK(db->SetSchemaAttr(schemas2, "b", DataItem(schema::kItemId))); |
| 1099 | + ASSERT_OK(db->SetAttr(ds2[2], "a", ds3[0])); |
| 1100 | + ASSERT_OK(db->SetAttr(ds2[3], "a", ds3[1])); |
| 1101 | + SetSchemaTriples(*db, GenSchemaTriplesFoTests()); |
| 1102 | + SetDataTriples(*db, GenDataTriplesForTest()); |
| 1103 | + |
| 1104 | + auto result_db = DataBagImpl::CreateEmptyDatabag(); |
| 1105 | + ASSERT_OK_AND_ASSIGN( |
| 1106 | + auto result, |
| 1107 | + DeepCloneOp(result_db.get())(ds2, DataItem(schema::kObject), |
| 1108 | + *GetMainDb(db), {GetFallbackDb(db).get()})); |
| 1109 | + |
| 1110 | + EXPECT_EQ(result.present_count(), 4); |
| 1111 | + EXPECT_TRUE(result.dtype() == arolla::GetQType<ObjectId>()); |
| 1112 | + ASSERT_OK_AND_ASSIGN(auto result_inner0, result_db->GetAttr(result[2], "a")); |
| 1113 | + ASSERT_OK_AND_ASSIGN(auto result_inner1, result_db->GetAttr(result[3], "a")); |
| 1114 | + ASSERT_OK_AND_ASSIGN( |
| 1115 | + auto result_schemas, |
| 1116 | + CreateUuidWithMainObject<internal::ObjectId::kUuidImplicitSchemaFlag>( |
| 1117 | + result, schema::kImplicitSchemaSeed)); |
| 1118 | + EXPECT_EQ(result_schemas.present_count(), 4); |
| 1119 | + |
| 1120 | + auto expected_db = DataBagImpl::CreateEmptyDatabag(); |
| 1121 | + ASSERT_OK(expected_db->SetAttr(result, schema::kSchemaAttr, result_schemas)); |
| 1122 | + TriplesT expected_data_triples = { |
| 1123 | + {result[0], {{"a", DataItem()}, {"b", DataItem()}}}, |
| 1124 | + {result[1], {{"a", DataItem()}, {"b", DataItem()}}}, |
| 1125 | + {result[2], {{"a", result_inner0}, {"b", DataItem()}}}, |
| 1126 | + {result[3], {{"a", result_inner1}, {"b", DataItem()}}}, |
| 1127 | + }; |
| 1128 | + TriplesT expected_schema_triples = { |
| 1129 | + {result_schemas[0], |
| 1130 | + {{"a", DataItem(schema::kItemId)}, {"b", DataItem(schema::kItemId)}}}, |
| 1131 | + {result_schemas[1], |
| 1132 | + {{"a", DataItem(schema::kItemId)}, {"b", DataItem(schema::kItemId)}}}, |
| 1133 | + {result_schemas[2], |
| 1134 | + {{"a", DataItem(schema::kItemId)}, {"b", DataItem(schema::kItemId)}}}, |
| 1135 | + {result_schemas[3], |
| 1136 | + {{"a", DataItem(schema::kItemId)}, {"b", DataItem(schema::kItemId)}}}, |
| 1137 | + }; |
| 1138 | + SetDataTriples(*expected_db, expected_data_triples); |
| 1139 | + SetSchemaTriples(*expected_db, expected_schema_triples); |
| 1140 | + EXPECT_THAT(result_db, DataBagEqual(*expected_db)); |
| 1141 | +} |
| 1142 | + |
1084 | 1143 | } // namespace |
1085 | 1144 | } // namespace koladata::internal |
0 commit comments