Skip to content

Commit

Permalink
Implement ord for FixedSizeBinary types (#2905)
Browse files Browse the repository at this point in the history
* implement ord for FixedSizeBinary types

* add ord test
  • Loading branch information
maxburke authored Oct 21, 2022
1 parent be48377 commit f629a2e
Showing 1 changed file with 33 additions and 1 deletion.
34 changes: 33 additions & 1 deletion arrow/src/array/ord.rs
Original file line number Diff line number Diff line change
Expand Up @@ -295,6 +295,14 @@ pub fn build_compare(left: &dyn Array, right: &dyn Array) -> Result<DynComparato
let right: Decimal128Array = Decimal128Array::from(right.data().clone());
Box::new(move |i, j| left.value(i).cmp(&right.value(j)))
}
(FixedSizeBinary(_), FixedSizeBinary(_)) => {
let left: FixedSizeBinaryArray =
FixedSizeBinaryArray::from(left.data().clone());
let right: FixedSizeBinaryArray =
FixedSizeBinaryArray::from(right.data().clone());

Box::new(move |i, j| left.value(i).cmp(right.value(j)))
}
(lhs, _) => {
return Err(ArrowError::InvalidArgumentError(format!(
"The data type type {:?} has no natural order",
Expand All @@ -307,10 +315,34 @@ pub fn build_compare(left: &dyn Array, right: &dyn Array) -> Result<DynComparato
#[cfg(test)]
pub mod tests {
use super::*;
use crate::array::{Float64Array, Int32Array};
use crate::array::{FixedSizeBinaryArray, Float64Array, Int32Array};
use crate::error::Result;
use std::cmp::Ordering;

#[test]
fn test_fixed_size_binary() -> Result<()> {
let items = vec![vec![1u8], vec![2u8]];
let array = FixedSizeBinaryArray::try_from_iter(items.into_iter()).unwrap();

let cmp = build_compare(&array, &array)?;

assert_eq!(Ordering::Less, (cmp)(0, 1));
Ok(())
}

#[test]
fn test_fixed_size_binary_fixed_size_binary() -> Result<()> {
let items = vec![vec![1u8]];
let array1 = FixedSizeBinaryArray::try_from_iter(items.into_iter()).unwrap();
let items = vec![vec![2u8]];
let array2 = FixedSizeBinaryArray::try_from_iter(items.into_iter()).unwrap();

let cmp = build_compare(&array1, &array2)?;

assert_eq!(Ordering::Less, (cmp)(0, 0));
Ok(())
}

#[test]
fn test_i32() -> Result<()> {
let array = Int32Array::from(vec![1, 2]);
Expand Down

0 comments on commit f629a2e

Please sign in to comment.