Skip to content

Commit 1c6de59

Browse files
Test reinterpreted bitmap type checking
1 parent 10a0e5c commit 1c6de59

1 file changed

Lines changed: 20 additions & 1 deletion

File tree

  • datafusion/physical-expr/src/expressions/in_list

‎datafusion/physical-expr/src/expressions/in_list/transform.rs‎

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,9 @@ mod tests {
118118
use super::*;
119119
use std::sync::Arc;
120120

121-
use arrow::array::{ArrayRef, BooleanArray, Int8Array, Int16Array};
121+
use arrow::array::{
122+
ArrayRef, BooleanArray, Int8Array, Int16Array, UInt8Array, UInt16Array,
123+
};
122124
use arrow::datatypes::{UInt8Type, UInt16Type};
123125

124126
#[test]
@@ -166,4 +168,21 @@ mod tests {
166168

167169
Ok(())
168170
}
171+
172+
#[test]
173+
fn reinterpreted_bitmap_rejects_same_width_unsigned_needles() -> Result<()> {
174+
let haystack: ArrayRef = Arc::new(Int8Array::from(vec![Some(-1)]));
175+
let filter = make_bitmap_filter::<UInt8Type>(&haystack)?;
176+
let needles = UInt8Array::from(vec![Some(u8::MAX)]);
177+
let err = filter.contains(&needles, false).unwrap_err().to_string();
178+
assert!(err.contains("expected Int8 array, got UInt8"), "{err}");
179+
180+
let haystack: ArrayRef = Arc::new(Int16Array::from(vec![Some(-1)]));
181+
let filter = make_bitmap_filter::<UInt16Type>(&haystack)?;
182+
let needles = UInt16Array::from(vec![Some(u16::MAX)]);
183+
let err = filter.contains(&needles, false).unwrap_err().to_string();
184+
assert!(err.contains("expected Int16 array, got UInt16"), "{err}");
185+
186+
Ok(())
187+
}
169188
}

0 commit comments

Comments
 (0)