Skip to content

Commit 367a5a6

Browse files
author
Devdutt Shenoi
committed
test: replace_columns
1 parent 42b1e46 commit 367a5a6

File tree

1 file changed

+78
-1
lines changed

1 file changed

+78
-1
lines changed

src/utils/arrow/mod.rs

Lines changed: 78 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ pub fn reverse(rb: &RecordBatch) -> RecordBatch {
151151
mod tests {
152152
use std::sync::Arc;
153153

154-
use arrow_array::{Array, Int32Array, RecordBatch};
154+
use arrow_array::{Array, ArrayRef, Int32Array, RecordBatch};
155155
use arrow_schema::{DataType, Field, Schema};
156156

157157
use super::*;
@@ -213,4 +213,81 @@ mod tests {
213213
assert_eq!(array.len(), 0);
214214
assert!(array.is_empty());
215215
}
216+
217+
#[test]
218+
fn test_replace_single_column() {
219+
let schema = Schema::new(vec![
220+
Field::new("a", DataType::Int32, false),
221+
Field::new("b", DataType::Int32, false),
222+
Field::new("c", DataType::Int32, false),
223+
]);
224+
225+
let columns: Vec<ArrayRef> = vec![
226+
Arc::new(Int32Array::from(vec![1, 2, 3])),
227+
Arc::new(Int32Array::from(vec![4, 5, 6])),
228+
Arc::new(Int32Array::from(vec![7, 8, 9])),
229+
];
230+
231+
let batch = RecordBatch::try_new(Arc::new(schema.clone()), columns.clone()).unwrap();
232+
233+
let new_b = Arc::new(Int32Array::from(vec![10, 11, 12]));
234+
235+
let result = replace_columns(Arc::new(schema), &batch, &[(1, new_b.clone())]);
236+
237+
assert_eq!(result.column(0).as_ref(), columns[0].as_ref());
238+
assert_eq!(result.column(1).as_ref(), new_b.as_ref());
239+
assert_eq!(result.column(2).as_ref(), columns[2].as_ref());
240+
}
241+
242+
#[test]
243+
fn replace_multiple_columns() {
244+
let schema = Schema::new(vec![
245+
Field::new("a", DataType::Int32, false),
246+
Field::new("b", DataType::Int32, false),
247+
Field::new("c", DataType::Int32, false),
248+
]);
249+
250+
let columns: Vec<ArrayRef> = vec![
251+
Arc::new(Int32Array::from(vec![1, 2, 3])),
252+
Arc::new(Int32Array::from(vec![4, 5, 6])),
253+
Arc::new(Int32Array::from(vec![7, 8, 9])),
254+
];
255+
256+
let batch = RecordBatch::try_new(Arc::new(schema.clone()), columns.clone()).unwrap();
257+
258+
let new_a = Arc::new(Int32Array::from(vec![10, 11, 12]));
259+
let new_c = Arc::new(Int32Array::from(vec![13, 14, 15]));
260+
261+
let result = replace_columns(
262+
Arc::new(schema),
263+
&batch,
264+
&[(0, new_a.clone()), (2, new_c.clone())],
265+
);
266+
267+
assert_eq!(result.column(0).as_ref(), new_a.as_ref());
268+
assert_eq!(result.column(1).as_ref(), columns[1].as_ref());
269+
assert_eq!(result.column(2).as_ref(), new_c.as_ref());
270+
}
271+
272+
#[test]
273+
#[should_panic]
274+
fn replace_column_with_different_length_array() {
275+
let schema = Schema::new(vec![
276+
Field::new("a", DataType::Int32, false),
277+
Field::new("b", DataType::Int32, false),
278+
Field::new("c", DataType::Int32, false),
279+
]);
280+
281+
let columns: Vec<ArrayRef> = vec![
282+
Arc::new(Int32Array::from(vec![1, 2, 3])),
283+
Arc::new(Int32Array::from(vec![4, 5, 6])),
284+
Arc::new(Int32Array::from(vec![7, 8, 9])),
285+
];
286+
287+
let batch = RecordBatch::try_new(Arc::new(schema.clone()), columns.clone()).unwrap();
288+
289+
let new_b = Arc::new(Int32Array::from(vec![10, 11])); // Different length
290+
291+
replace_columns(Arc::new(schema), &batch, &[(1, new_b.clone())]);
292+
}
216293
}

0 commit comments

Comments
 (0)