Skip to content

Commit 507efec

Browse files
committed
Add property testing for preserves_order
1 parent b8665c4 commit 507efec

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed

src/repr/src/row/encode.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2278,6 +2278,30 @@ mod tests {
22782278
let ord_col = ::arrow::compute::take(&col, &indices, None).expect("takeable");
22792279
assert_eq!(row_col.as_ref(), ord_col.as_ref());
22802280

2281+
// Check that our order matches the datum-native order when `preserves_order` is true.
2282+
let ordered_prefix_len = desc
2283+
.iter()
2284+
.take_while(|(_, c)| preserves_order(&c.scalar_type))
2285+
.count();
2286+
2287+
let decoder = <RelationDesc as Schema2<Row>>::decoder_any(&desc, ord_col.as_ref()).unwrap();
2288+
let is_sorted = (0..ord_col.len())
2289+
.map(|i| {
2290+
let mut row = Row::default();
2291+
decoder.decode(i, &mut row);
2292+
row
2293+
})
2294+
.is_sorted_by(|a, b| {
2295+
let a_prefix = a.iter().take(ordered_prefix_len);
2296+
let b_prefix = b.iter().take(ordered_prefix_len);
2297+
a_prefix.cmp(b_prefix).is_le()
2298+
});
2299+
assert!(
2300+
is_sorted,
2301+
"ordering should be consistent on preserves_order columns: {:#?}",
2302+
desc.iter().take(ordered_prefix_len).collect_vec()
2303+
);
2304+
22812305
// Check that our size estimates are consistent.
22822306
assert_eq!(
22832307
ord.goodbytes(),

0 commit comments

Comments
 (0)