in native/spark-expr/src/kernels/temporal.rs [850:961]
fn test_date_trunc_array_fmt_dyn() {
let size = 10;
let formats = [
"YEAR", "YYYY", "YY", "QUARTER", "MONTH", "MON", "MM", "WEEK",
];
let mut vec: Vec<i32> = Vec::with_capacity(size * formats.len());
let mut fmt_vec: Vec<&str> = Vec::with_capacity(size * formats.len());
for i in 0..size {
for fmt_value in &formats {
vec.push(i as i32 * 1_000_001);
fmt_vec.push(fmt_value);
}
}
// timestamp array
let array = Date32Array::from(vec);
// formats array
let fmt_array = StringArray::from(fmt_vec);
// timestamp dictionary array
let mut date_dict_builder = PrimitiveDictionaryBuilder::<Int32Type, Date32Type>::new();
for v in array.iter() {
date_dict_builder
.append(v.unwrap())
.expect("Error in building timestamp array");
}
let mut array_dict = date_dict_builder.finish();
// apply timezone
array_dict = array_dict.with_values(Arc::new(
array_dict
.values()
.as_any()
.downcast_ref::<Date32Array>()
.unwrap()
.clone(),
));
// formats dictionary array
let mut formats_dict_builder = StringDictionaryBuilder::<Int32Type>::new();
for v in fmt_array.iter() {
formats_dict_builder
.append(v.unwrap())
.expect("Error in building formats array");
}
let fmt_dict = formats_dict_builder.finish();
// verify input arrays
let iter = ArrayIter::new(&array);
let mut dict_iter = array_dict
.downcast_dict::<PrimitiveArray<Date32Type>>()
.unwrap()
.into_iter();
for val in iter {
assert_eq!(
dict_iter
.next()
.expect("array and dictionary array do not match"),
val
)
}
// verify input format arrays
let fmt_iter = ArrayIter::new(&fmt_array);
let mut fmt_dict_iter = fmt_dict.downcast_dict::<StringArray>().unwrap().into_iter();
for val in fmt_iter {
assert_eq!(
fmt_dict_iter
.next()
.expect("formats and dictionary formats do not match"),
val
)
}
// test cases
if let Ok(a) = date_trunc_array_fmt_dyn(&array, &fmt_array) {
for i in 0..array.len() {
assert!(
array.value(i) >= a.as_any().downcast_ref::<Date32Array>().unwrap().value(i)
)
}
} else {
unreachable!()
}
if let Ok(a) = date_trunc_array_fmt_dyn(&array_dict, &fmt_array) {
for i in 0..array.len() {
assert!(
array.value(i) >= a.as_any().downcast_ref::<Date32Array>().unwrap().value(i)
)
}
} else {
unreachable!()
}
if let Ok(a) = date_trunc_array_fmt_dyn(&array, &fmt_dict) {
for i in 0..array.len() {
assert!(
array.value(i) >= a.as_any().downcast_ref::<Date32Array>().unwrap().value(i)
)
}
} else {
unreachable!()
}
if let Ok(a) = date_trunc_array_fmt_dyn(&array_dict, &fmt_dict) {
for i in 0..array.len() {
assert!(
array.value(i) >= a.as_any().downcast_ref::<Date32Array>().unwrap().value(i)
)
}
} else {
unreachable!()
}
}