Skip to content

Commit d587c2a

Browse files
authored
Rollup merge of rust-lang#85930 - mominul:array_into_iter, r=m-ou-se
Update standard library for IntoIterator implementation of arrays This PR partially resolves issue rust-lang#84513 of updating the standard library part. I haven't found any remaining doctest examples which are using iterators over e.g. &i32 instead of just i32 in the standard library. Can anyone point me to them if there's remaining any? Thanks! r? `@m-ou-se`
2 parents 917e6fd + 507d97b commit d587c2a

File tree

11 files changed

+55
-64
lines changed

11 files changed

+55
-64
lines changed

library/alloc/benches/vec.rs

+2-8
Original file line numberDiff line numberDiff line change
@@ -551,19 +551,13 @@ const LEN: usize = 16384;
551551
#[bench]
552552
fn bench_chain_collect(b: &mut Bencher) {
553553
let data = black_box([0; LEN]);
554-
b.iter(|| data.iter().cloned().chain([1].iter().cloned()).collect::<Vec<_>>());
554+
b.iter(|| data.iter().cloned().chain([1]).collect::<Vec<_>>());
555555
}
556556

557557
#[bench]
558558
fn bench_chain_chain_collect(b: &mut Bencher) {
559559
let data = black_box([0; LEN]);
560-
b.iter(|| {
561-
data.iter()
562-
.cloned()
563-
.chain([1].iter().cloned())
564-
.chain([2].iter().cloned())
565-
.collect::<Vec<_>>()
566-
});
560+
b.iter(|| data.iter().cloned().chain([1]).chain([2]).collect::<Vec<_>>());
567561
}
568562

569563
#[bench]

library/alloc/src/collections/vec_deque/pair_slices.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
use core::array;
21
use core::cmp::{self};
32
use core::mem::replace;
43

@@ -37,7 +36,7 @@ impl<'a, 'b, T> PairSlices<'a, 'b, T> {
3736
}
3837

3938
pub fn remainder(self) -> impl Iterator<Item = &'b [T]> {
40-
array::IntoIter::new([self.b0, self.b1])
39+
IntoIterator::into_iter([self.b0, self.b1])
4140
}
4241
}
4342

library/alloc/src/vec/mod.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -921,7 +921,7 @@ impl<T, A: Allocator> Vec<T, A> {
921921
///
922922
/// ```
923923
/// let mut vec = Vec::with_capacity(10);
924-
/// vec.extend([1, 2, 3].iter().cloned());
924+
/// vec.extend([1, 2, 3]);
925925
/// assert_eq!(vec.capacity(), 10);
926926
/// vec.shrink_to_fit();
927927
/// assert!(vec.capacity() >= 3);
@@ -950,7 +950,7 @@ impl<T, A: Allocator> Vec<T, A> {
950950
/// ```
951951
/// #![feature(shrink_to)]
952952
/// let mut vec = Vec::with_capacity(10);
953-
/// vec.extend([1, 2, 3].iter().cloned());
953+
/// vec.extend([1, 2, 3]);
954954
/// assert_eq!(vec.capacity(), 10);
955955
/// vec.shrink_to(4);
956956
/// assert!(vec.capacity() >= 4);
@@ -984,7 +984,7 @@ impl<T, A: Allocator> Vec<T, A> {
984984
///
985985
/// ```
986986
/// let mut vec = Vec::with_capacity(10);
987-
/// vec.extend([1, 2, 3].iter().cloned());
987+
/// vec.extend([1, 2, 3]);
988988
///
989989
/// assert_eq!(vec.capacity(), 10);
990990
/// let slice = vec.into_boxed_slice();
@@ -2586,7 +2586,7 @@ impl<T, A: Allocator> Vec<T, A> {
25862586
/// ```
25872587
/// let mut v = vec![1, 2, 3];
25882588
/// let new = [7, 8];
2589-
/// let u: Vec<_> = v.splice(..2, new.iter().cloned()).collect();
2589+
/// let u: Vec<_> = v.splice(..2, new).collect();
25902590
/// assert_eq!(v, &[7, 8, 3]);
25912591
/// assert_eq!(u, &[1, 2]);
25922592
/// ```

library/alloc/src/vec/splice.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use super::{Drain, Vec};
1414
/// ```
1515
/// let mut v = vec![0, 1, 2];
1616
/// let new = [7, 8];
17-
/// let iter: std::vec::Splice<_> = v.splice(1.., new.iter().cloned());
17+
/// let iter: std::vec::Splice<_> = v.splice(1.., new);
1818
/// ```
1919
#[derive(Debug)]
2020
#[stable(feature = "vec_splice", since = "1.21.0")]

library/alloc/tests/vec.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -793,7 +793,7 @@ fn test_drain_leak() {
793793
fn test_splice() {
794794
let mut v = vec![1, 2, 3, 4, 5];
795795
let a = [10, 11, 12];
796-
v.splice(2..4, a.iter().cloned());
796+
v.splice(2..4, a);
797797
assert_eq!(v, &[1, 2, 10, 11, 12, 5]);
798798
v.splice(1..3, Some(20));
799799
assert_eq!(v, &[1, 20, 11, 12, 5]);
@@ -803,7 +803,7 @@ fn test_splice() {
803803
fn test_splice_inclusive_range() {
804804
let mut v = vec![1, 2, 3, 4, 5];
805805
let a = [10, 11, 12];
806-
let t1: Vec<_> = v.splice(2..=3, a.iter().cloned()).collect();
806+
let t1: Vec<_> = v.splice(2..=3, a).collect();
807807
assert_eq!(v, &[1, 2, 10, 11, 12, 5]);
808808
assert_eq!(t1, &[3, 4]);
809809
let t2: Vec<_> = v.splice(1..=2, Some(20)).collect();
@@ -816,15 +816,15 @@ fn test_splice_inclusive_range() {
816816
fn test_splice_out_of_bounds() {
817817
let mut v = vec![1, 2, 3, 4, 5];
818818
let a = [10, 11, 12];
819-
v.splice(5..6, a.iter().cloned());
819+
v.splice(5..6, a);
820820
}
821821

822822
#[test]
823823
#[should_panic]
824824
fn test_splice_inclusive_out_of_bounds() {
825825
let mut v = vec![1, 2, 3, 4, 5];
826826
let a = [10, 11, 12];
827-
v.splice(5..=5, a.iter().cloned());
827+
v.splice(5..=5, a);
828828
}
829829

830830
#[test]
@@ -848,7 +848,7 @@ fn test_splice_unbounded() {
848848
fn test_splice_forget() {
849849
let mut v = vec![1, 2, 3, 4, 5];
850850
let a = [10, 11, 12];
851-
std::mem::forget(v.splice(2..4, a.iter().cloned()));
851+
std::mem::forget(v.splice(2..4, a));
852852
assert_eq!(v, &[1, 2]);
853853
}
854854

library/core/src/array/mod.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -416,7 +416,7 @@ impl<T, const N: usize> [T; N] {
416416
{
417417
// SAFETY: we know for certain that this iterator will yield exactly `N`
418418
// items.
419-
unsafe { collect_into_array_unchecked(&mut IntoIter::new(self).map(f)) }
419+
unsafe { collect_into_array_unchecked(&mut IntoIterator::into_iter(self).map(f)) }
420420
}
421421

422422
/// 'Zips up' two arrays into a single array of pairs.
@@ -437,7 +437,7 @@ impl<T, const N: usize> [T; N] {
437437
/// ```
438438
#[unstable(feature = "array_zip", issue = "80094")]
439439
pub fn zip<U>(self, rhs: [U; N]) -> [(T, U); N] {
440-
let mut iter = IntoIter::new(self).zip(IntoIter::new(rhs));
440+
let mut iter = IntoIterator::into_iter(self).zip(rhs);
441441

442442
// SAFETY: we know for certain that this iterator will yield exactly `N`
443443
// items.

library/core/src/char/methods.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ impl char {
5858
/// ];
5959
///
6060
/// assert_eq!(
61-
/// decode_utf16(v.iter().cloned())
61+
/// decode_utf16(v)
6262
/// .map(|r| r.map_err(|e| e.unpaired_surrogate()))
6363
/// .collect::<Vec<_>>(),
6464
/// vec![
@@ -82,7 +82,7 @@ impl char {
8282
/// ];
8383
///
8484
/// assert_eq!(
85-
/// decode_utf16(v.iter().cloned())
85+
/// decode_utf16(v)
8686
/// .map(|r| r.unwrap_or(REPLACEMENT_CHARACTER))
8787
/// .collect::<String>(),
8888
/// "𝄞mus�ic�"

library/core/tests/array.rs

+23-23
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use core::array::{self, IntoIter};
1+
use core::array;
22
use core::convert::TryFrom;
33

44
#[test]
@@ -41,44 +41,44 @@ fn array_try_from() {
4141
#[test]
4242
fn iterator_collect() {
4343
let arr = [0, 1, 2, 5, 9];
44-
let v: Vec<_> = IntoIter::new(arr.clone()).collect();
44+
let v: Vec<_> = IntoIterator::into_iter(arr.clone()).collect();
4545
assert_eq!(&arr[..], &v[..]);
4646
}
4747

4848
#[test]
4949
fn iterator_rev_collect() {
5050
let arr = [0, 1, 2, 5, 9];
51-
let v: Vec<_> = IntoIter::new(arr.clone()).rev().collect();
51+
let v: Vec<_> = IntoIterator::into_iter(arr.clone()).rev().collect();
5252
assert_eq!(&v[..], &[9, 5, 2, 1, 0]);
5353
}
5454

5555
#[test]
5656
fn iterator_nth() {
5757
let v = [0, 1, 2, 3, 4];
5858
for i in 0..v.len() {
59-
assert_eq!(IntoIter::new(v.clone()).nth(i).unwrap(), v[i]);
59+
assert_eq!(IntoIterator::into_iter(v.clone()).nth(i).unwrap(), v[i]);
6060
}
61-
assert_eq!(IntoIter::new(v.clone()).nth(v.len()), None);
61+
assert_eq!(IntoIterator::into_iter(v.clone()).nth(v.len()), None);
6262

63-
let mut iter = IntoIter::new(v);
63+
let mut iter = IntoIterator::into_iter(v);
6464
assert_eq!(iter.nth(2).unwrap(), v[2]);
6565
assert_eq!(iter.nth(1).unwrap(), v[4]);
6666
}
6767

6868
#[test]
6969
fn iterator_last() {
7070
let v = [0, 1, 2, 3, 4];
71-
assert_eq!(IntoIter::new(v).last().unwrap(), 4);
72-
assert_eq!(IntoIter::new([0]).last().unwrap(), 0);
71+
assert_eq!(IntoIterator::into_iter(v).last().unwrap(), 4);
72+
assert_eq!(IntoIterator::into_iter([0]).last().unwrap(), 0);
7373

74-
let mut it = IntoIter::new([0, 9, 2, 4]);
74+
let mut it = IntoIterator::into_iter([0, 9, 2, 4]);
7575
assert_eq!(it.next_back(), Some(4));
7676
assert_eq!(it.last(), Some(2));
7777
}
7878

7979
#[test]
8080
fn iterator_clone() {
81-
let mut it = IntoIter::new([0, 2, 4, 6, 8]);
81+
let mut it = IntoIterator::into_iter([0, 2, 4, 6, 8]);
8282
assert_eq!(it.next(), Some(0));
8383
assert_eq!(it.next_back(), Some(8));
8484
let mut clone = it.clone();
@@ -92,7 +92,7 @@ fn iterator_clone() {
9292

9393
#[test]
9494
fn iterator_fused() {
95-
let mut it = IntoIter::new([0, 9, 2]);
95+
let mut it = IntoIterator::into_iter([0, 9, 2]);
9696
assert_eq!(it.next(), Some(0));
9797
assert_eq!(it.next(), Some(9));
9898
assert_eq!(it.next(), Some(2));
@@ -105,7 +105,7 @@ fn iterator_fused() {
105105

106106
#[test]
107107
fn iterator_len() {
108-
let mut it = IntoIter::new([0, 1, 2, 5, 9]);
108+
let mut it = IntoIterator::into_iter([0, 1, 2, 5, 9]);
109109
assert_eq!(it.size_hint(), (5, Some(5)));
110110
assert_eq!(it.len(), 5);
111111
assert_eq!(it.is_empty(), false);
@@ -121,7 +121,7 @@ fn iterator_len() {
121121
assert_eq!(it.is_empty(), false);
122122

123123
// Empty
124-
let it = IntoIter::new([] as [String; 0]);
124+
let it = IntoIterator::into_iter([] as [String; 0]);
125125
assert_eq!(it.size_hint(), (0, Some(0)));
126126
assert_eq!(it.len(), 0);
127127
assert_eq!(it.is_empty(), true);
@@ -130,23 +130,23 @@ fn iterator_len() {
130130
#[test]
131131
fn iterator_count() {
132132
let v = [0, 1, 2, 3, 4];
133-
assert_eq!(IntoIter::new(v.clone()).count(), 5);
133+
assert_eq!(IntoIterator::into_iter(v.clone()).count(), 5);
134134

135-
let mut iter2 = IntoIter::new(v);
135+
let mut iter2 = IntoIterator::into_iter(v);
136136
iter2.next();
137137
iter2.next();
138138
assert_eq!(iter2.count(), 3);
139139
}
140140

141141
#[test]
142142
fn iterator_flat_map() {
143-
assert!((0..5).flat_map(|i| IntoIter::new([2 * i, 2 * i + 1])).eq(0..10));
143+
assert!((0..5).flat_map(|i| IntoIterator::into_iter([2 * i, 2 * i + 1])).eq(0..10));
144144
}
145145

146146
#[test]
147147
fn iterator_debug() {
148148
let arr = [0, 1, 2, 5, 9];
149-
assert_eq!(format!("{:?}", IntoIter::new(arr)), "IntoIter([0, 1, 2, 5, 9])",);
149+
assert_eq!(format!("{:?}", IntoIterator::into_iter(arr)), "IntoIter([0, 1, 2, 5, 9])",);
150150
}
151151

152152
#[test]
@@ -176,14 +176,14 @@ fn iterator_drops() {
176176
// Simple: drop new iterator.
177177
let i = Cell::new(0);
178178
{
179-
IntoIter::new(five(&i));
179+
IntoIterator::into_iter(five(&i));
180180
}
181181
assert_eq!(i.get(), 5);
182182

183183
// Call `next()` once.
184184
let i = Cell::new(0);
185185
{
186-
let mut iter = IntoIter::new(five(&i));
186+
let mut iter = IntoIterator::into_iter(five(&i));
187187
let _x = iter.next();
188188
assert_eq!(i.get(), 0);
189189
assert_eq!(iter.count(), 4);
@@ -194,7 +194,7 @@ fn iterator_drops() {
194194
// Check `clone` and calling `next`/`next_back`.
195195
let i = Cell::new(0);
196196
{
197-
let mut iter = IntoIter::new(five(&i));
197+
let mut iter = IntoIterator::into_iter(five(&i));
198198
iter.next();
199199
assert_eq!(i.get(), 1);
200200
iter.next_back();
@@ -217,7 +217,7 @@ fn iterator_drops() {
217217
// Check via `nth`.
218218
let i = Cell::new(0);
219219
{
220-
let mut iter = IntoIter::new(five(&i));
220+
let mut iter = IntoIterator::into_iter(five(&i));
221221
let _x = iter.nth(2);
222222
assert_eq!(i.get(), 2);
223223
let _y = iter.last();
@@ -227,13 +227,13 @@ fn iterator_drops() {
227227

228228
// Check every element.
229229
let i = Cell::new(0);
230-
for (index, _x) in IntoIter::new(five(&i)).enumerate() {
230+
for (index, _x) in IntoIterator::into_iter(five(&i)).enumerate() {
231231
assert_eq!(i.get(), index);
232232
}
233233
assert_eq!(i.get(), 5);
234234

235235
let i = Cell::new(0);
236-
for (index, _x) in IntoIter::new(five(&i)).rev().enumerate() {
236+
for (index, _x) in IntoIterator::into_iter(five(&i)).rev().enumerate() {
237237
assert_eq!(i.get(), index);
238238
}
239239
assert_eq!(i.get(), 5);

library/core/tests/iter/adapters/zip.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -236,9 +236,7 @@ fn test_zip_trusted_random_access_composition() {
236236
fn test_double_ended_zip() {
237237
let xs = [1, 2, 3, 4, 5, 6];
238238
let ys = [1, 2, 3, 7];
239-
let a = xs.iter().cloned();
240-
let b = ys.iter().cloned();
241-
let mut it = a.zip(b);
239+
let mut it = xs.iter().cloned().zip(ys);
242240
assert_eq!(it.next(), Some((1, 1)));
243241
assert_eq!(it.next(), Some((2, 2)));
244242
assert_eq!(it.next_back(), Some((4, 7)));

src/test/ui/const-generics/array-impls/into-iter-impls-length-32.rs

+7-7
Original file line numberDiff line numberDiff line change
@@ -9,31 +9,31 @@ use std::{
99
};
1010

1111
pub fn yes_iterator() -> impl Iterator<Item = i32> {
12-
IntoIter::new([0i32; 32])
12+
IntoIterator::into_iter([0i32; 32])
1313
}
1414

1515
pub fn yes_double_ended_iterator() -> impl DoubleEndedIterator {
16-
IntoIter::new([0i32; 32])
16+
IntoIterator::into_iter([0i32; 32])
1717
}
1818

1919
pub fn yes_exact_size_iterator() -> impl ExactSizeIterator {
20-
IntoIter::new([0i32; 32])
20+
IntoIterator::into_iter([0i32; 32])
2121
}
2222

2323
pub fn yes_fused_iterator() -> impl FusedIterator {
24-
IntoIter::new([0i32; 32])
24+
IntoIterator::into_iter([0i32; 32])
2525
}
2626

2727
pub fn yes_trusted_len() -> impl TrustedLen {
28-
IntoIter::new([0i32; 32])
28+
IntoIterator::into_iter([0i32; 32])
2929
}
3030

3131
pub fn yes_clone() -> impl Clone {
32-
IntoIter::new([0i32; 32])
32+
IntoIterator::into_iter([0i32; 32])
3333
}
3434

3535
pub fn yes_debug() -> impl Debug {
36-
IntoIter::new([0i32; 32])
36+
IntoIterator::into_iter([0i32; 32])
3737
}
3838

3939

0 commit comments

Comments
 (0)