From 84e4bb47542348097eb423cc8787b2806b489905 Mon Sep 17 00:00:00 2001 From: Vukasin Milovanovic Date: Thu, 11 Jan 2024 15:32:57 -0800 Subject: [PATCH 1/4] slightly conservative test sizes --- cpp/tests/io/parquet_misc_test.cpp | 5 +-- cpp/tests/io/parquet_reader_test.cpp | 40 +++++++++-------- cpp/tests/io/parquet_v2_test.cpp | 65 +++------------------------- cpp/tests/io/parquet_writer_test.cpp | 7 +-- 4 files changed, 35 insertions(+), 82 deletions(-) diff --git a/cpp/tests/io/parquet_misc_test.cpp b/cpp/tests/io/parquet_misc_test.cpp index 49b6b8fd259..75cd5726d1e 100644 --- a/cpp/tests/io/parquet_misc_test.cpp +++ b/cpp/tests/io/parquet_misc_test.cpp @@ -138,9 +138,8 @@ TEST_P(ParquetSizedTest, DictionaryTest) unsigned int const cardinality = (1 << (GetParam() - 1)) + 1; unsigned int const nrows = std::max(cardinality * 3 / 2, 3'000'000U); - auto elements = cudf::detail::make_counting_transform_iterator(0, [cardinality](auto i) { - return "a unique string value suffixed with " + std::to_string(i % cardinality); - }); + auto elements = cudf::detail::make_counting_transform_iterator( + 0, [cardinality](auto i) { return std::to_string(i % cardinality); }); auto const col0 = cudf::test::strings_column_wrapper(elements, elements + nrows); auto const expected = table_view{{col0}}; diff --git a/cpp/tests/io/parquet_reader_test.cpp b/cpp/tests/io/parquet_reader_test.cpp index 5cb05ac7011..abbd0c97f07 100644 --- a/cpp/tests/io/parquet_reader_test.cpp +++ b/cpp/tests/io/parquet_reader_test.cpp @@ -241,7 +241,7 @@ TEST_F(ParquetReaderTest, UserBoundsWithNullsMixedTypes) TEST_F(ParquetReaderTest, UserBoundsWithNullsLarge) { - constexpr int num_rows = 30 * 1000000; + constexpr int num_rows = 30 * 10000; std::mt19937 gen(6747); std::bernoulli_distribution bn(0.7f); @@ -251,21 +251,23 @@ TEST_F(ParquetReaderTest, UserBoundsWithNullsLarge) cudf::test::fixed_width_column_wrapper col(values, values + num_rows, valids); - // this file will have row groups of 1,000,000 each + // this file will have row groups of 10,000 each cudf::table_view tbl({col}); auto filepath = temp_env->get_temp_filepath("UserBoundsWithNullsLarge.parquet"); cudf::io::parquet_writer_options out_args = - cudf::io::parquet_writer_options::builder(cudf::io::sink_info{filepath}, tbl); + cudf::io::parquet_writer_options::builder(cudf::io::sink_info{filepath}, tbl) + .row_group_size_rows(10000) + .max_page_size_rows(1000); cudf::io::write_parquet(out_args); // skip_rows / num_rows // clang-format off - std::vector> params{ {-1, -1}, {31, -1}, {32, -1}, {33, -1}, {1613470, -1}, {1999999, -1}, + std::vector> params{ {-1, -1}, {31, -1}, {32, -1}, {33, -1}, {16130, -1}, {19999, -1}, {31, 1}, {32, 1}, {33, 1}, // deliberately span some row group boundaries - {999000, 1001}, {999000, 2000}, {2999999, 2}, {13999997, -1}, - {16785678, 3}, {22996176, 31}, - {24001231, 17}, {29000001, 989999}, {29999999, 1} }; + {9900, 1001}, {9900, 2000}, {29999, 2}, {139997, -1}, + {167878, 3}, {229976, 31}, + {240031, 17}, {290001, 9899}, {299999, 1} }; // clang-format on for (auto p : params) { cudf::io::parquet_reader_options read_args = @@ -285,25 +287,27 @@ TEST_F(ParquetReaderTest, UserBoundsWithNullsLarge) TEST_F(ParquetReaderTest, ListUserBoundsWithNullsLarge) { - constexpr int num_rows = 5 * 1000000; + constexpr int num_rows = 5 * 10000; auto colp = make_parquet_list_list_col(0, num_rows, 5, 8, true); cudf::column_view col = *colp; - // this file will have row groups of 1,000,000 each + // this file will have row groups of 10,000 each cudf::table_view tbl({col}); auto filepath = temp_env->get_temp_filepath("ListUserBoundsWithNullsLarge.parquet"); cudf::io::parquet_writer_options out_args = - cudf::io::parquet_writer_options::builder(cudf::io::sink_info{filepath}, tbl); + cudf::io::parquet_writer_options::builder(cudf::io::sink_info{filepath}, tbl) + .row_group_size_rows(10000) + .max_page_size_rows(1000); cudf::io::write_parquet(out_args); // skip_rows / num_rows // clang-format off - std::vector> params{ {-1, -1}, {31, -1}, {32, -1}, {33, -1}, {161470, -1}, {4499997, -1}, + std::vector> params{ {-1, -1}, {31, -1}, {32, -1}, {33, -1}, {1670, -1}, {44997, -1}, {31, 1}, {32, 1}, {33, 1}, // deliberately span some row group boundaries - {999000, 1001}, {999000, 2000}, {2999999, 2}, - {1678567, 3}, {4299676, 31}, - {4001231, 17}, {1900000, 989999}, {4999999, 1} }; + {9900, 1001}, {9900, 2000}, {29999, 2}, + {16567, 3}, {42976, 31}, + {40231, 17}, {19000, 9899}, {49999, 1} }; // clang-format on for (auto p : params) { cudf::io::parquet_reader_options read_args = @@ -1951,7 +1955,7 @@ TEST_F(ParquetReaderTest, RepeatedNoAnnotations) TEST_F(ParquetReaderTest, DeltaSkipRowsWithNulls) { - constexpr int num_rows = 50'000; + constexpr int num_rows = 10'000; constexpr auto seed = 21337; std::mt19937 engine{seed}; @@ -2003,7 +2007,7 @@ TEST_F(ParquetReaderTest, DeltaSkipRowsWithNulls) .stats_level(cudf::io::statistics_freq::STATISTICS_COLUMN) .compression(cudf::io::compression_type::NONE) .dictionary_policy(cudf::io::dictionary_policy::NEVER) - .max_page_size_rows(20'000) + .max_page_size_rows(5'000) .write_v2_headers(true) .build(); cudf::io::write_parquet(out_opts); @@ -2018,7 +2022,7 @@ TEST_F(ParquetReaderTest, DeltaSkipRowsWithNulls) // skip and truncate {1, 32}, {1, 33}, {32, 32}, {33, 139}, // cross page boundaries - {10'000, 20'000} + {3'000, 5'000} }; // clang-format on @@ -2044,7 +2048,7 @@ TEST_F(ParquetReaderTest, DeltaSkipRowsWithNulls) .stats_level(cudf::io::statistics_freq::STATISTICS_COLUMN) .compression(cudf::io::compression_type::NONE) .dictionary_policy(cudf::io::dictionary_policy::NEVER) - .max_page_size_rows(20'000) + .max_page_size_rows(5'000) .write_v2_headers(true); cudf::io::write_parquet(out_opts2); diff --git a/cpp/tests/io/parquet_v2_test.cpp b/cpp/tests/io/parquet_v2_test.cpp index f2b50639a4d..dd836ed2fdf 100644 --- a/cpp/tests/io/parquet_v2_test.cpp +++ b/cpp/tests/io/parquet_v2_test.cpp @@ -33,7 +33,7 @@ INSTANTIATE_TEST_SUITE_P(ParquetV2ReadWriteTest, TEST_P(ParquetV2Test, MultiColumn) { - constexpr auto num_rows = 100000; + constexpr auto num_rows = 50000; auto const is_v2 = GetParam(); // auto col0_data = random_values(num_rows); @@ -45,13 +45,13 @@ TEST_P(ParquetV2Test, MultiColumn) auto col6_vals = random_values(num_rows); auto col7_vals = random_values(num_rows); auto col8_vals = random_values(num_rows); - auto col6_data = cudf::detail::make_counting_transform_iterator(0, [col6_vals](auto i) { + auto col6_data = cudf::detail::make_counting_transform_iterator(0, [&col6_vals](auto i) { return numeric::decimal32{col6_vals[i], numeric::scale_type{5}}; }); - auto col7_data = cudf::detail::make_counting_transform_iterator(0, [col7_vals](auto i) { + auto col7_data = cudf::detail::make_counting_transform_iterator(0, [&col7_vals](auto i) { return numeric::decimal64{col7_vals[i], numeric::scale_type{-5}}; }); - auto col8_data = cudf::detail::make_counting_transform_iterator(0, [col8_vals](auto i) { + auto col8_data = cudf::detail::make_counting_transform_iterator(0, [&col8_vals](auto i) { return numeric::decimal128{col8_vals[i], numeric::scale_type{-6}}; }); auto validity = cudf::detail::make_counting_transform_iterator(0, [](auto i) { return true; }); @@ -108,10 +108,10 @@ TEST_P(ParquetV2Test, MultiColumnWithNulls) auto col5_data = random_values(num_rows); auto col6_vals = random_values(num_rows); auto col7_vals = random_values(num_rows); - auto col6_data = cudf::detail::make_counting_transform_iterator(0, [col6_vals](auto i) { + auto col6_data = cudf::detail::make_counting_transform_iterator(0, [&col6_vals](auto i) { return numeric::decimal32{col6_vals[i], numeric::scale_type{-2}}; }); - auto col7_data = cudf::detail::make_counting_transform_iterator(0, [col7_vals](auto i) { + auto col7_data = cudf::detail::make_counting_transform_iterator(0, [&col7_vals](auto i) { return numeric::decimal64{col7_vals[i], numeric::scale_type{-8}}; }); // auto col0_mask = cudf::detail::make_counting_transform_iterator( @@ -688,60 +688,9 @@ TEST_P(ParquetV2Test, PartitionedWriteEmptyColumns) CUDF_TEST_EXPECT_TABLES_EQUAL(expected2, result2.tbl->view()); } -TEST_P(ParquetV2Test, LargeColumnIndex) -{ - // create a file large enough to be written in 2 batches (currently 1GB per batch) - // pick fragment size that num_rows is divisible by, so we'll get equal sized row groups - const std::string s1(1000, 'a'); - const std::string s2(1000, 'b'); - constexpr auto num_rows = 512 * 1024; - constexpr auto frag_size = num_rows / 128; - auto const is_v2 = GetParam(); - - auto col0_elements = cudf::detail::make_counting_transform_iterator( - 0, [&](auto i) { return (i < num_rows) ? s1 : s2; }); - auto col0 = cudf::test::strings_column_wrapper(col0_elements, col0_elements + 2 * num_rows); - - auto const expected = table_view{{col0, col0}}; - - auto const filepath = temp_env->get_temp_filepath("LargeColumnIndex.parquet"); - const cudf::io::parquet_writer_options out_opts = - cudf::io::parquet_writer_options::builder(cudf::io::sink_info{filepath}, expected) - .stats_level(cudf::io::statistics_freq::STATISTICS_COLUMN) - .compression(cudf::io::compression_type::NONE) - .dictionary_policy(cudf::io::dictionary_policy::NEVER) - .write_v2_headers(is_v2) - .max_page_fragment_size(frag_size) - .row_group_size_bytes(1024 * 1024 * 1024) - .row_group_size_rows(num_rows); - cudf::io::write_parquet(out_opts); - - auto const source = cudf::io::datasource::create(filepath); - cudf::io::parquet::detail::FileMetaData fmd; - - read_footer(source, &fmd); - - for (auto const& rg : fmd.row_groups) { - for (size_t c = 0; c < rg.columns.size(); c++) { - auto const& chunk = rg.columns[c]; - - auto const ci = read_column_index(source, chunk); - auto const stats = get_statistics(chunk); - - // check trunc(page.min) <= stats.min && trun(page.max) >= stats.max - auto const ptype = fmd.schema[c + 1].type; - auto const ctype = fmd.schema[c + 1].converted_type; - ASSERT_TRUE(stats.min_value.has_value()); - ASSERT_TRUE(stats.max_value.has_value()); - EXPECT_TRUE(compare_binary(ci.min_values[0], stats.min_value.value(), ptype, ctype) <= 0); - EXPECT_TRUE(compare_binary(ci.max_values[0], stats.max_value.value(), ptype, ctype) >= 0); - } - } -} - TEST_P(ParquetV2Test, CheckColumnOffsetIndex) { - constexpr auto num_rows = 100000; + constexpr auto num_rows = 50000; auto const is_v2 = GetParam(); auto const expected_hdr_type = is_v2 ? cudf::io::parquet::detail::PageType::DATA_PAGE_V2 : cudf::io::parquet::detail::PageType::DATA_PAGE; diff --git a/cpp/tests/io/parquet_writer_test.cpp b/cpp/tests/io/parquet_writer_test.cpp index 51190b5de9e..acfd18a2c88 100644 --- a/cpp/tests/io/parquet_writer_test.cpp +++ b/cpp/tests/io/parquet_writer_test.cpp @@ -185,7 +185,7 @@ TEST_F(ParquetWriterTest, BufferSource) TEST_F(ParquetWriterTest, ManyFragments) { srand(31337); - auto const expected = create_random_fixed_table(10, 6'000'000, false); + auto const expected = create_random_fixed_table(2, 2'000'000, false); auto const filepath = temp_env->get_temp_filepath("ManyFragments.parquet"); cudf::io::parquet_writer_options const args = @@ -342,11 +342,12 @@ TEST_F(ParquetWriterTest, DeviceWriteLargeishFile) // exercises multiple rowgroups srand(31337); - auto expected = create_random_fixed_table(4, 4 * 1024 * 1024, false); + auto expected = create_random_fixed_table(4, 1024 * 1024, false); // write out using the custom sink (which uses device writes) cudf::io::parquet_writer_options args = - cudf::io::parquet_writer_options::builder(cudf::io::sink_info{&custom_sink}, *expected); + cudf::io::parquet_writer_options::builder(cudf::io::sink_info{&custom_sink}, *expected) + .row_group_size_rows(128 * 1024); cudf::io::write_parquet(args); cudf::io::parquet_reader_options custom_args = From 90fcc7720e8bfd12480d3e3003d67bb6eba70caf Mon Sep 17 00:00:00 2001 From: Vukasin Milovanovic Date: Fri, 12 Jan 2024 10:51:20 -0800 Subject: [PATCH 2/4] no_nulls --- cpp/tests/io/parquet_v2_test.cpp | 29 ++++++++++++------------- cpp/tests/io/parquet_writer_test.cpp | 32 +++++++++++----------------- 2 files changed, 27 insertions(+), 34 deletions(-) diff --git a/cpp/tests/io/parquet_v2_test.cpp b/cpp/tests/io/parquet_v2_test.cpp index dd836ed2fdf..1a373ed92ae 100644 --- a/cpp/tests/io/parquet_v2_test.cpp +++ b/cpp/tests/io/parquet_v2_test.cpp @@ -23,6 +23,8 @@ #include +using cudf::test::iterators::no_nulls; + // Base test fixture for V2 header tests class ParquetV2Test : public ::cudf::test::BaseFixtureWithParam {}; @@ -54,18 +56,16 @@ TEST_P(ParquetV2Test, MultiColumn) auto col8_data = cudf::detail::make_counting_transform_iterator(0, [&col8_vals](auto i) { return numeric::decimal128{col8_vals[i], numeric::scale_type{-6}}; }); - auto validity = cudf::detail::make_counting_transform_iterator(0, [](auto i) { return true; }); - // column_wrapper col0{ - // col0_data.begin(), col0_data.end(), validity}; - column_wrapper col1{col1_data.begin(), col1_data.end(), validity}; - column_wrapper col2{col2_data.begin(), col2_data.end(), validity}; - column_wrapper col3{col3_data.begin(), col3_data.end(), validity}; - column_wrapper col4{col4_data.begin(), col4_data.end(), validity}; - column_wrapper col5{col5_data.begin(), col5_data.end(), validity}; - column_wrapper col6{col6_data, col6_data + num_rows, validity}; - column_wrapper col7{col7_data, col7_data + num_rows, validity}; - column_wrapper col8{col8_data, col8_data + num_rows, validity}; + // column_wrapper col0{col0_data.begin(), col0_data.end(), no_nulls()}; + column_wrapper col1{col1_data.begin(), col1_data.end(), no_nulls()}; + column_wrapper col2{col2_data.begin(), col2_data.end(), no_nulls()}; + column_wrapper col3{col3_data.begin(), col3_data.end(), no_nulls()}; + column_wrapper col4{col4_data.begin(), col4_data.end(), no_nulls()}; + column_wrapper col5{col5_data.begin(), col5_data.end(), no_nulls()}; + column_wrapper col6{col6_data, col6_data + num_rows, no_nulls()}; + column_wrapper col7{col7_data, col7_data + num_rows, no_nulls()}; + column_wrapper col8{col8_data, col8_data + num_rows, no_nulls()}; auto expected = table_view{{col1, col2, col3, col4, col5, col6, col7, col8}}; @@ -118,7 +118,7 @@ TEST_P(ParquetV2Test, MultiColumnWithNulls) // 0, [](auto i) { return (i % 2); }); auto col1_mask = cudf::detail::make_counting_transform_iterator(0, [](auto i) { return (i < 10); }); - auto col2_mask = cudf::detail::make_counting_transform_iterator(0, [](auto i) { return true; }); + auto col2_mask = no_nulls(); auto col3_mask = cudf::detail::make_counting_transform_iterator(0, [](auto i) { return (i == (num_rows - 1)); }); auto col4_mask = @@ -181,11 +181,10 @@ TEST_P(ParquetV2Test, Strings) auto seq_col0 = random_values(num_rows); auto seq_col2 = random_values(num_rows); - auto validity = cudf::detail::make_counting_transform_iterator(0, [](auto i) { return true; }); - column_wrapper col0{seq_col0.begin(), seq_col0.end(), validity}; + column_wrapper col0{seq_col0.begin(), seq_col0.end(), no_nulls()}; column_wrapper col1{strings.begin(), strings.end()}; - column_wrapper col2{seq_col2.begin(), seq_col2.end(), validity}; + column_wrapper col2{seq_col2.begin(), seq_col2.end(), no_nulls()}; auto expected = table_view{{col0, col1, col2}}; diff --git a/cpp/tests/io/parquet_writer_test.cpp b/cpp/tests/io/parquet_writer_test.cpp index acfd18a2c88..d7d80e3d1a2 100644 --- a/cpp/tests/io/parquet_writer_test.cpp +++ b/cpp/tests/io/parquet_writer_test.cpp @@ -28,6 +28,8 @@ #include +using cudf::test::iterators::no_nulls; + template void test_durations(mask_op_t mask_op) { @@ -100,13 +102,12 @@ TEST_F(ParquetWriterTest, MultiIndex) auto col2_data = random_values(num_rows); auto col3_data = random_values(num_rows); auto col4_data = random_values(num_rows); - auto validity = cudf::detail::make_counting_transform_iterator(0, [](auto i) { return true; }); - column_wrapper col0{col0_data.begin(), col0_data.end(), validity}; - column_wrapper col1{col1_data.begin(), col1_data.end(), validity}; - column_wrapper col2{col2_data.begin(), col2_data.end(), validity}; - column_wrapper col3{col3_data.begin(), col3_data.end(), validity}; - column_wrapper col4{col4_data.begin(), col4_data.end(), validity}; + column_wrapper col0{col0_data.begin(), col0_data.end(), no_nulls()}; + column_wrapper col1{col1_data.begin(), col1_data.end(), no_nulls()}; + column_wrapper col2{col2_data.begin(), col2_data.end(), no_nulls()}; + column_wrapper col3{col3_data.begin(), col3_data.end(), no_nulls()}; + column_wrapper col4{col4_data.begin(), col4_data.end(), no_nulls()}; auto expected = table_view{{col0, col1, col2, col3, col4}}; @@ -139,9 +140,7 @@ TEST_F(ParquetWriterTest, BufferSource) { constexpr auto num_rows = 100 << 10; auto const seq_col = random_values(num_rows); - auto const validity = - cudf::detail::make_counting_transform_iterator(0, [](auto i) { return true; }); - column_wrapper col{seq_col.begin(), seq_col.end(), validity}; + column_wrapper col{seq_col.begin(), seq_col.end(), no_nulls()}; auto const expected = table_view{{col}}; @@ -614,11 +613,10 @@ TEST_F(ParquetWriterTest, EmptyListWithStruct) TEST_F(ParquetWriterTest, CheckPageRows) { auto sequence = thrust::make_counting_iterator(0); - auto validity = cudf::detail::make_counting_transform_iterator(0, [](auto i) { return true; }); constexpr auto page_rows = 5000; constexpr auto num_rows = 2 * page_rows; - column_wrapper col(sequence, sequence + num_rows, validity); + column_wrapper col(sequence, sequence + num_rows, no_nulls()); auto expected = table_view{{col}}; @@ -1268,8 +1266,7 @@ TEST_F(ParquetWriterTest, CompStatsEmptyTable) TEST_F(ParquetWriterTest, NoNullsAsNonNullable) { - auto valids = cudf::detail::make_counting_transform_iterator(0, [](auto i) { return true; }); - column_wrapper col{{1, 2, 3}, valids}; + column_wrapper col{{1, 2, 3}, no_nulls()}; table_view expected({col}); cudf::io::table_input_metadata expected_metadata(expected); @@ -1460,10 +1457,9 @@ TYPED_TEST(ParquetWriterNumericTypeTest, SingleColumn) { auto sequence = cudf::detail::make_counting_transform_iterator(0, [](auto i) { return TypeParam(i % 400); }); - auto validity = cudf::detail::make_counting_transform_iterator(0, [](auto i) { return true; }); constexpr auto num_rows = 800; - column_wrapper col(sequence, sequence + num_rows, validity); + column_wrapper col(sequence, sequence + num_rows, no_nulls()); auto expected = table_view{{col}}; @@ -1517,11 +1513,10 @@ TYPED_TEST(ParquetWriterTimestampTypeTest, Timestamps) { auto sequence = cudf::detail::make_counting_transform_iterator( 0, [](auto i) { return ((std::rand() / 10000) * 1000); }); - auto validity = cudf::detail::make_counting_transform_iterator(0, [](auto i) { return true; }); constexpr auto num_rows = 100; column_wrapper col( - sequence, sequence + num_rows, validity); + sequence, sequence + num_rows, no_nulls()); auto expected = table_view{{col}}; @@ -1568,11 +1563,10 @@ TYPED_TEST(ParquetWriterTimestampTypeTest, TimestampOverflow) { constexpr int64_t max = std::numeric_limits::max(); auto sequence = cudf::detail::make_counting_transform_iterator(0, [](auto i) { return max - i; }); - auto validity = cudf::detail::make_counting_transform_iterator(0, [](auto i) { return true; }); constexpr auto num_rows = 100; column_wrapper col( - sequence, sequence + num_rows, validity); + sequence, sequence + num_rows, no_nulls()); table_view expected({col}); auto filepath = temp_env->get_temp_filepath("ParquetTimestampOverflow.parquet"); From a5d919cbe83d1ec7e3b07f2dd52300220a0f458d Mon Sep 17 00:00:00 2001 From: Vukasin Milovanovic Date: Fri, 12 Jan 2024 12:56:39 -0800 Subject: [PATCH 3/4] actually have MANY fragments --- cpp/tests/io/parquet_writer_test.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cpp/tests/io/parquet_writer_test.cpp b/cpp/tests/io/parquet_writer_test.cpp index d7d80e3d1a2..9415e018c6a 100644 --- a/cpp/tests/io/parquet_writer_test.cpp +++ b/cpp/tests/io/parquet_writer_test.cpp @@ -184,12 +184,13 @@ TEST_F(ParquetWriterTest, BufferSource) TEST_F(ParquetWriterTest, ManyFragments) { srand(31337); - auto const expected = create_random_fixed_table(2, 2'000'000, false); + auto const expected = create_random_fixed_table(1, 700'000, false); auto const filepath = temp_env->get_temp_filepath("ManyFragments.parquet"); cudf::io::parquet_writer_options const args = cudf::io::parquet_writer_options::builder(cudf::io::sink_info{filepath}, *expected) - .max_page_size_bytes(8 * 1024); + .max_page_size_bytes(8 * 1024) + .max_page_fragment_size(10); cudf::io::write_parquet(args); cudf::io::parquet_reader_options const read_opts = From e392e22856bbf8ff1d0cc2b40773c8a3fad0a430 Mon Sep 17 00:00:00 2001 From: Vukasin Milovanovic Date: Tue, 16 Jan 2024 12:17:03 -0800 Subject: [PATCH 4/4] const Co-authored-by: Nghia Truong <7416935+ttnghia@users.noreply.github.com> --- cpp/tests/io/parquet_misc_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/tests/io/parquet_misc_test.cpp b/cpp/tests/io/parquet_misc_test.cpp index 75cd5726d1e..aa5a1cad96a 100644 --- a/cpp/tests/io/parquet_misc_test.cpp +++ b/cpp/tests/io/parquet_misc_test.cpp @@ -138,7 +138,7 @@ TEST_P(ParquetSizedTest, DictionaryTest) unsigned int const cardinality = (1 << (GetParam() - 1)) + 1; unsigned int const nrows = std::max(cardinality * 3 / 2, 3'000'000U); - auto elements = cudf::detail::make_counting_transform_iterator( + auto const elements = cudf::detail::make_counting_transform_iterator( 0, [cardinality](auto i) { return std::to_string(i % cardinality); }); auto const col0 = cudf::test::strings_column_wrapper(elements, elements + nrows); auto const expected = table_view{{col0}};