@@ -125,5 +125,124 @@ fn test_vec_ranges() {
125
125
eq_its ( soa. get_mut ( range. clone ( ) ) . unwrap ( ) . iter ( ) , particles. get ( range. clone ( ) ) . unwrap ( ) . iter ( ) ) ;
126
126
unsafe { eq_its ( soa. get_unchecked_mut ( range. clone ( ) ) . iter ( ) , particles. get_unchecked ( range. clone ( ) ) . iter ( ) ) ; }
127
127
eq_its ( soa. index_mut ( range. clone ( ) ) . iter ( ) , particles[ range. clone ( ) ] . iter ( ) ) ;
128
+ }
129
+
130
+ #[ test]
131
+ fn test_slice_usize ( ) {
132
+ let mut aos = Vec :: new ( ) ;
133
+ let mut soa = ParticleVec :: new ( ) ;
134
+
135
+ let particle = Particle :: new ( String :: from ( "Na" ) , 56.0 ) ;
136
+ aos. push ( particle. clone ( ) ) ;
137
+ soa. push ( particle. clone ( ) ) ;
138
+
139
+ // SoaIndex
140
+ let aos_slice = aos. as_slice ( ) ;
141
+ let soa_slice = soa. as_slice ( ) ;
142
+
143
+ assert_eq ! ( soa_slice. get( 0 ) . unwrap( ) . name, & aos_slice. get( 0 ) . unwrap( ) . name) ;
144
+ assert_eq ! ( soa_slice. get( 0 ) . unwrap( ) . mass, & aos_slice. get( 0 ) . unwrap( ) . mass) ;
145
+ assert_eq ! ( aos_slice. get( 1 ) , None ) ;
146
+ assert_eq ! ( soa_slice. get( 1 ) , None ) ;
147
+
148
+ unsafe {
149
+ assert_eq ! ( soa_slice. get_unchecked( 0 ) . name, & aos_slice. get_unchecked( 0 ) . name) ;
150
+ assert_eq ! ( soa_slice. get_unchecked( 0 ) . mass, & aos_slice. get_unchecked( 0 ) . mass) ;
151
+ }
152
+
153
+ assert_eq ! ( soa_slice. index( 0 ) . name, & aos_slice[ 0 ] . name) ;
154
+ assert_eq ! ( soa_slice. index( 0 ) . mass, & aos_slice[ 0 ] . mass) ;
155
+
156
+
157
+ // SoaIndexMut
158
+ let aos_mut_slice = aos. as_mut_slice ( ) ;
159
+ let mut soa_mut_slice = soa. as_mut_slice ( ) ;
160
+ assert_eq ! ( soa_mut_slice. get_mut( 0 ) . unwrap( ) . name, & aos_mut_slice. get_mut( 0 ) . unwrap( ) . name) ;
161
+ assert_eq ! ( soa_mut_slice. get_mut( 0 ) . unwrap( ) . mass, & aos_mut_slice. get_mut( 0 ) . unwrap( ) . mass) ;
162
+ assert_eq ! ( soa_mut_slice. get_mut( 0 ) . unwrap( ) . mass, & aos_mut_slice. get_mut( 0 ) . unwrap( ) . mass) ;
163
+ assert_eq ! ( aos_mut_slice. get_mut( 1 ) , None ) ;
164
+ assert_eq ! ( soa_mut_slice. get_mut( 1 ) , None ) ;
165
+
166
+ unsafe {
167
+ assert_eq ! ( soa_mut_slice. get_unchecked_mut( 0 ) . name, & aos_mut_slice. get_unchecked_mut( 0 ) . name) ;
168
+ assert_eq ! ( soa_mut_slice. get_unchecked_mut( 0 ) . mass, & aos_mut_slice. get_unchecked_mut( 0 ) . mass) ;
169
+ }
170
+
171
+ assert_eq ! ( soa_mut_slice. index_mut( 0 ) . name, & aos_mut_slice[ 0 ] . name) ;
172
+ assert_eq ! ( soa_mut_slice. index_mut( 0 ) . mass, & aos_mut_slice[ 0 ] . mass) ;
173
+
174
+
175
+ * soa_mut_slice. index_mut ( 0 ) . mass -= 1. ;
176
+ assert_eq ! ( soa_mut_slice. get( 0 ) . map( |p| * p. mass) , Some ( particle. mass - 1. ) ) ;
177
+
178
+ * soa_mut_slice. get_mut ( 0 ) . unwrap ( ) . mass += 1. ;
179
+ assert_eq ! ( soa_mut_slice. get( 0 ) . map( |p| * p. mass) , Some ( particle. mass) ) ;
180
+ }
181
+
182
+ #[ test]
183
+ fn test_slice_ranges ( ) {
184
+ let mut particles = Vec :: new ( ) ;
185
+ particles. push ( Particle :: new ( String :: from ( "Cl" ) , 1.0 ) ) ;
186
+ particles. push ( Particle :: new ( String :: from ( "Na" ) , 2.0 ) ) ;
187
+ particles. push ( Particle :: new ( String :: from ( "Br" ) , 3.0 ) ) ;
188
+ particles. push ( Particle :: new ( String :: from ( "Zn" ) , 4.0 ) ) ;
189
+
190
+ let mut soa = ParticleVec :: new ( ) ;
191
+
192
+ for particle in particles. iter ( ) {
193
+ soa. push ( particle. clone ( ) ) ;
194
+ }
195
+
196
+ eq_its ( soa. iter ( ) , particles. iter ( ) ) ;
128
197
129
- }
198
+ let mut soa_mut_slice = soa. as_mut_slice ( ) ;
199
+ // All tests from here are the same only changing the range
200
+
201
+ let range = 0 ..1 ;
202
+ eq_its ( soa_mut_slice. get ( range. clone ( ) ) . unwrap ( ) . iter ( ) , particles. get ( range. clone ( ) ) . unwrap ( ) . iter ( ) ) ;
203
+ unsafe { eq_its ( soa_mut_slice. get_unchecked ( range. clone ( ) ) . iter ( ) , particles. get_unchecked ( range. clone ( ) ) . iter ( ) ) ; }
204
+ eq_its ( soa_mut_slice. index ( range. clone ( ) ) . iter ( ) , particles[ range. clone ( ) ] . iter ( ) ) ;
205
+ eq_its ( soa_mut_slice. get_mut ( range. clone ( ) ) . unwrap ( ) . iter ( ) , particles. get ( range. clone ( ) ) . unwrap ( ) . iter ( ) ) ;
206
+ unsafe { eq_its ( soa_mut_slice. get_unchecked_mut ( range. clone ( ) ) . iter ( ) , particles. get_unchecked ( range. clone ( ) ) . iter ( ) ) ; }
207
+ eq_its ( soa_mut_slice. index_mut ( range. clone ( ) ) . iter ( ) , particles[ range. clone ( ) ] . iter ( ) ) ;
208
+
209
+ let range = ..3 ;
210
+ eq_its ( soa_mut_slice. get ( range. clone ( ) ) . unwrap ( ) . iter ( ) , particles. get ( range. clone ( ) ) . unwrap ( ) . iter ( ) ) ;
211
+ unsafe { eq_its ( soa_mut_slice. get_unchecked ( range. clone ( ) ) . iter ( ) , particles. get_unchecked ( range. clone ( ) ) . iter ( ) ) ; }
212
+ eq_its ( soa_mut_slice. index ( range. clone ( ) ) . iter ( ) , particles[ range. clone ( ) ] . iter ( ) ) ;
213
+ eq_its ( soa_mut_slice. get_mut ( range. clone ( ) ) . unwrap ( ) . iter ( ) , particles. get ( range. clone ( ) ) . unwrap ( ) . iter ( ) ) ;
214
+ unsafe { eq_its ( soa_mut_slice. get_unchecked_mut ( range. clone ( ) ) . iter ( ) , particles. get_unchecked ( range. clone ( ) ) . iter ( ) ) ; }
215
+ eq_its ( soa_mut_slice. index_mut ( range. clone ( ) ) . iter ( ) , particles[ range. clone ( ) ] . iter ( ) ) ;
216
+
217
+ let range = 1 ..;
218
+ eq_its ( soa_mut_slice. get ( range. clone ( ) ) . unwrap ( ) . iter ( ) , particles. get ( range. clone ( ) ) . unwrap ( ) . iter ( ) ) ;
219
+ unsafe { eq_its ( soa_mut_slice. get_unchecked ( range. clone ( ) ) . iter ( ) , particles. get_unchecked ( range. clone ( ) ) . iter ( ) ) ; }
220
+ eq_its ( soa_mut_slice. index ( range. clone ( ) ) . iter ( ) , particles[ range. clone ( ) ] . iter ( ) ) ;
221
+ eq_its ( soa_mut_slice. get_mut ( range. clone ( ) ) . unwrap ( ) . iter ( ) , particles. get ( range. clone ( ) ) . unwrap ( ) . iter ( ) ) ;
222
+ unsafe { eq_its ( soa_mut_slice. get_unchecked_mut ( range. clone ( ) ) . iter ( ) , particles. get_unchecked ( range. clone ( ) ) . iter ( ) ) ; }
223
+ eq_its ( soa_mut_slice. index_mut ( range. clone ( ) ) . iter ( ) , particles[ range. clone ( ) ] . iter ( ) ) ;
224
+
225
+ let range = ..;
226
+ eq_its ( soa_mut_slice. get ( range. clone ( ) ) . unwrap ( ) . iter ( ) , particles. get ( range. clone ( ) ) . unwrap ( ) . iter ( ) ) ;
227
+ unsafe { eq_its ( soa_mut_slice. get_unchecked ( range. clone ( ) ) . iter ( ) , particles. get_unchecked ( range. clone ( ) ) . iter ( ) ) ; }
228
+ eq_its ( soa_mut_slice. index ( range. clone ( ) ) . iter ( ) , particles[ range. clone ( ) ] . iter ( ) ) ;
229
+ eq_its ( soa_mut_slice. get_mut ( range. clone ( ) ) . unwrap ( ) . iter ( ) , particles. get ( range. clone ( ) ) . unwrap ( ) . iter ( ) ) ;
230
+ unsafe { eq_its ( soa_mut_slice. get_unchecked_mut ( range. clone ( ) ) . iter ( ) , particles. get_unchecked ( range. clone ( ) ) . iter ( ) ) ; }
231
+ eq_its ( soa_mut_slice. index_mut ( range. clone ( ) ) . iter ( ) , particles[ range. clone ( ) ] . iter ( ) ) ;
232
+
233
+ let range = 0 ..=1 ;
234
+ eq_its ( soa_mut_slice. get ( range. clone ( ) ) . unwrap ( ) . iter ( ) , particles. get ( range. clone ( ) ) . unwrap ( ) . iter ( ) ) ;
235
+ unsafe { eq_its ( soa_mut_slice. get_unchecked ( range. clone ( ) ) . iter ( ) , particles. get_unchecked ( range. clone ( ) ) . iter ( ) ) ; }
236
+ eq_its ( soa_mut_slice. index ( range. clone ( ) ) . iter ( ) , particles[ range. clone ( ) ] . iter ( ) ) ;
237
+ eq_its ( soa_mut_slice. get_mut ( range. clone ( ) ) . unwrap ( ) . iter ( ) , particles. get ( range. clone ( ) ) . unwrap ( ) . iter ( ) ) ;
238
+ unsafe { eq_its ( soa_mut_slice. get_unchecked_mut ( range. clone ( ) ) . iter ( ) , particles. get_unchecked ( range. clone ( ) ) . iter ( ) ) ; }
239
+ eq_its ( soa_mut_slice. index_mut ( range. clone ( ) ) . iter ( ) , particles[ range. clone ( ) ] . iter ( ) ) ;
240
+
241
+ let range = ..=2 ;
242
+ eq_its ( soa_mut_slice. get ( range. clone ( ) ) . unwrap ( ) . iter ( ) , particles. get ( range. clone ( ) ) . unwrap ( ) . iter ( ) ) ;
243
+ unsafe { eq_its ( soa_mut_slice. get_unchecked ( range. clone ( ) ) . iter ( ) , particles. get_unchecked ( range. clone ( ) ) . iter ( ) ) ; }
244
+ eq_its ( soa_mut_slice. index ( range. clone ( ) ) . iter ( ) , particles[ range. clone ( ) ] . iter ( ) ) ;
245
+ eq_its ( soa_mut_slice. get_mut ( range. clone ( ) ) . unwrap ( ) . iter ( ) , particles. get ( range. clone ( ) ) . unwrap ( ) . iter ( ) ) ;
246
+ unsafe { eq_its ( soa_mut_slice. get_unchecked_mut ( range. clone ( ) ) . iter ( ) , particles. get_unchecked ( range. clone ( ) ) . iter ( ) ) ; }
247
+ eq_its ( soa_mut_slice. index_mut ( range. clone ( ) ) . iter ( ) , particles[ range. clone ( ) ] . iter ( ) ) ;
248
+ }
0 commit comments