@@ -58,3 +58,120 @@ where
5858
5959 * target = result;
6060}
61+
62+ #[ cfg( test) ]
63+ mod tests {
64+ use super :: * ;
65+
66+ #[ test]
67+ fn test_extend_sorted_vec_empty_other ( ) {
68+ let mut target = vec ! [ ( 1 , "a" ) , ( 2 , "b" ) , ( 3 , "c" ) ] ;
69+ let other: Vec < ( i32 , & str ) > = vec ! [ ] ;
70+ extend_sorted_vec ( & mut target, & other) ;
71+ assert_eq ! ( target, vec![ ( 1 , "a" ) , ( 2 , "b" ) , ( 3 , "c" ) ] ) ;
72+ }
73+
74+ #[ test]
75+ fn test_extend_sorted_vec_empty_target ( ) {
76+ let mut target: Vec < ( i32 , & str ) > = vec ! [ ] ;
77+ let other = vec ! [ ( 1 , "a" ) , ( 2 , "b" ) , ( 3 , "c" ) ] ;
78+ extend_sorted_vec ( & mut target, & other) ;
79+ assert_eq ! ( target, vec![ ( 1 , "a" ) , ( 2 , "b" ) , ( 3 , "c" ) ] ) ;
80+ }
81+
82+ #[ test]
83+ fn test_extend_sorted_vec_no_overlap ( ) {
84+ let mut target = vec ! [ ( 1 , "a" ) , ( 3 , "c" ) , ( 5 , "e" ) ] ;
85+ let other = vec ! [ ( 2 , "b" ) , ( 4 , "d" ) , ( 6 , "f" ) ] ;
86+ extend_sorted_vec ( & mut target, & other) ;
87+ assert_eq ! (
88+ target,
89+ vec![ ( 1 , "a" ) , ( 2 , "b" ) , ( 3 , "c" ) , ( 4 , "d" ) , ( 5 , "e" ) , ( 6 , "f" ) ]
90+ ) ;
91+ }
92+
93+ #[ test]
94+ fn test_extend_sorted_vec_with_duplicates_other_precedence ( ) {
95+ let mut target = vec ! [ ( 1 , "a" ) , ( 2 , "target" ) , ( 3 , "c" ) ] ;
96+ let other = vec ! [ ( 2 , "other" ) , ( 4 , "d" ) ] ;
97+ extend_sorted_vec ( & mut target, & other) ;
98+ // other's value should take precedence for key 2
99+ assert_eq ! ( target, vec![ ( 1 , "a" ) , ( 2 , "other" ) , ( 3 , "c" ) , ( 4 , "d" ) ] ) ;
100+ }
101+
102+ #[ test]
103+ fn test_extend_sorted_vec_all_other_before_target ( ) {
104+ let mut target = vec ! [ ( 5 , "e" ) , ( 6 , "f" ) ] ;
105+ let other = vec ! [ ( 1 , "a" ) , ( 2 , "b" ) , ( 3 , "c" ) ] ;
106+ extend_sorted_vec ( & mut target, & other) ;
107+ assert_eq ! (
108+ target,
109+ vec![ ( 1 , "a" ) , ( 2 , "b" ) , ( 3 , "c" ) , ( 5 , "e" ) , ( 6 , "f" ) ]
110+ ) ;
111+ }
112+
113+ #[ test]
114+ fn test_extend_sorted_vec_all_other_after_target ( ) {
115+ let mut target = vec ! [ ( 1 , "a" ) , ( 2 , "b" ) ] ;
116+ let other = vec ! [ ( 5 , "e" ) , ( 6 , "f" ) , ( 7 , "g" ) ] ;
117+ extend_sorted_vec ( & mut target, & other) ;
118+ assert_eq ! (
119+ target,
120+ vec![ ( 1 , "a" ) , ( 2 , "b" ) , ( 5 , "e" ) , ( 6 , "f" ) , ( 7 , "g" ) ]
121+ ) ;
122+ }
123+
124+ #[ test]
125+ fn test_extend_sorted_vec_interleaved ( ) {
126+ let mut target = vec ! [ ( 1 , "a" ) , ( 3 , "c" ) , ( 5 , "e" ) , ( 7 , "g" ) ] ;
127+ let other = vec ! [ ( 2 , "b" ) , ( 4 , "d" ) , ( 6 , "f" ) ] ;
128+ extend_sorted_vec ( & mut target, & other) ;
129+ assert_eq ! (
130+ target,
131+ vec![ ( 1 , "a" ) , ( 2 , "b" ) , ( 3 , "c" ) , ( 4 , "d" ) , ( 5 , "e" ) , ( 6 , "f" ) , ( 7 , "g" ) ]
132+ ) ;
133+ }
134+
135+ #[ test]
136+ fn test_extend_sorted_vec_multiple_duplicates ( ) {
137+ let mut target = vec ! [ ( 1 , "target1" ) , ( 2 , "target2" ) , ( 3 , "target3" ) ] ;
138+ let other = vec ! [ ( 1 , "other1" ) , ( 2 , "other2" ) , ( 3 , "other3" ) ] ;
139+ extend_sorted_vec ( & mut target, & other) ;
140+ // All other values should take precedence
141+ assert_eq ! ( target, vec![ ( 1 , "other1" ) , ( 2 , "other2" ) , ( 3 , "other3" ) ] ) ;
142+ }
143+
144+ #[ test]
145+ fn test_extend_sorted_vec_single_element_each ( ) {
146+ let mut target = vec ! [ ( 5 , "target" ) ] ;
147+ let other = vec ! [ ( 3 , "other" ) ] ;
148+ extend_sorted_vec ( & mut target, & other) ;
149+ assert_eq ! ( target, vec![ ( 3 , "other" ) , ( 5 , "target" ) ] ) ;
150+ }
151+
152+ #[ test]
153+ fn test_extend_sorted_vec_same_key_different_values ( ) {
154+ let mut target = vec ! [ ( 1 , "original" ) ] ;
155+ let other = vec ! [ ( 1 , "override" ) ] ;
156+ extend_sorted_vec ( & mut target, & other) ;
157+ assert_eq ! ( target, vec![ ( 1 , "override" ) ] ) ;
158+ }
159+
160+ #[ test]
161+ fn test_extend_sorted_vec_large_merge ( ) {
162+ let mut target: Vec < ( i32 , i32 ) > = ( 0 ..100 ) . step_by ( 2 ) . map ( |i| ( i, i) ) . collect ( ) ;
163+ let other: Vec < ( i32 , i32 ) > = ( 1 ..100 ) . step_by ( 2 ) . map ( |i| ( i, i * 10 ) ) . collect ( ) ;
164+ extend_sorted_vec ( & mut target, & other) ;
165+
166+ // Verify sorted order
167+ for i in 0 ..( target. len ( ) - 1 ) {
168+ assert ! ( target[ i] . 0 < target[ i + 1 ] . 0 ) ;
169+ }
170+
171+ // Verify all keys are present
172+ assert_eq ! ( target. len( ) , 100 ) ;
173+
174+ // Verify other values took precedence for odd numbers
175+ assert_eq ! ( target[ 1 ] . 1 , 10 ) ; // key 1 should have value 10 from other
176+ }
177+ }
0 commit comments