@@ -66,3 +66,106 @@ impl<K: Eq, V> VecMap<K, V> {
6666 self . 0 . iter ( ) . map ( |kv| & kv. 1 )
6767 }
6868}
69+
70+ #[ cfg( test) ]
71+ mod tests {
72+ use super :: * ;
73+
74+ #[ test]
75+ fn empty ( ) {
76+ let m: VecMap < char , u32 > = VecMap :: new ( ) ;
77+ assert ! ( m. is_empty( ) ) ;
78+ assert ! ( !m. contains( & 'a' ) ) ;
79+ assert ! ( m. values( ) . next( ) . is_none( ) ) ;
80+ }
81+
82+ #[ test]
83+ fn insert_update_get ( ) {
84+ let mut m: VecMap < char , u32 > = VecMap :: new ( ) ;
85+ assert ! ( m. insert( 'a' , 1 ) . is_none( ) ) ;
86+ assert ! ( m. insert( 'b' , 2 ) . is_none( ) ) ;
87+ assert_eq ! ( m. get( & 'a' ) , Some ( & 1 ) ) ;
88+ assert_eq ! ( m. get( & 'b' ) , Some ( & 2 ) ) ;
89+ * m. get_mut ( & 'a' ) . unwrap ( ) += 10 ;
90+ assert_eq ! ( m. get( & 'a' ) , Some ( & 11 ) ) ;
91+ assert_eq ! ( m. get( & 'b' ) , Some ( & 2 ) ) ;
92+ }
93+
94+ #[ test]
95+ fn insert_overwrite ( ) {
96+ let mut m = VecMap :: new ( ) ;
97+ assert_eq ! ( m. insert( 'a' , 1 ) , None ) ;
98+ assert_eq ! ( m. insert( 'b' , 2 ) , None ) ;
99+ assert_eq ! ( m. insert( 'a' , 3 ) , Some ( 1 ) ) ;
100+ assert_eq ! ( m. insert( 'a' , 4 ) , Some ( 3 ) ) ;
101+ assert_eq ! ( m. get( & 'a' ) . copied( ) , Some ( 4 ) ) ;
102+ assert_eq ! ( m. get( & 'b' ) . copied( ) , Some ( 2 ) ) ;
103+ assert_eq ! ( m. insert( 'b' , 5 ) , Some ( 2 ) ) ;
104+ assert_eq ! ( m. get( & 'a' ) . copied( ) , Some ( 4 ) ) ;
105+ assert_eq ! ( m. get( & 'b' ) . copied( ) , Some ( 5 ) ) ;
106+ }
107+
108+ #[ test]
109+ fn insert_remove ( ) {
110+ let mut m: VecMap < char , u32 > = VecMap :: new ( ) ;
111+ assert_eq ! ( m. remove( & 'a' ) , None ) ;
112+ m. insert ( 'a' , 1 ) ;
113+ m. insert ( 'b' , 2 ) ;
114+ assert_eq ! ( m. remove( & 'a' ) , Some ( 1 ) ) ;
115+ assert_eq ! ( m. remove( & 'a' ) , None ) ;
116+ assert_eq ! ( m. remove( & 'b' ) , Some ( 2 ) ) ;
117+ assert ! ( m. is_empty( ) ) ;
118+ }
119+
120+ #[ test]
121+ fn insertion_order ( ) {
122+ let mut m: VecMap < char , u32 > = VecMap :: new ( ) ;
123+ let values = |m : & VecMap < char , u32 > | -> Vec < u32 > { m. values ( ) . copied ( ) . collect ( ) } ;
124+ m. insert ( 'b' , 2 ) ;
125+ m. insert ( 'a' , 1 ) ;
126+ m. insert ( 'c' , 3 ) ;
127+ assert_eq ! ( values( & m) , vec![ 2 , 1 , 3 ] ) ;
128+ m. insert ( 'a' , 11 ) ;
129+ m. remove ( & 'b' ) ;
130+ assert_eq ! ( values( & m) , vec![ 11 , 3 ] ) ;
131+ m. insert ( 'b' , 2 ) ;
132+ assert_eq ! ( values( & m) , vec![ 11 , 3 , 2 ] ) ;
133+ }
134+
135+ #[ test]
136+ fn containment_equivalences ( ) {
137+ let mut m = VecMap :: new ( ) ;
138+ for i in 0u8 ..=255 {
139+ if i % 10 < 3 {
140+ m. insert ( i, i) ;
141+ }
142+ }
143+ for i in 0u8 ..=255 {
144+ if m. contains ( & i) {
145+ assert_eq ! ( m. get( & i) . copied( ) , Some ( i) ) ;
146+ assert_eq ! ( m. get_mut( & i) . copied( ) , Some ( i) ) ;
147+ assert_eq ! ( m. insert( i, i) , Some ( i) ) ;
148+ assert_eq ! ( m. remove( & i) , Some ( i) ) ;
149+ } else {
150+ assert ! ( m. get( & i) . is_none( ) ) ;
151+ assert ! ( m. get_mut( & i) . is_none( ) ) ;
152+ assert ! ( m. remove( & i) . is_none( ) ) ;
153+ assert ! ( m. insert( i, i) . is_none( ) ) ;
154+ }
155+ }
156+ }
157+
158+ #[ test]
159+ fn clear ( ) {
160+ let mut m = VecMap :: new ( ) ;
161+ m. clear ( ) ;
162+ assert ! ( m. is_empty( ) ) ;
163+ m. insert ( 'a' , 1 ) ;
164+ m. insert ( 'b' , 2 ) ;
165+ assert ! ( !m. is_empty( ) ) ;
166+ m. clear ( ) ;
167+ assert ! ( m. is_empty( ) ) ;
168+ m. insert ( 'c' , 3 ) ;
169+ assert ! ( !m. is_empty( ) ) ;
170+ }
171+ }
0 commit comments