From ccc8a4c569098795f54a8ec1bedf35891c9c372c Mon Sep 17 00:00:00 2001 From: Ben Chambers Date: Wed, 30 Jun 2021 09:25:13 -0700 Subject: [PATCH] failing test --- arrow/src/array/equal/mod.rs | 67 +++++++++++++++++++++++++++++++++++- 1 file changed, 66 insertions(+), 1 deletion(-) diff --git a/arrow/src/array/equal/mod.rs b/arrow/src/array/equal/mod.rs index 3c752284dd0..bc5df9a80ac 100644 --- a/arrow/src/array/equal/mod.rs +++ b/arrow/src/array/equal/mod.rs @@ -295,7 +295,7 @@ mod tests { Int32Builder, ListBuilder, NullArray, PrimitiveBuilder, StringArray, StringDictionaryBuilder, StringOffsetSizeTrait, StructArray, }; - use crate::array::{GenericStringArray, Int32Array}; + use crate::array::{GenericStringArray, Int32Array, StringBuilder, StructBuilder}; use crate::buffer::Buffer; use crate::datatypes::{Field, Int16Type, ToByteSlice}; @@ -1019,6 +1019,71 @@ mod tests { test_equal(&a, &b, true); } + fn make_struct( + elements: Vec, Option)>>, + ) -> StructArray { + let mut builder = StructBuilder::new( + vec![ + Field::new("f1", DataType::Utf8, true), + Field::new("f2", DataType::Int32, true), + ], + vec![ + Box::new(StringBuilder::new(elements.len())), + Box::new(Int32Builder::new(elements.len())), + ], + ); + + for element in elements { + match element.and_then(|e| e.0) { + None => builder + .field_builder::(0) + .unwrap() + .append_null() + .unwrap(), + Some(s) => builder + .field_builder::(0) + .unwrap() + .append_value(s) + .unwrap(), + }; + + builder + .field_builder::(1) + .unwrap() + .append_option(element.and_then(|e| e.1)) + .unwrap(); + + builder.append(element.is_some()).unwrap(); + } + + builder.finish() + } + + #[test] + fn test_struct_equal_slice() { + let a = make_struct(vec![ + None, + Some((Some("joe"), Some(1))), + Some((None, Some(2))), + Some((None, None)), + Some((Some("mark"), Some(4))), + Some((Some("doe"), Some(5))), + ]); + let a = a.slice(1, 5); + let a = a.as_any().downcast_ref::().unwrap(); + + let b = make_struct(vec![ + Some((Some("joe"), Some(1))), + Some((None, Some(2))), + Some((None, None)), + Some((Some("mark"), Some(4))), + Some((Some("doe"), Some(5))), + ]); + assert_eq!(a, &b); + + test_equal(a.data(), b.data(), true); + } + #[test] fn test_struct_equal_null() { let strings: ArrayRef = Arc::new(StringArray::from(vec![