@@ -109,23 +109,83 @@ mod tests {
109109 use super :: Vector ;
110110
111111 #[ test]
112- fn test_len ( ) {
113- let mut vector = Vector :: new ( ) ;
112+ fn new_and_default_are_empty ( ) {
113+ let vector = Vector :: < i32 > :: new ( ) ;
114+ assert ! ( vector. is_empty( ) ) ;
114115 assert_eq ! ( vector. len( ) , 0 ) ;
115116
116- vector = vector. push ( 1 ) ;
117- assert_eq ! ( vector. len( ) , 1 ) ;
117+ let default_vector = Vector :: < i32 > :: default ( ) ;
118+ assert ! ( default_vector. is_empty( ) ) ;
119+ assert_eq ! ( default_vector. len( ) , 0 ) ;
120+ }
121+
122+ #[ test]
123+ fn push_update_remove_and_get ( ) {
124+ let vector = Vector :: new ( ) . push ( 1 ) . push ( 2 ) . push ( 3 ) ;
125+ assert_eq ! ( vector. len( ) , 3 ) ;
126+ assert_eq ! ( vector. get( 0 ) , Some ( & 1 ) ) ;
127+ assert_eq ! ( vector. get( 2 ) , Some ( & 3 ) ) ;
128+
129+ let vector = vector. update ( 1 , 10 ) ;
130+ assert_eq ! ( vector. get( 1 ) , Some ( & 10 ) ) ;
118131
119- vector = vector. push ( 2 ) ;
132+ let vector = vector. remove ( 0 ) ;
120133 assert_eq ! ( vector. len( ) , 2 ) ;
134+ assert_eq ! ( vector. get( 0 ) , Some ( & 10 ) ) ;
135+ assert_eq ! ( vector. get( 1 ) , Some ( & 3 ) ) ;
136+ }
137+
138+ #[ test]
139+ fn reverse_sort_and_sort_by ( ) {
140+ let vector = Vector :: new ( ) . push ( 3 ) . push ( 1 ) . push ( 2 ) ;
141+ let vector = vector. reverse ( ) ;
142+ assert_eq ! ( vector. get( 0 ) , Some ( & 2 ) ) ;
143+ assert_eq ! ( vector. get( 1 ) , Some ( & 1 ) ) ;
144+ assert_eq ! ( vector. get( 2 ) , Some ( & 3 ) ) ;
145+
146+ let vector = vector. sort ( ) ;
147+ assert_eq ! ( vector. get( 0 ) , Some ( & 1 ) ) ;
148+ assert_eq ! ( vector. get( 1 ) , Some ( & 2 ) ) ;
149+ assert_eq ! ( vector. get( 2 ) , Some ( & 3 ) ) ;
150+
151+ let vector = vector. sort_by ( |a, b| b. cmp ( a) ) ;
152+ assert_eq ! ( vector. get( 0 ) , Some ( & 3 ) ) ;
153+ assert_eq ! ( vector. get( 1 ) , Some ( & 2 ) ) ;
154+ assert_eq ! ( vector. get( 2 ) , Some ( & 1 ) ) ;
121155 }
122156
123157 #[ test]
124- fn test_is_empty ( ) {
125- let mut vector = Vector :: new ( ) ;
158+ fn pop_returns_removed_value ( ) {
159+ let vector = Vector :: new ( ) . push ( 1 ) . push ( 2 ) ;
160+ let ( vector, popped) = vector. pop ( ) ;
161+ assert_eq ! ( popped, Some ( 2 ) ) ;
162+ assert_eq ! ( vector. len( ) , 1 ) ;
163+
164+ let ( vector, popped) = vector. pop ( ) ;
165+ assert_eq ! ( popped, Some ( 1 ) ) ;
126166 assert ! ( vector. is_empty( ) ) ;
127167
128- vector = vector. push ( 1 ) ;
129- assert ! ( !vector. is_empty( ) ) ;
168+ let ( _, popped) = Vector :: < i32 > :: new ( ) . pop ( ) ;
169+ assert_eq ! ( popped, None ) ;
170+ }
171+
172+ #[ test]
173+ fn conversions_cover_all_variants ( ) {
174+ let base = vec ! [ 1 , 2 , 3 ] ;
175+
176+ let vector_from_vec = Vector :: from ( base. clone ( ) ) ;
177+ assert_eq ! ( vector_from_vec. len( ) , base. len( ) ) ;
178+
179+ let vec_from_vector: Vec < _ > = Vector :: from ( base. clone ( ) ) . into ( ) ;
180+ assert_eq ! ( vec_from_vector, base) ;
181+
182+ let vector_from_iter: Vector < _ > = base. clone ( ) . into_iter ( ) . collect ( ) ;
183+ assert_eq ! ( vector_from_iter. len( ) , base. len( ) ) ;
184+
185+ let vec_from_iter_vector: Vec < _ > = vector_from_iter. into ( ) ;
186+ assert_eq ! ( vec_from_iter_vector, base) ;
187+
188+ let iterated: Vec < _ > = Vector :: from ( vec ! [ 1 , 2 , 3 ] ) . into_iter ( ) . collect ( ) ;
189+ assert_eq ! ( iterated, vec![ 1 , 2 , 3 ] ) ;
130190 }
131191}
0 commit comments