@@ -113,15 +113,43 @@ TEST_F(DataFileSetTest, AsSpan) {
113113 DataFileSet set;
114114 EXPECT_TRUE (set.as_span ().empty ());
115115
116+ // Single element
117+ auto file0 = CreateDataFile (" /path/to/file0.parquet" );
118+ set.insert (file0);
119+ {
120+ auto span = set.as_span ();
121+ EXPECT_EQ (span.size (), 1 );
122+ EXPECT_EQ (span[0 ]->file_path , " /path/to/file0.parquet" );
123+ EXPECT_EQ (span[0 ], file0); // Same pointer, span is a view
124+ }
125+
126+ // Multiple elements
116127 auto file1 = CreateDataFile (" /path/to/file1.parquet" );
117128 auto file2 = CreateDataFile (" /path/to/file2.parquet" );
118129 set.insert (file1);
119130 set.insert (file2);
120131
121132 auto span = set.as_span ();
122- EXPECT_EQ (span.size (), 2 );
123- EXPECT_EQ (span[0 ]->file_path , " /path/to/file1.parquet" );
124- EXPECT_EQ (span[1 ]->file_path , " /path/to/file2.parquet" );
133+ EXPECT_EQ (span.size (), 3 );
134+ EXPECT_EQ (span[0 ]->file_path , " /path/to/file0.parquet" );
135+ EXPECT_EQ (span[1 ]->file_path , " /path/to/file1.parquet" );
136+ EXPECT_EQ (span[2 ]->file_path , " /path/to/file2.parquet" );
137+
138+ // Span matches set iteration order and identity
139+ size_t i = 0 ;
140+ for (const auto & file : set) {
141+ EXPECT_EQ (span[i], file) << " Span element " << i << " should match set iterator" ;
142+ ++i;
143+ }
144+ EXPECT_EQ (i, span.size ());
145+
146+ // Span works with range-for
147+ i = 0 ;
148+ for (const auto & file : span) {
149+ EXPECT_EQ (file->file_path , span[i]->file_path );
150+ ++i;
151+ }
152+ EXPECT_EQ (i, 3 );
125153
126154 set.clear ();
127155 EXPECT_TRUE (set.as_span ().empty ());
0 commit comments