Skip to content

Commit 73ab8a3

Browse files
committed
patch: add more test and code style improvements
Signed-off-by: 蔡略 <[email protected]>
1 parent c45acb8 commit 73ab8a3

File tree

1 file changed

+28
-6
lines changed

1 file changed

+28
-6
lines changed

arrow-array/src/array/byte_view_array.rs

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -594,8 +594,6 @@ impl From<Vec<Option<String>>> for StringViewArray {
594594

595595
/// A helper struct that used to check if the array is compact view
596596
///
597-
/// # Note
598-
///
599597
/// The checker is lazy and will not check the array until `finish` is called.
600598
///
601599
/// This is based on the assumption that the array will most likely to be not compact,
@@ -635,7 +633,7 @@ impl CompactChecker {
635633
pub fn finish(self) -> bool {
636634
// check if the coverage is continuous and full
637635
let mut last_end = 0;
638-
// todo: can be optimized
636+
639637
for (start, end) in self.intervals.iter() {
640638
if *start > last_end {
641639
return false;
@@ -814,14 +812,17 @@ mod tests {
814812
#[test]
815813
fn test_compact_checker() {
816814
use super::CompactChecker;
815+
817816
// single coverage, full
818817
let mut checker = CompactChecker::new(10);
819818
checker.accumulate(0, 10);
820819
assert!(checker.finish());
820+
821821
// single coverage, partial
822822
let mut checker = CompactChecker::new(10);
823823
checker.accumulate(0, 5);
824824
assert!(!checker.finish());
825+
825826
// multiple coverage, no overlapping, partial
826827
let mut checker = CompactChecker::new(10);
827828
checker.accumulate(0, 5);
@@ -833,6 +834,7 @@ mod tests {
833834
checker.accumulate(0, 5);
834835
checker.accumulate(5, 5);
835836
assert!(checker.finish());
837+
836838
//multiple coverage, overlapping, partial
837839
let mut checker = CompactChecker::new(10);
838840
checker.accumulate(0, 5);
@@ -844,6 +846,7 @@ mod tests {
844846
checker.accumulate(0, 5);
845847
checker.accumulate(4, 6);
846848
assert!(checker.finish());
849+
847850
//mutiple coverage, no overlapping, full, out of order
848851
let mut checker = CompactChecker::new(10);
849852
checker.accumulate(4, 6);
@@ -862,42 +865,57 @@ mod tests {
862865
checker.accumulate(5, 0);
863866
checker.accumulate(5, 5);
864867
assert!(checker.finish());
868+
865869
// multiple coverage, overlapping, full, containing null
866870
let mut checker = CompactChecker::new(10);
867871
checker.accumulate(0, 5);
868872
checker.accumulate(5, 0);
869873
checker.accumulate(4, 6);
870874
checker.accumulate(5, 5);
871875
assert!(checker.finish());
876+
877+
// multiple coverage, overlapping, full, containing null
878+
//
879+
// this case is for attacking those implementation that only check
880+
// the lower-bound of the interval
881+
let mut checker = CompactChecker::new(10);
882+
checker.accumulate(0, 5);
883+
checker.accumulate(5, 0);
884+
checker.accumulate(1, 9);
885+
checker.accumulate(2, 3);
886+
checker.accumulate(3, 1);
887+
checker.accumulate(9, 2);
888+
assert!(checker.finish())
872889
}
873890

874891
#[test]
875892
fn test_gc() {
893+
// ---------------------------------------------------------------------
876894
// test compact on compacted data
895+
877896
let array = {
878897
let mut builder = StringViewBuilder::new();
879898
builder.append_value("I look at you all");
880899
builder.append_option(Some("see the love there that's sleeping"));
881900
builder.finish()
882901
};
883-
884902
let compacted = array.gc();
885903
// verify it is a shallow copy
886904
assert_eq!(array.buffers[0].as_ptr(), compacted.buffers[0].as_ptr());
887905

906+
// ---------------------------------------------------------------------
888907
// test compact on non-compacted data
908+
889909
let mut array = {
890910
let mut builder = StringViewBuilder::new();
891911
builder.append_value("while my guitar gently weeps");
892912
builder.finish()
893913
};
894-
895914
// shrink the view
896915
let mut view = ByteView::from(array.views[0]);
897916
view.length = 15;
898917
let new_views = ScalarBuffer::from(vec![view.into()]);
899918
array.views = new_views;
900-
901919
let compacted = array.gc();
902920
// verify it is a deep copy
903921
assert_ne!(array.buffers[0].as_ptr(), compacted.buffers[0].as_ptr());
@@ -906,7 +924,9 @@ mod tests {
906924
// verify compacted
907925
assert!(compacted.compact_check().iter().all(|x| *x));
908926

927+
// ---------------------------------------------------------------------
909928
// test compact on array containing null
929+
910930
let mut array = {
911931
let mut builder = StringViewBuilder::new();
912932
builder.append_null();
@@ -926,7 +946,9 @@ mod tests {
926946
assert_eq!(array.value(1), compacted.value(1));
927947
assert!(compacted.compact_check().iter().all(|x| *x));
928948

949+
// ---------------------------------------------------------------------
929950
// test compact on multiple buffers
951+
930952
let mut array = {
931953
let mut builder = StringViewBuilder::new().with_block_size(15);
932954
builder.append_value("how to unfold your love");

0 commit comments

Comments
 (0)