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