Skip to content

Commit ab4c198

Browse files
committed
define more testcases in test_byte_view_take_n.
1 parent 37b4816 commit ab4c198

File tree

1 file changed

+85
-34
lines changed

1 file changed

+85
-34
lines changed

datafusion/physical-plan/src/aggregates/group_values/group_column.rs

Lines changed: 85 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1077,18 +1077,43 @@ mod tests {
10771077

10781078
#[test]
10791079
fn test_byte_view_take_n() {
1080+
// `take_n` is really complex, we should consider and test following situations:
1081+
// 1. Take nulls
1082+
// 2. Take all `inlined`s
1083+
// 3. Take non-inlined + partial last buffer in `completed`
1084+
// 4. Take non-inlined + whole last buffer in `completed`
1085+
// 5. Take non-inlined + partial last `in_progress`
1086+
// 6. Take non-inlined + while last buffer in ``in_progress`
1087+
// 7. Take all views at once
1088+
10801089
let mut builder =
10811090
ByteViewGroupValueBuilder::<StringViewType>::new().with_max_block_size(60);
10821091
let input_array = StringViewArray::from(vec![
1083-
Some("this string is quite long"), // in buffer 0
1092+
None,
1093+
None,
1094+
// Test situation 1 (also test take null together)
1095+
None,
10841096
Some("foo"),
10851097
Some("bar"),
1086-
Some("this string is also quite long"), // buffer 0
1098+
// Test situation 2 (also test take null + inlined)
1099+
None,
1100+
Some("foo"),
1101+
Some("this string is quite long"),
1102+
Some("this string is also quite long"),
1103+
// Test situation 3 (also test take null + inlined)
1104+
None,
1105+
Some("bar"),
1106+
Some("this string is quite long"),
1107+
// Test situation 4 (also test take null + inlined)
10871108
None,
1088-
Some("this string is quite long"), // buffer 1
1109+
Some("foo"),
1110+
Some("another string that is is quite long"),
1111+
Some("this string not so long"),
1112+
// Test situation 5 (also test take null + inlined + insert again after taking)
10891113
None,
1090-
Some("another string that is is quite long"), // buffer 1
10911114
Some("bar"),
1115+
Some("this string is quite long"),
1116+
// Finally, we insert the whole array again for testing situation 6
10921117
]);
10931118
let input_array: ArrayRef = Arc::new(input_array);
10941119
for row in 0..input_array.len() {
@@ -1097,45 +1122,71 @@ mod tests {
10971122

10981123
// should be 2 completed, one in progress buffer to hold all output
10991124
assert_eq!(builder.completed.len(), 2);
1125+
println!("{}", builder.in_progress.len());
11001126
assert!(!builder.in_progress.is_empty());
11011127

1102-
let first_4 = builder.take_n(4);
1128+
// Take all `inlined`s
1129+
let taken_array = builder.take_n(2);
11031130
println!(
11041131
"{}",
11051132
arrow::util::pretty::pretty_format_columns(
1106-
"first_4",
1107-
&[Arc::clone(&first_4)]
1133+
"taken_array",
1134+
&[Arc::clone(&taken_array)]
11081135
)
11091136
.unwrap()
11101137
);
1111-
assert_eq!(&first_4, &input_array.slice(0, 4));
1138+
assert_eq!(&taken_array, &input_array.slice(0, 2));
11121139

1113-
// Add some new data after the first n
1114-
let input_array = StringViewArray::from(vec![
1115-
Some("short"),
1116-
None,
1117-
Some("Some new data to add that is long"), // in buffer 0
1118-
Some("short again"),
1119-
]);
1120-
let input_array: ArrayRef = Arc::new(input_array);
1121-
for row in 0..input_array.len() {
1122-
builder.append_val(&input_array, row);
1123-
}
1140+
// Take non-inlined + partial buffer 0
1141+
let taken_array = builder.take_n(1);
1142+
println!(
1143+
"{}",
1144+
arrow::util::pretty::pretty_format_columns(
1145+
"taken_array",
1146+
&[Arc::clone(&taken_array)]
1147+
)
1148+
.unwrap()
1149+
);
1150+
assert_eq!(&taken_array, &input_array.slice(2, 1));
11241151

1125-
let result = Box::new(builder).build();
1126-
let expected: ArrayRef = Arc::new(StringViewArray::from(vec![
1127-
// last rows of the original input
1128-
None,
1129-
Some("this string is quite long"),
1130-
None,
1131-
Some("another string that is is quite long"),
1132-
Some("bar"),
1133-
// the subsequent input
1134-
Some("short"),
1135-
None,
1136-
Some("Some new data to add that is long"), // in buffer 0
1137-
Some("short again"),
1138-
]));
1139-
assert_eq!(&result, &expected);
1152+
// Take non-inlined + remaining partial buffer 0
1153+
let taken_array = builder.take_n(1);
1154+
println!(
1155+
"{}",
1156+
arrow::util::pretty::pretty_format_columns(
1157+
"taken_array",
1158+
&[Arc::clone(&taken_array)]
1159+
)
1160+
.unwrap()
1161+
);
1162+
assert_eq!(&taken_array, &input_array.slice(3, 1));
1163+
1164+
// Add some new data after the first n
1165+
// let input_array = StringViewArray::from(vec![
1166+
// Some("short"),
1167+
// None,
1168+
// Some("Some new data to add that is long"), // in buffer 0
1169+
// Some("short again"),
1170+
// ]);
1171+
// let input_array: ArrayRef = Arc::new(input_array);
1172+
// for row in 0..input_array.len() {
1173+
// builder.append_val(&input_array, row);
1174+
// }
1175+
1176+
// let result = Box::new(builder).build();
1177+
// let expected: ArrayRef = Arc::new(StringViewArray::from(vec![
1178+
// // last rows of the original input
1179+
// None,
1180+
// Some("this string is quite long"),
1181+
// None,
1182+
// Some("another string that is is quite long"),
1183+
// Some("bar"),
1184+
// // the subsequent input
1185+
// Some("short"),
1186+
// None,
1187+
// Some("Some new data to add that is long"), // in buffer 0
1188+
// Some("short again"),
1189+
// ]));
1190+
// assert_eq!(&result, &expected);
11401191
}
11411192
}

0 commit comments

Comments
 (0)