@@ -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