@@ -1037,17 +1037,25 @@ void TestStatisticsSortOrder<Int32Type>::SetValues() {
10371037 values_[i] = i - 5 ; // {-5, -4, -3, -2, -1, 0, 1, 2, 3, 4};
10381038 }
10391039
1040- // Write UINT32 min/max values
1041- stats_[0 ]
1042- .set_min (std::string (reinterpret_cast <const char *>(&values_[5 ]), sizeof (c_type)))
1043- .set_max (std::string (reinterpret_cast <const char *>(&values_[4 ]), sizeof (c_type)));
1040+ // Write UINT32 min/max values (converted to little-endian)
1041+ {
1042+ c_type le_min = ::arrow::bit_util::ToLittleEndian (values_[5 ]);
1043+ c_type le_max = ::arrow::bit_util::ToLittleEndian (values_[4 ]);
1044+ stats_[0 ]
1045+ .set_min (std::string (reinterpret_cast <const char *>(&le_min), sizeof (c_type)))
1046+ .set_max (std::string (reinterpret_cast <const char *>(&le_max), sizeof (c_type)));
1047+ }
10441048 stats_[0 ].is_max_value_exact = true ;
10451049 stats_[0 ].is_min_value_exact = true ;
10461050
1047- // Write INT32 min/max values
1048- stats_[1 ]
1049- .set_min (std::string (reinterpret_cast <const char *>(&values_[0 ]), sizeof (c_type)))
1050- .set_max (std::string (reinterpret_cast <const char *>(&values_[9 ]), sizeof (c_type)));
1051+ // Write INT32 min/max values (converted to little-endian)
1052+ {
1053+ c_type le_min = ::arrow::bit_util::ToLittleEndian (values_[0 ]);
1054+ c_type le_max = ::arrow::bit_util::ToLittleEndian (values_[9 ]);
1055+ stats_[1 ]
1056+ .set_min (std::string (reinterpret_cast <const char *>(&le_min), sizeof (c_type)))
1057+ .set_max (std::string (reinterpret_cast <const char *>(&le_max), sizeof (c_type)));
1058+ }
10511059 stats_[1 ].is_max_value_exact = true ;
10521060 stats_[1 ].is_min_value_exact = true ;
10531061}
@@ -1069,17 +1077,25 @@ void TestStatisticsSortOrder<Int64Type>::SetValues() {
10691077 values_[i] = i - 5 ; // {-5, -4, -3, -2, -1, 0, 1, 2, 3, 4};
10701078 }
10711079
1072- // Write UINT64 min/max values
1073- stats_[0 ]
1074- .set_min (std::string (reinterpret_cast <const char *>(&values_[5 ]), sizeof (c_type)))
1075- .set_max (std::string (reinterpret_cast <const char *>(&values_[4 ]), sizeof (c_type)));
1080+ // Write UINT64 min/max values (converted to little-endian)
1081+ {
1082+ c_type le_min = ::arrow::bit_util::ToLittleEndian (values_[5 ]);
1083+ c_type le_max = ::arrow::bit_util::ToLittleEndian (values_[4 ]);
1084+ stats_[0 ]
1085+ .set_min (std::string (reinterpret_cast <const char *>(&le_min), sizeof (c_type)))
1086+ .set_max (std::string (reinterpret_cast <const char *>(&le_max), sizeof (c_type)));
1087+ }
10761088 stats_[0 ].is_max_value_exact = true ;
10771089 stats_[0 ].is_min_value_exact = true ;
10781090
1079- // Write INT64 min/max values
1080- stats_[1 ]
1081- .set_min (std::string (reinterpret_cast <const char *>(&values_[0 ]), sizeof (c_type)))
1082- .set_max (std::string (reinterpret_cast <const char *>(&values_[9 ]), sizeof (c_type)));
1091+ // Write INT64 min/max values (converted to little-endian)
1092+ {
1093+ c_type le_min = ::arrow::bit_util::ToLittleEndian (values_[0 ]);
1094+ c_type le_max = ::arrow::bit_util::ToLittleEndian (values_[9 ]);
1095+ stats_[1 ]
1096+ .set_min (std::string (reinterpret_cast <const char *>(&le_min), sizeof (c_type)))
1097+ .set_max (std::string (reinterpret_cast <const char *>(&le_max), sizeof (c_type)));
1098+ }
10831099 stats_[1 ].is_max_value_exact = true ;
10841100 stats_[1 ].is_min_value_exact = true ;
10851101}
@@ -1092,10 +1108,14 @@ void TestStatisticsSortOrder<FloatType>::SetValues() {
10921108 5 ; // {-5.0, -4.0, -3.0, -2.0, -1.0, 0.0, 1.0, 2.0, 3.0, 4.0};
10931109 }
10941110
1095- // Write Float min/max values
1096- stats_[0 ]
1097- .set_min (std::string (reinterpret_cast <const char *>(&values_[0 ]), sizeof (c_type)))
1098- .set_max (std::string (reinterpret_cast <const char *>(&values_[9 ]), sizeof (c_type)));
1111+ // Write Float min/max values (converted to little-endian)
1112+ {
1113+ c_type le_min = ::arrow::bit_util::ToLittleEndian (values_[0 ]);
1114+ c_type le_max = ::arrow::bit_util::ToLittleEndian (values_[9 ]);
1115+ stats_[0 ]
1116+ .set_min (std::string (reinterpret_cast <const char *>(&le_min), sizeof (c_type)))
1117+ .set_max (std::string (reinterpret_cast <const char *>(&le_max), sizeof (c_type)));
1118+ }
10991119 stats_[0 ].is_max_value_exact = true ;
11001120 stats_[0 ].is_min_value_exact = true ;
11011121}
@@ -1108,10 +1128,14 @@ void TestStatisticsSortOrder<DoubleType>::SetValues() {
11081128 5 ; // {-5.0, -4.0, -3.0, -2.0, -1.0, 0.0, 1.0, 2.0, 3.0, 4.0};
11091129 }
11101130
1111- // Write Double min/max values
1112- stats_[0 ]
1113- .set_min (std::string (reinterpret_cast <const char *>(&values_[0 ]), sizeof (c_type)))
1114- .set_max (std::string (reinterpret_cast <const char *>(&values_[9 ]), sizeof (c_type)));
1131+ // Write Double min/max values (converted to little-endian)
1132+ {
1133+ c_type le_min = ::arrow::bit_util::ToLittleEndian (values_[0 ]);
1134+ c_type le_max = ::arrow::bit_util::ToLittleEndian (values_[9 ]);
1135+ stats_[0 ]
1136+ .set_min (std::string (reinterpret_cast <const char *>(&le_min), sizeof (c_type)))
1137+ .set_max (std::string (reinterpret_cast <const char *>(&le_max), sizeof (c_type)));
1138+ }
11151139 stats_[0 ].is_max_value_exact = true ;
11161140 stats_[0 ].is_min_value_exact = true ;
11171141}
@@ -1283,7 +1307,9 @@ TEST_F(TestStatisticsSortOrderFLBA, UnknownSortOrder) {
12831307
12841308template <typename T>
12851309static std::string EncodeValue (const T& val) {
1286- return std::string (reinterpret_cast <const char *>(&val), sizeof (val));
1310+ // Parquet encoded values should be in little-endian format
1311+ T le_val = ::arrow::bit_util::ToLittleEndian (val);
1312+ return std::string (reinterpret_cast <const char *>(&le_val), sizeof (le_val));
12871313}
12881314static std::string EncodeValue (const FLBA& val, int length = sizeof (uint16_t )) {
12891315 return std::string (reinterpret_cast <const char *>(val.ptr ), length);
0 commit comments