Skip to content

Commit d27007f

Browse files
committed
add tests for array_chunks
1 parent d405347 commit d27007f

File tree

3 files changed

+92
-1
lines changed

3 files changed

+92
-1
lines changed

library/core/src/slice/mod.rs

-1
Original file line numberDiff line numberDiff line change
@@ -865,7 +865,6 @@ impl<T> [T] {
865865
/// ```
866866
///
867867
/// [`chunks`]: #method.chunks
868-
/// [`rchunks_exact`]: #method.rchunks_exact
869868
#[unstable(feature = "array_chunks", issue = "none")]
870869
#[inline]
871870
pub fn array_chunks<const N: usize>(&self) -> ArrayChunks<'_, T, N> {

library/core/tests/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#![feature(alloc_layout_extra)]
2+
#![feature(array_chunks)]
23
#![feature(bool_to_option)]
34
#![feature(bound_cloned)]
45
#![feature(box_syntax)]

library/core/tests/slice.rs

+91
Original file line numberDiff line numberDiff line change
@@ -473,6 +473,97 @@ fn test_chunks_exact_mut_zip() {
473473
assert_eq!(v1, [13, 14, 19, 20, 4]);
474474
}
475475

476+
#[test]
477+
fn test_array_chunks_infer() {
478+
let v: &[i32] = &[0, 1, 2, 3, 4, -4];
479+
let c = v.array_chunks();
480+
for &[a, b, c] in c {
481+
assert_eq!(a + b + c, 3);
482+
}
483+
484+
let v2: &[i32] = &[0, 1, 2, 3, 4, 5, 6];
485+
let total = v2.array_chunks().map(|&[a, b]| a * b).sum::<i32>();
486+
assert_eq!(total, 2 * 3 + 4 * 5);
487+
}
488+
489+
#[test]
490+
fn test_array_chunks_count() {
491+
let v: &[i32] = &[0, 1, 2, 3, 4, 5];
492+
let c = v.array_chunks::<3>();
493+
assert_eq!(c.count(), 2);
494+
495+
let v2: &[i32] = &[0, 1, 2, 3, 4];
496+
let c2 = v2.array_chunks::<2>();
497+
assert_eq!(c2.count(), 2);
498+
499+
let v3: &[i32] = &[];
500+
let c3 = v3.array_chunks::<2>();
501+
assert_eq!(c3.count(), 0);
502+
}
503+
504+
#[test]
505+
fn test_array_chunks_nth() {
506+
let v: &[i32] = &[0, 1, 2, 3, 4, 5];
507+
let mut c = v.array_chunks::<2>();
508+
assert_eq!(c.nth(1).unwrap(), &[2, 3]);
509+
assert_eq!(c.next().unwrap(), &[4, 5]);
510+
511+
let v2: &[i32] = &[0, 1, 2, 3, 4, 5, 6];
512+
let mut c2 = v2.array_chunks::<3>();
513+
assert_eq!(c2.nth(1).unwrap(), &[3, 4, 5]);
514+
assert_eq!(c2.next(), None);
515+
}
516+
517+
#[test]
518+
fn test_array_chunks_nth_back() {
519+
let v: &[i32] = &[0, 1, 2, 3, 4, 5];
520+
let mut c = v.array_chunks::<2>();
521+
assert_eq!(c.nth_back(1).unwrap(), &[2, 3]);
522+
assert_eq!(c.next().unwrap(), &[0, 1]);
523+
assert_eq!(c.next(), None);
524+
525+
let v2: &[i32] = &[0, 1, 2, 3, 4];
526+
let mut c2 = v2.array_chunks::<3>();
527+
assert_eq!(c2.nth_back(0).unwrap(), &[0, 1, 2]);
528+
assert_eq!(c2.next(), None);
529+
assert_eq!(c2.next_back(), None);
530+
531+
let v3: &[i32] = &[0, 1, 2, 3, 4];
532+
let mut c3 = v3.array_chunks::<10>();
533+
assert_eq!(c3.nth_back(0), None);
534+
}
535+
536+
#[test]
537+
fn test_array_chunks_last() {
538+
let v: &[i32] = &[0, 1, 2, 3, 4, 5];
539+
let c = v.array_chunks::<2>();
540+
assert_eq!(c.last().unwrap(), &[4, 5]);
541+
542+
let v2: &[i32] = &[0, 1, 2, 3, 4];
543+
let c2 = v2.array_chunks::<2>();
544+
assert_eq!(c2.last().unwrap(), &[2, 3]);
545+
}
546+
547+
#[test]
548+
fn test_array_chunks_remainder() {
549+
let v: &[i32] = &[0, 1, 2, 3, 4];
550+
let c = v.array_chunks::<2>();
551+
assert_eq!(c.remainder(), &[4]);
552+
}
553+
554+
#[test]
555+
fn test_array_chunks_zip() {
556+
let v1: &[i32] = &[0, 1, 2, 3, 4];
557+
let v2: &[i32] = &[6, 7, 8, 9, 10];
558+
559+
let res = v1
560+
.array_chunks::<2>()
561+
.zip(v2.array_chunks::<2>())
562+
.map(|(a, b)| a.iter().sum::<i32>() + b.iter().sum::<i32>())
563+
.collect::<Vec<_>>();
564+
assert_eq!(res, vec![14, 22]);
565+
}
566+
476567
#[test]
477568
fn test_rchunks_count() {
478569
let v: &[i32] = &[0, 1, 2, 3, 4, 5];

0 commit comments

Comments
 (0)