Skip to content

Commit 27bf707

Browse files
committed
wip
Signed-off-by: Joe Isaacs <[email protected]>
1 parent 52f7ce3 commit 27bf707

File tree

1 file changed

+146
-0
lines changed

1 file changed

+146
-0
lines changed

vortex-vector/src/binaryview/vector.rs

Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -426,4 +426,150 @@ mod tests {
426426

427427
assert!(shared_vec.try_into_mut().is_ok());
428428
}
429+
430+
#[test]
431+
fn test_binaryview_eq_identical_inlined() {
432+
// Test equality with inlined strings (<=12 bytes).
433+
let mut v1 = StringVectorMut::with_capacity(3);
434+
v1.append_values("hello", 1);
435+
v1.append_values("world", 1);
436+
v1.append_values("test", 1);
437+
let v1 = v1.freeze();
438+
439+
let mut v2 = StringVectorMut::with_capacity(3);
440+
v2.append_values("hello", 1);
441+
v2.append_values("world", 1);
442+
v2.append_values("test", 1);
443+
let v2 = v2.freeze();
444+
445+
assert_eq!(v1, v2);
446+
}
447+
448+
#[test]
449+
fn test_binaryview_eq_identical_outlined() {
450+
// Test equality with outlined strings (>12 bytes).
451+
let mut v1 = StringVectorMut::with_capacity(2);
452+
v1.append_values("this is a longer string that won't be inlined", 1);
453+
v1.append_values("another long string for testing purposes", 1);
454+
let v1 = v1.freeze();
455+
456+
let mut v2 = StringVectorMut::with_capacity(2);
457+
v2.append_values("this is a longer string that won't be inlined", 1);
458+
v2.append_values("another long string for testing purposes", 1);
459+
let v2 = v2.freeze();
460+
461+
assert_eq!(v1, v2);
462+
}
463+
464+
#[test]
465+
fn test_binaryview_eq_different_length() {
466+
let mut v1 = StringVectorMut::with_capacity(3);
467+
v1.append_values("a", 1);
468+
v1.append_values("b", 1);
469+
v1.append_values("c", 1);
470+
let v1 = v1.freeze();
471+
472+
let mut v2 = StringVectorMut::with_capacity(2);
473+
v2.append_values("a", 1);
474+
v2.append_values("b", 1);
475+
let v2 = v2.freeze();
476+
477+
assert_ne!(v1, v2);
478+
}
479+
480+
#[test]
481+
fn test_binaryview_eq_different_validity() {
482+
let mut v1 = StringVectorMut::with_capacity(3);
483+
v1.append_values("a", 1);
484+
v1.append_values("b", 1);
485+
v1.append_values("c", 1);
486+
let v1 = v1.freeze();
487+
488+
let mut v2 = StringVectorMut::with_capacity(3);
489+
v2.append_values("a", 1);
490+
v2.append_nulls(1);
491+
v2.append_values("c", 1);
492+
let v2 = v2.freeze();
493+
494+
assert_ne!(v1, v2);
495+
}
496+
497+
#[test]
498+
fn test_binaryview_eq_different_values() {
499+
let mut v1 = StringVectorMut::with_capacity(3);
500+
v1.append_values("hello", 1);
501+
v1.append_values("world", 1);
502+
v1.append_values("test", 1);
503+
let v1 = v1.freeze();
504+
505+
let mut v2 = StringVectorMut::with_capacity(3);
506+
v2.append_values("hello", 1);
507+
v2.append_values("DIFFERENT", 1);
508+
v2.append_values("test", 1);
509+
let v2 = v2.freeze();
510+
511+
assert_ne!(v1, v2);
512+
}
513+
514+
#[test]
515+
fn test_binaryview_eq_ignores_invalid_positions_inlined() {
516+
// Two vectors with different values at invalid positions should be equal.
517+
let mut v1 = StringVectorMut::with_capacity(3);
518+
v1.append_values("hello", 1);
519+
v1.append_values("value_a", 1); // This will be masked as invalid
520+
v1.append_values("test", 1);
521+
let mut v1 = v1.freeze();
522+
// Mask position 1 as invalid
523+
v1.mask_validity(&Mask::from_iter([true, false, true]));
524+
525+
let mut v2 = StringVectorMut::with_capacity(3);
526+
v2.append_values("hello", 1);
527+
v2.append_values("value_b", 1); // Different value at invalid position
528+
v2.append_values("test", 1);
529+
let mut v2 = v2.freeze();
530+
v2.mask_validity(&Mask::from_iter([true, false, true]));
531+
532+
assert_eq!(v1, v2);
533+
}
534+
535+
#[test]
536+
fn test_binaryview_eq_ignores_invalid_positions_outlined() {
537+
// Test with outlined strings at invalid positions.
538+
let mut v1 = StringVectorMut::with_capacity(3);
539+
v1.append_values("this is a very long string that will be outlined", 1);
540+
v1.append_values("another long value that differs between vectors A", 1);
541+
v1.append_values("yet another long string for the test", 1);
542+
let mut v1 = v1.freeze();
543+
v1.mask_validity(&Mask::from_iter([true, false, true]));
544+
545+
let mut v2 = StringVectorMut::with_capacity(3);
546+
v2.append_values("this is a very long string that will be outlined", 1);
547+
v2.append_values("different long value at the invalid position B", 1);
548+
v2.append_values("yet another long string for the test", 1);
549+
let mut v2 = v2.freeze();
550+
v2.mask_validity(&Mask::from_iter([true, false, true]));
551+
552+
assert_eq!(v1, v2);
553+
}
554+
555+
#[test]
556+
fn test_binaryview_eq_empty() {
557+
let v1 = StringVectorMut::with_capacity(0).freeze();
558+
let v2 = StringVectorMut::with_capacity(0).freeze();
559+
560+
assert_eq!(v1, v2);
561+
}
562+
563+
#[test]
564+
fn test_binaryview_eq_all_nulls() {
565+
let mut v1 = StringVectorMut::with_capacity(3);
566+
v1.append_nulls(3);
567+
let v1 = v1.freeze();
568+
569+
let mut v2 = StringVectorMut::with_capacity(3);
570+
v2.append_nulls(3);
571+
let v2 = v2.freeze();
572+
573+
assert_eq!(v1, v2);
574+
}
429575
}

0 commit comments

Comments
 (0)