@@ -202,4 +202,99 @@ TEST_F(NameMappingTest, ToString) {
202202 }
203203}
204204
205+ TEST (CreateMappingTest, FlatSchemaToMapping) {
206+ Schema schema (std::vector<SchemaField>{
207+ SchemaField::MakeRequired (1 , " id" , std::make_shared<LongType>()),
208+ SchemaField::MakeRequired (2 , " data" , std::make_shared<StringType>()),
209+ });
210+
211+ auto expected = MappedFields::Make ({
212+ MappedField{.names = {" id" }, .field_id = 1 },
213+ MappedField{.names = {" data" }, .field_id = 2 },
214+ });
215+
216+ auto result = CreateMapping (schema);
217+ ASSERT_TRUE (result.has_value ());
218+ EXPECT_EQ (result.value ()->AsMappedFields (), *expected);
219+ }
220+
221+ TEST (CreateMappingTest, NestedStructSchemaToMapping) {
222+ Schema schema (std::vector<SchemaField>{
223+ SchemaField::MakeRequired (1 , " id" , std::make_shared<LongType>()),
224+ SchemaField::MakeRequired (2 , " data" , std::make_shared<StringType>()),
225+ SchemaField::MakeRequired (
226+ 3 , " location" ,
227+ std::make_shared<StructType>(std::vector<SchemaField>{
228+ SchemaField::MakeRequired (4 , " latitude" , std::make_shared<FloatType>()),
229+ SchemaField::MakeRequired (5 , " longitude" , std::make_shared<FloatType>()),
230+ })),
231+ });
232+
233+ auto expected = MappedFields::Make ({
234+ MappedField{.names = {" id" }, .field_id = 1 },
235+ MappedField{.names = {" data" }, .field_id = 2 },
236+ MappedField{.names = {" location" },
237+ .field_id = 3 ,
238+ .nested_mapping = MappedFields::Make ({
239+ MappedField{.names = {" latitude" }, .field_id = 4 },
240+ MappedField{.names = {" longitude" }, .field_id = 5 },
241+ })},
242+ });
243+
244+ auto result = CreateMapping (schema);
245+ ASSERT_TRUE (result.has_value ());
246+ EXPECT_EQ (result.value ()->AsMappedFields (), *expected);
247+ }
248+
249+ TEST (CreateMappingTest, MapSchemaToMapping) {
250+ Schema schema (std::vector<SchemaField>{
251+ SchemaField::MakeRequired (1 , " id" , std::make_shared<LongType>()),
252+ SchemaField::MakeRequired (2 , " data" , std::make_shared<StringType>()),
253+ SchemaField::MakeRequired (
254+ 3 , " map" ,
255+ std::make_shared<MapType>(
256+ SchemaField::MakeRequired (4 , " key" , std::make_shared<StringType>()),
257+ SchemaField::MakeRequired (5 , " value" , std::make_shared<DoubleType>()))),
258+ });
259+
260+ auto expected = MappedFields::Make ({
261+ MappedField{.names = {" id" }, .field_id = 1 },
262+ MappedField{.names = {" data" }, .field_id = 2 },
263+ MappedField{.names = {" map" },
264+ .field_id = 3 ,
265+ .nested_mapping = MappedFields::Make ({
266+ MappedField{.names = {" key" }, .field_id = 4 },
267+ MappedField{.names = {" value" }, .field_id = 5 },
268+ })},
269+ });
270+
271+ auto result = CreateMapping (schema);
272+ ASSERT_TRUE (result.has_value ());
273+ EXPECT_EQ (result.value ()->AsMappedFields (), *expected);
274+ }
275+
276+ TEST (CreateMappingTest, ListSchemaToMapping) {
277+ Schema schema (std::vector<SchemaField>{
278+ SchemaField::MakeRequired (1 , " id" , std::make_shared<LongType>()),
279+ SchemaField::MakeRequired (2 , " data" , std::make_shared<StringType>()),
280+ SchemaField::MakeRequired (3 , " list" ,
281+ std::make_shared<ListType>(SchemaField::MakeRequired (
282+ 4 , " element" , std::make_shared<StringType>()))),
283+ });
284+
285+ auto expected = MappedFields::Make ({
286+ MappedField{.names = {" id" }, .field_id = 1 },
287+ MappedField{.names = {" data" }, .field_id = 2 },
288+ MappedField{.names = {" list" },
289+ .field_id = 3 ,
290+ .nested_mapping = MappedFields::Make ({
291+ MappedField{.names = {" element" }, .field_id = 4 },
292+ })},
293+ });
294+
295+ auto result = CreateMapping (schema);
296+ ASSERT_TRUE (result.has_value ());
297+ EXPECT_EQ (result.value ()->AsMappedFields (), *expected);
298+ }
299+
205300} // namespace iceberg
0 commit comments