Skip to content

Commit 6b4e961

Browse files
mangelatsLuthaf
authored andcommitted
Add tests for slice index methods
1 parent 81aeb97 commit 6b4e961

File tree

1 file changed

+120
-1
lines changed

1 file changed

+120
-1
lines changed

tests/index.rs

Lines changed: 120 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,5 +125,124 @@ fn test_vec_ranges() {
125125
eq_its(soa.get_mut(range.clone()).unwrap().iter(), particles.get(range.clone()).unwrap().iter());
126126
unsafe { eq_its(soa.get_unchecked_mut(range.clone()).iter(), particles.get_unchecked(range.clone()).iter()); }
127127
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());
128197

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

Comments
 (0)