1
Fork 0

Auto merge of #92070 - rukai:replace_vec_into_iter_with_array_into_iter, r=Mark-Simulacrum

Replace usages of vec![].into_iter with [].into_iter

`[].into_iter` is idiomatic over `vec![].into_iter` because its simpler and faster (unless the vec is optimized away in which case it would be the same)

So we should change all the implementation, documentation and tests to use it.

I skipped:
* `src/tools` - Those are copied in from upstream
* `src/test/ui` - Hard to tell if `vec![].into_iter` was used intentionally or not here and not much benefit to changing it.
*  any case where `vec![].into_iter` was used because we specifically needed a `Vec::IntoIter<T>`
*  any case where it looked like we were intentionally using `vec![].into_iter` to test it.
This commit is contained in:
bors 2022-01-11 14:23:24 +00:00
commit 2e2c86eba2
36 changed files with 116 additions and 122 deletions

View file

@ -791,7 +791,7 @@ fn get_rust_try_fn<'ll, 'tcx>(
))); )));
// `unsafe fn(unsafe fn(*mut i8) -> (), *mut i8, unsafe fn(*mut i8, *mut i8) -> ()) -> i32` // `unsafe fn(unsafe fn(*mut i8) -> (), *mut i8, unsafe fn(*mut i8, *mut i8) -> ()) -> i32`
let rust_fn_sig = ty::Binder::dummy(cx.tcx.mk_fn_sig( let rust_fn_sig = ty::Binder::dummy(cx.tcx.mk_fn_sig(
vec![try_fn_ty, i8p, catch_fn_ty].into_iter(), [try_fn_ty, i8p, catch_fn_ty].into_iter(),
tcx.types.i32, tcx.types.i32,
false, false,
hir::Unsafety::Unsafe, hir::Unsafety::Unsafe,

View file

@ -10,8 +10,8 @@ impl<T> ThinVec<T> {
fn test_from_iterator() { fn test_from_iterator() {
assert_eq!(std::iter::empty().collect::<ThinVec<String>>().into_vec(), Vec::<String>::new()); assert_eq!(std::iter::empty().collect::<ThinVec<String>>().into_vec(), Vec::<String>::new());
assert_eq!(std::iter::once(42).collect::<ThinVec<_>>().into_vec(), vec![42]); assert_eq!(std::iter::once(42).collect::<ThinVec<_>>().into_vec(), vec![42]);
assert_eq!(vec![1, 2].into_iter().collect::<ThinVec<_>>().into_vec(), vec![1, 2]); assert_eq!([1, 2].into_iter().collect::<ThinVec<_>>().into_vec(), vec![1, 2]);
assert_eq!(vec![1, 2, 3].into_iter().collect::<ThinVec<_>>().into_vec(), vec![1, 2, 3]); assert_eq!([1, 2, 3].into_iter().collect::<ThinVec<_>>().into_vec(), vec![1, 2, 3]);
} }
#[test] #[test]

View file

@ -14,7 +14,7 @@ fn test_from_iterator() {
); );
assert_eq!(std::iter::once((42, true)).collect::<VecMap<_, _>>().into_vec(), vec![(42, true)]); assert_eq!(std::iter::once((42, true)).collect::<VecMap<_, _>>().into_vec(), vec![(42, true)]);
assert_eq!( assert_eq!(
vec![(1, true), (2, false)].into_iter().collect::<VecMap<_, _>>().into_vec(), [(1, true), (2, false)].into_iter().collect::<VecMap<_, _>>().into_vec(),
vec![(1, true), (2, false)] vec![(1, true), (2, false)]
); );
} }
@ -41,7 +41,7 @@ fn test_insert() {
#[test] #[test]
fn test_get() { fn test_get() {
let v = vec![(1, true), (2, false)].into_iter().collect::<VecMap<_, _>>(); let v = [(1, true), (2, false)].into_iter().collect::<VecMap<_, _>>();
assert_eq!(v.get(&1), Some(&true)); assert_eq!(v.get(&1), Some(&true));
assert_eq!(v.get(&2), Some(&false)); assert_eq!(v.get(&2), Some(&false));
assert_eq!(v.get(&3), None); assert_eq!(v.get(&3), None);

View file

@ -455,7 +455,7 @@ impl DiagnosticSpan {
let backtrace_step = backtrace.next().map(|bt| { let backtrace_step = backtrace.next().map(|bt| {
let call_site = Self::from_span_full(bt.call_site, false, None, None, backtrace, je); let call_site = Self::from_span_full(bt.call_site, false, None, None, backtrace, je);
let def_site_span = let def_site_span =
Self::from_span_full(bt.def_site, false, None, None, vec![].into_iter(), je); Self::from_span_full(bt.def_site, false, None, None, [].into_iter(), je);
Box::new(DiagnosticSpanMacroExpansion { Box::new(DiagnosticSpanMacroExpansion {
span: call_site, span: call_site,
macro_decl_name: bt.kind.descr(), macro_decl_name: bt.kind.descr(),

View file

@ -158,7 +158,7 @@ impl FromInternal<(TreeAndSpacing, &'_ mut Vec<Self>, &mut Rustc<'_, '_>)>
for ch in data.as_str().chars() { for ch in data.as_str().chars() {
escaped.extend(ch.escape_debug()); escaped.extend(ch.escape_debug());
} }
let stream = vec![ let stream = [
Ident(sym::doc, false), Ident(sym::doc, false),
Eq, Eq,
TokenKind::lit(token::Str, Symbol::intern(&escaped), None), TokenKind::lit(token::Str, Symbol::intern(&escaped), None),
@ -221,7 +221,7 @@ impl ToInternal<TokenStream> for TokenTree<Group, Punct, Ident, Literal> {
let integer = TokenKind::lit(token::Integer, symbol, suffix); let integer = TokenKind::lit(token::Integer, symbol, suffix);
let a = tokenstream::TokenTree::token(minus, span); let a = tokenstream::TokenTree::token(minus, span);
let b = tokenstream::TokenTree::token(integer, span); let b = tokenstream::TokenTree::token(integer, span);
return vec![a, b].into_iter().collect(); return [a, b].into_iter().collect();
} }
TokenTree::Literal(self::Literal { TokenTree::Literal(self::Literal {
lit: token::Lit { kind: token::Float, symbol, suffix }, lit: token::Lit { kind: token::Float, symbol, suffix },
@ -232,7 +232,7 @@ impl ToInternal<TokenStream> for TokenTree<Group, Punct, Ident, Literal> {
let float = TokenKind::lit(token::Float, symbol, suffix); let float = TokenKind::lit(token::Float, symbol, suffix);
let a = tokenstream::TokenTree::token(minus, span); let a = tokenstream::TokenTree::token(minus, span);
let b = tokenstream::TokenTree::token(float, span); let b = tokenstream::TokenTree::token(float, span);
return vec![a, b].into_iter().collect(); return [a, b].into_iter().collect();
} }
TokenTree::Literal(self::Literal { lit, span }) => { TokenTree::Literal(self::Literal { lit, span }) => {
return tokenstream::TokenTree::token(Literal(lit), span).into(); return tokenstream::TokenTree::token(Literal(lit), span).into();

View file

@ -56,7 +56,7 @@ impl NodeLabels<&'static str> {
match self { match self {
UnlabelledNodes(len) => vec![None; len], UnlabelledNodes(len) => vec![None; len],
AllNodesLabelled(lbls) => lbls.into_iter().map(Some).collect(), AllNodesLabelled(lbls) => lbls.into_iter().map(Some).collect(),
SomeNodesLabelled(lbls) => lbls.into_iter().collect(), SomeNodesLabelled(lbls) => lbls,
} }
} }

View file

@ -13,7 +13,7 @@ fn test_all_except_most_recent() {
.keys() .keys()
.cloned() .cloned()
.collect::<FxHashSet<PathBuf>>(), .collect::<FxHashSet<PathBuf>>(),
vec![PathBuf::from("1"), PathBuf::from("2"), PathBuf::from("3"), PathBuf::from("4"),] [PathBuf::from("1"), PathBuf::from("2"), PathBuf::from("3"), PathBuf::from("4"),]
.into_iter() .into_iter()
.collect::<FxHashSet<PathBuf>>() .collect::<FxHashSet<PathBuf>>()
); );
@ -40,7 +40,7 @@ fn test_find_source_directory_in_iter() {
// Find newest // Find newest
assert_eq!( assert_eq!(
find_source_directory_in_iter( find_source_directory_in_iter(
vec![ [
PathBuf::from("crate-dir/s-3234-0000-svh"), PathBuf::from("crate-dir/s-3234-0000-svh"),
PathBuf::from("crate-dir/s-2234-0000-svh"), PathBuf::from("crate-dir/s-2234-0000-svh"),
PathBuf::from("crate-dir/s-1234-0000-svh") PathBuf::from("crate-dir/s-1234-0000-svh")
@ -54,7 +54,7 @@ fn test_find_source_directory_in_iter() {
// Filter out "-working" // Filter out "-working"
assert_eq!( assert_eq!(
find_source_directory_in_iter( find_source_directory_in_iter(
vec![ [
PathBuf::from("crate-dir/s-3234-0000-working"), PathBuf::from("crate-dir/s-3234-0000-working"),
PathBuf::from("crate-dir/s-2234-0000-svh"), PathBuf::from("crate-dir/s-2234-0000-svh"),
PathBuf::from("crate-dir/s-1234-0000-svh") PathBuf::from("crate-dir/s-1234-0000-svh")
@ -66,12 +66,12 @@ fn test_find_source_directory_in_iter() {
); );
// Handle empty // Handle empty
assert_eq!(find_source_directory_in_iter(vec![].into_iter(), &already_visited), None); assert_eq!(find_source_directory_in_iter([].into_iter(), &already_visited), None);
// Handle only working // Handle only working
assert_eq!( assert_eq!(
find_source_directory_in_iter( find_source_directory_in_iter(
vec![ [
PathBuf::from("crate-dir/s-3234-0000-working"), PathBuf::from("crate-dir/s-3234-0000-working"),
PathBuf::from("crate-dir/s-2234-0000-working"), PathBuf::from("crate-dir/s-2234-0000-working"),
PathBuf::from("crate-dir/s-1234-0000-working") PathBuf::from("crate-dir/s-1234-0000-working")

View file

@ -771,7 +771,7 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
self.suggest_boxing_for_return_impl_trait( self.suggest_boxing_for_return_impl_trait(
err, err,
ret_sp, ret_sp,
vec![then, else_sp].into_iter(), [then, else_sp].into_iter(),
); );
} }
} }
@ -807,10 +807,7 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
); );
let sugg = arm_spans let sugg = arm_spans
.flat_map(|sp| { .flat_map(|sp| {
vec![ [(sp.shrink_to_lo(), "Box::new(".to_string()), (sp.shrink_to_hi(), ")".to_string())]
(sp.shrink_to_lo(), "Box::new(".to_string()),
(sp.shrink_to_hi(), ")".to_string()),
]
.into_iter() .into_iter()
}) })
.collect::<Vec<_>>(); .collect::<Vec<_>>();

View file

@ -540,7 +540,7 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
// error[E0284]: type annotations needed // error[E0284]: type annotations needed
// --> file.rs:2:5 // --> file.rs:2:5
// | // |
// 2 | vec![Ok(2)].into_iter().collect()?; // 2 | [Ok(2)].into_iter().collect()?;
// | ^^^^^^^ cannot infer type // | ^^^^^^^ cannot infer type
// | // |
// = note: cannot resolve `<_ as std::ops::Try>::Ok == _` // = note: cannot resolve `<_ as std::ops::Try>::Ok == _`

View file

@ -550,7 +550,7 @@ impl<'a> Parser<'a> {
/// a diagnostic to suggest removing them. /// a diagnostic to suggest removing them.
/// ///
/// ```ignore (diagnostic) /// ```ignore (diagnostic)
/// let _ = vec![1, 2, 3].into_iter().collect::<Vec<usize>>>>(); /// let _ = [1, 2, 3].into_iter().collect::<Vec<usize>>>>();
/// ^^ help: remove extra angle brackets /// ^^ help: remove extra angle brackets
/// ``` /// ```
/// ///

View file

@ -17,12 +17,10 @@ pub fn target(target_cpu: String) -> Target {
linker: Some("avr-gcc".to_owned()), linker: Some("avr-gcc".to_owned()),
executables: true, executables: true,
eh_frame_header: false, eh_frame_header: false,
pre_link_args: vec![(LinkerFlavor::Gcc, vec![format!("-mmcu={}", target_cpu)])] pre_link_args: [(LinkerFlavor::Gcc, vec![format!("-mmcu={}", target_cpu)])]
.into_iter()
.collect(),
late_link_args: vec![(LinkerFlavor::Gcc, vec!["-lgcc".to_owned()])]
.into_iter() .into_iter()
.collect(), .collect(),
late_link_args: [(LinkerFlavor::Gcc, vec!["-lgcc".to_owned()])].into_iter().collect(),
max_atomic_width: Some(0), max_atomic_width: Some(0),
atomic_cas: false, atomic_cas: false,
..TargetOptions::default() ..TargetOptions::default()

View file

@ -574,15 +574,15 @@ impl ToJson for StackProbeType {
fn to_json(&self) -> Json { fn to_json(&self) -> Json {
Json::Object(match self { Json::Object(match self {
StackProbeType::None => { StackProbeType::None => {
vec![(String::from("kind"), "none".to_json())].into_iter().collect() [(String::from("kind"), "none".to_json())].into_iter().collect()
} }
StackProbeType::Inline => { StackProbeType::Inline => {
vec![(String::from("kind"), "inline".to_json())].into_iter().collect() [(String::from("kind"), "inline".to_json())].into_iter().collect()
} }
StackProbeType::Call => { StackProbeType::Call => {
vec![(String::from("kind"), "call".to_json())].into_iter().collect() [(String::from("kind"), "call".to_json())].into_iter().collect()
} }
StackProbeType::InlineOrCall { min_llvm_version_for_inline } => vec![ StackProbeType::InlineOrCall { min_llvm_version_for_inline } => [
(String::from("kind"), "inline-or-call".to_json()), (String::from("kind"), "inline-or-call".to_json()),
( (
String::from("min-llvm-version-for-inline"), String::from("min-llvm-version-for-inline"),

View file

@ -2247,7 +2247,7 @@ pub fn recursive_type_with_infinite_size_error(
spans spans
.iter() .iter()
.flat_map(|&span| { .flat_map(|&span| {
vec![ [
(span.shrink_to_lo(), "Box<".to_string()), (span.shrink_to_lo(), "Box<".to_string()),
(span.shrink_to_hi(), ">".to_string()), (span.shrink_to_hi(), ">".to_string()),
] ]

View file

@ -1226,7 +1226,7 @@ impl<'a, 'tcx> InferCtxtExt<'tcx> for InferCtxt<'a, 'tcx> {
.returns .returns
.iter() .iter()
.flat_map(|expr| { .flat_map(|expr| {
vec![ [
(expr.span.shrink_to_lo(), "Box::new(".to_string()), (expr.span.shrink_to_lo(), "Box::new(".to_string()),
(expr.span.shrink_to_hi(), ")".to_string()), (expr.span.shrink_to_hi(), ")".to_string()),
] ]

View file

@ -1953,7 +1953,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
ty::Generator(_, ref substs, _) => { ty::Generator(_, ref substs, _) => {
let ty = self.infcx.shallow_resolve(substs.as_generator().tupled_upvars_ty()); let ty = self.infcx.shallow_resolve(substs.as_generator().tupled_upvars_ty());
let witness = substs.as_generator().witness(); let witness = substs.as_generator().witness();
t.rebind(vec![ty].into_iter().chain(iter::once(witness)).collect()) t.rebind([ty].into_iter().chain(iter::once(witness)).collect())
} }
ty::GeneratorWitness(types) => { ty::GeneratorWitness(types) => {

View file

@ -1667,10 +1667,10 @@ impl<'tcx, 'exprs, E: AsCoercionSite> CoerceMany<'tcx, 'exprs, E> {
], ],
Applicability::MachineApplicable, Applicability::MachineApplicable,
); );
let sugg = vec![sp, cause.span] let sugg = [sp, cause.span]
.into_iter() .into_iter()
.flat_map(|sp| { .flat_map(|sp| {
vec![ [
(sp.shrink_to_lo(), "Box::new(".to_string()), (sp.shrink_to_lo(), "Box::new(".to_string()),
(sp.shrink_to_hi(), ")".to_string()), (sp.shrink_to_hi(), ")".to_string()),
] ]

View file

@ -86,7 +86,7 @@ pub fn determine_parameters_to_be_inferred<'a, 'tcx>(
fn lang_items(tcx: TyCtxt<'_>) -> Vec<(hir::HirId, Vec<ty::Variance>)> { fn lang_items(tcx: TyCtxt<'_>) -> Vec<(hir::HirId, Vec<ty::Variance>)> {
let lang_items = tcx.lang_items(); let lang_items = tcx.lang_items();
let all = vec![ let all = [
(lang_items.phantom_data(), vec![ty::Covariant]), (lang_items.phantom_data(), vec![ty::Covariant]),
(lang_items.unsafe_cell_type(), vec![ty::Invariant]), (lang_items.unsafe_cell_type(), vec![ty::Invariant]),
]; ];

View file

@ -728,7 +728,7 @@ fn test_range_large() {
#[test] #[test]
fn test_range_inclusive_max_value() { fn test_range_inclusive_max_value() {
let max = usize::MAX; let max = usize::MAX;
let map: BTreeMap<_, _> = vec![(max, 0)].into_iter().collect(); let map: BTreeMap<_, _> = [(max, 0)].into_iter().collect();
assert_eq!(map.range(max..=max).collect::<Vec<_>>(), &[(&max, &0)]); assert_eq!(map.range(max..=max).collect::<Vec<_>>(), &[(&max, &0)]);
} }
@ -2128,7 +2128,7 @@ fn test_into_iter_drop_leak_height_1() {
#[test] #[test]
fn test_into_keys() { fn test_into_keys() {
let vec = vec![(1, 'a'), (2, 'b'), (3, 'c')]; let vec = [(1, 'a'), (2, 'b'), (3, 'c')];
let map: BTreeMap<_, _> = vec.into_iter().collect(); let map: BTreeMap<_, _> = vec.into_iter().collect();
let keys: Vec<_> = map.into_keys().collect(); let keys: Vec<_> = map.into_keys().collect();

View file

@ -669,7 +669,7 @@ impl<T, A: Allocator> VecDeque<T, A> {
/// ``` /// ```
/// use std::collections::VecDeque; /// use std::collections::VecDeque;
/// ///
/// let mut buf: VecDeque<i32> = vec![1].into_iter().collect(); /// let mut buf: VecDeque<i32> = [1].into_iter().collect();
/// buf.reserve_exact(10); /// buf.reserve_exact(10);
/// assert!(buf.capacity() >= 11); /// assert!(buf.capacity() >= 11);
/// ``` /// ```
@ -692,7 +692,7 @@ impl<T, A: Allocator> VecDeque<T, A> {
/// ``` /// ```
/// use std::collections::VecDeque; /// use std::collections::VecDeque;
/// ///
/// let mut buf: VecDeque<i32> = vec![1].into_iter().collect(); /// let mut buf: VecDeque<i32> = [1].into_iter().collect();
/// buf.reserve(10); /// buf.reserve(10);
/// assert!(buf.capacity() >= 11); /// assert!(buf.capacity() >= 11);
/// ``` /// ```
@ -1153,7 +1153,7 @@ impl<T, A: Allocator> VecDeque<T, A> {
/// ``` /// ```
/// use std::collections::VecDeque; /// use std::collections::VecDeque;
/// ///
/// let v: VecDeque<_> = vec![1, 2, 3].into_iter().collect(); /// let v: VecDeque<_> = [1, 2, 3].into_iter().collect();
/// let range = v.range(2..).copied().collect::<VecDeque<_>>(); /// let range = v.range(2..).copied().collect::<VecDeque<_>>();
/// assert_eq!(range, [3]); /// assert_eq!(range, [3]);
/// ///
@ -1188,7 +1188,7 @@ impl<T, A: Allocator> VecDeque<T, A> {
/// ``` /// ```
/// use std::collections::VecDeque; /// use std::collections::VecDeque;
/// ///
/// let mut v: VecDeque<_> = vec![1, 2, 3].into_iter().collect(); /// let mut v: VecDeque<_> = [1, 2, 3].into_iter().collect();
/// for v in v.range_mut(2..) { /// for v in v.range_mut(2..) {
/// *v *= 2; /// *v *= 2;
/// } /// }
@ -1235,7 +1235,7 @@ impl<T, A: Allocator> VecDeque<T, A> {
/// ``` /// ```
/// use std::collections::VecDeque; /// use std::collections::VecDeque;
/// ///
/// let mut v: VecDeque<_> = vec![1, 2, 3].into_iter().collect(); /// let mut v: VecDeque<_> = [1, 2, 3].into_iter().collect();
/// let drained = v.drain(2..).collect::<VecDeque<_>>(); /// let drained = v.drain(2..).collect::<VecDeque<_>>();
/// assert_eq!(drained, [3]); /// assert_eq!(drained, [3]);
/// assert_eq!(v, [1, 2]); /// assert_eq!(v, [1, 2]);
@ -2025,7 +2025,7 @@ impl<T, A: Allocator> VecDeque<T, A> {
/// ``` /// ```
/// use std::collections::VecDeque; /// use std::collections::VecDeque;
/// ///
/// let mut buf: VecDeque<_> = vec![1, 2, 3].into_iter().collect(); /// let mut buf: VecDeque<_> = [1, 2, 3].into_iter().collect();
/// let buf2 = buf.split_off(1); /// let buf2 = buf.split_off(1);
/// assert_eq!(buf, [1]); /// assert_eq!(buf, [1]);
/// assert_eq!(buf2, [2, 3]); /// assert_eq!(buf2, [2, 3]);
@ -2091,8 +2091,8 @@ impl<T, A: Allocator> VecDeque<T, A> {
/// ``` /// ```
/// use std::collections::VecDeque; /// use std::collections::VecDeque;
/// ///
/// let mut buf: VecDeque<_> = vec![1, 2].into_iter().collect(); /// let mut buf: VecDeque<_> = [1, 2].into_iter().collect();
/// let mut buf2: VecDeque<_> = vec![3, 4].into_iter().collect(); /// let mut buf2: VecDeque<_> = [3, 4].into_iter().collect();
/// buf.append(&mut buf2); /// buf.append(&mut buf2);
/// assert_eq!(buf, [1, 2, 3, 4]); /// assert_eq!(buf, [1, 2, 3, 4]);
/// assert_eq!(buf2, []); /// assert_eq!(buf2, []);

View file

@ -304,7 +304,7 @@ fn test_show() {
let list: LinkedList<_> = (0..10).collect(); let list: LinkedList<_> = (0..10).collect();
assert_eq!(format!("{:?}", list), "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]"); assert_eq!(format!("{:?}", list), "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]");
let list: LinkedList<_> = vec!["just", "one", "test", "more"].iter().cloned().collect(); let list: LinkedList<_> = ["just", "one", "test", "more"].into_iter().collect();
assert_eq!(format!("{:?}", list), "[\"just\", \"one\", \"test\", \"more\"]"); assert_eq!(format!("{:?}", list), "[\"just\", \"one\", \"test\", \"more\"]");
} }
@ -336,7 +336,7 @@ fn test_extend() {
assert_eq!(a.len(), 4); assert_eq!(a.len(), 4);
assert!(a.iter().eq(&[1, 2, 3, 4])); assert!(a.iter().eq(&[1, 2, 3, 4]));
let b: LinkedList<_> = vec![5, 6, 7].into_iter().collect(); let b: LinkedList<_> = [5, 6, 7].into_iter().collect();
a.extend(b); // specializes to `append` a.extend(b); // specializes to `append`
assert_eq!(a.len(), 7); assert_eq!(a.len(), 7);
@ -375,7 +375,7 @@ fn drain_filter_empty() {
#[test] #[test]
fn drain_filter_zst() { fn drain_filter_zst() {
let mut list: LinkedList<_> = vec![(), (), (), (), ()].into_iter().collect(); let mut list: LinkedList<_> = [(), (), (), (), ()].into_iter().collect();
let initial_len = list.len(); let initial_len = list.len();
let mut count = 0; let mut count = 0;
@ -398,7 +398,7 @@ fn drain_filter_zst() {
#[test] #[test]
fn drain_filter_false() { fn drain_filter_false() {
let mut list: LinkedList<_> = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10].into_iter().collect(); let mut list: LinkedList<_> = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].into_iter().collect();
let initial_len = list.len(); let initial_len = list.len();
let mut count = 0; let mut count = 0;
@ -421,7 +421,7 @@ fn drain_filter_false() {
#[test] #[test]
fn drain_filter_true() { fn drain_filter_true() {
let mut list: LinkedList<_> = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10].into_iter().collect(); let mut list: LinkedList<_> = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].into_iter().collect();
let initial_len = list.len(); let initial_len = list.len();
let mut count = 0; let mut count = 0;
@ -447,7 +447,7 @@ fn drain_filter_true() {
fn drain_filter_complex() { fn drain_filter_complex() {
{ {
// [+xxx++++++xxxxx++++x+x++] // [+xxx++++++xxxxx++++x+x++]
let mut list = vec![ let mut list = [
1, 2, 4, 6, 7, 9, 11, 13, 15, 17, 18, 20, 22, 24, 26, 27, 29, 31, 33, 34, 35, 36, 37, 1, 2, 4, 6, 7, 9, 11, 13, 15, 17, 18, 20, 22, 24, 26, 27, 29, 31, 33, 34, 35, 36, 37,
39, 39,
] ]
@ -467,9 +467,8 @@ fn drain_filter_complex() {
{ {
// [xxx++++++xxxxx++++x+x++] // [xxx++++++xxxxx++++x+x++]
let mut list = vec![ let mut list =
2, 4, 6, 7, 9, 11, 13, 15, 17, 18, 20, 22, 24, 26, 27, 29, 31, 33, 34, 35, 36, 37, 39, [2, 4, 6, 7, 9, 11, 13, 15, 17, 18, 20, 22, 24, 26, 27, 29, 31, 33, 34, 35, 36, 37, 39]
]
.into_iter() .into_iter()
.collect::<LinkedList<_>>(); .collect::<LinkedList<_>>();
@ -487,7 +486,7 @@ fn drain_filter_complex() {
{ {
// [xxx++++++xxxxx++++x+x] // [xxx++++++xxxxx++++x+x]
let mut list = let mut list =
vec![2, 4, 6, 7, 9, 11, 13, 15, 17, 18, 20, 22, 24, 26, 27, 29, 31, 33, 34, 35, 36] [2, 4, 6, 7, 9, 11, 13, 15, 17, 18, 20, 22, 24, 26, 27, 29, 31, 33, 34, 35, 36]
.into_iter() .into_iter()
.collect::<LinkedList<_>>(); .collect::<LinkedList<_>>();
@ -504,7 +503,7 @@ fn drain_filter_complex() {
{ {
// [xxxxxxxxxx+++++++++++] // [xxxxxxxxxx+++++++++++]
let mut list = vec![2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19] let mut list = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
.into_iter() .into_iter()
.collect::<LinkedList<_>>(); .collect::<LinkedList<_>>();
@ -518,7 +517,7 @@ fn drain_filter_complex() {
{ {
// [+++++++++++xxxxxxxxxx] // [+++++++++++xxxxxxxxxx]
let mut list = vec![1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20] let mut list = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
.into_iter() .into_iter()
.collect::<LinkedList<_>>(); .collect::<LinkedList<_>>();

View file

@ -489,7 +489,7 @@ fn test_from_iterator() {
b.extend(u.chars()); b.extend(u.chars());
assert_eq!(s, b); assert_eq!(s, b);
let c: String = vec![t, u].into_iter().collect(); let c: String = [t, u].into_iter().collect();
assert_eq!(s, c); assert_eq!(s, c);
let mut d = t.to_string(); let mut d = t.to_string();

View file

@ -449,10 +449,10 @@ fn zero_sized_values() {
#[test] #[test]
fn test_partition() { fn test_partition() {
assert_eq!(vec![].into_iter().partition(|x: &i32| *x < 3), (vec![], vec![])); assert_eq!([].into_iter().partition(|x: &i32| *x < 3), (vec![], vec![]));
assert_eq!(vec![1, 2, 3].into_iter().partition(|x| *x < 4), (vec![1, 2, 3], vec![])); assert_eq!([1, 2, 3].into_iter().partition(|x| *x < 4), (vec![1, 2, 3], vec![]));
assert_eq!(vec![1, 2, 3].into_iter().partition(|x| *x < 2), (vec![1], vec![2, 3])); assert_eq!([1, 2, 3].into_iter().partition(|x| *x < 2), (vec![1], vec![2, 3]));
assert_eq!(vec![1, 2, 3].into_iter().partition(|x| *x < 0), (vec![], vec![1, 2, 3])); assert_eq!([1, 2, 3].into_iter().partition(|x| *x < 0), (vec![], vec![1, 2, 3]));
} }
#[test] #[test]
@ -924,7 +924,7 @@ fn test_into_iter_debug() {
#[test] #[test]
fn test_into_iter_count() { fn test_into_iter_count() {
assert_eq!(vec![1, 2, 3].into_iter().count(), 3); assert_eq!([1, 2, 3].into_iter().count(), 3);
} }
#[test] #[test]
@ -933,7 +933,7 @@ fn test_into_iter_clone() {
let v: Vec<i32> = it.collect(); let v: Vec<i32> = it.collect();
assert_eq!(&v[..], slice); assert_eq!(&v[..], slice);
} }
let mut it = vec![1, 2, 3].into_iter(); let mut it = [1, 2, 3].into_iter();
iter_equal(it.clone(), &[1, 2, 3]); iter_equal(it.clone(), &[1, 2, 3]);
assert_eq!(it.next(), Some(1)); assert_eq!(it.next(), Some(1));
let mut it = it.rev(); let mut it = it.rev();
@ -972,7 +972,7 @@ fn test_into_iter_leak() {
#[test] #[test]
fn test_into_iter_advance_by() { fn test_into_iter_advance_by() {
let mut i = vec![1, 2, 3, 4, 5].into_iter(); let mut i = [1, 2, 3, 4, 5].into_iter();
i.advance_by(0).unwrap(); i.advance_by(0).unwrap();
i.advance_back_by(0).unwrap(); i.advance_back_by(0).unwrap();
assert_eq!(i.as_slice(), [1, 2, 3, 4, 5]); assert_eq!(i.as_slice(), [1, 2, 3, 4, 5]);
@ -1799,7 +1799,7 @@ fn test_stable_pointers() {
assert_eq!(*v0, 13); assert_eq!(*v0, 13);
next_then_drop(v.splice(5..8, vec![1])); // replacement is smaller than original range next_then_drop(v.splice(5..8, vec![1])); // replacement is smaller than original range
assert_eq!(*v0, 13); assert_eq!(*v0, 13);
next_then_drop(v.splice(5..6, vec![1; 10].into_iter().filter(|_| true))); // lower bound not exact next_then_drop(v.splice(5..6, [1; 10].into_iter().filter(|_| true))); // lower bound not exact
assert_eq!(*v0, 13); assert_eq!(*v0, 13);
// spare_capacity_mut // spare_capacity_mut

View file

@ -927,8 +927,8 @@ fn test_as_mut_slices() {
#[test] #[test]
fn test_append() { fn test_append() {
let mut a: VecDeque<_> = vec![1, 2, 3].into_iter().collect(); let mut a: VecDeque<_> = [1, 2, 3].into_iter().collect();
let mut b: VecDeque<_> = vec![4, 5, 6].into_iter().collect(); let mut b: VecDeque<_> = [4, 5, 6].into_iter().collect();
// normal append // normal append
a.append(&mut b); a.append(&mut b);
@ -1209,7 +1209,7 @@ fn test_try_reserve() {
{ {
// Same basic idea, but with non-zero len // Same basic idea, but with non-zero len
let mut ten_bytes: VecDeque<u8> = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10].into_iter().collect(); let mut ten_bytes: VecDeque<u8> = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].into_iter().collect();
if let Err(CapacityOverflow) = ten_bytes.try_reserve(MAX_CAP - 10).map_err(|e| e.kind()) { if let Err(CapacityOverflow) = ten_bytes.try_reserve(MAX_CAP - 10).map_err(|e| e.kind()) {
panic!("isize::MAX shouldn't trigger an overflow!"); panic!("isize::MAX shouldn't trigger an overflow!");
@ -1240,7 +1240,7 @@ fn test_try_reserve() {
{ {
// Same basic idea, but with interesting type size // Same basic idea, but with interesting type size
let mut ten_u32s: VecDeque<u32> = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10].into_iter().collect(); let mut ten_u32s: VecDeque<u32> = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].into_iter().collect();
if let Err(CapacityOverflow) = ten_u32s.try_reserve(MAX_CAP / 4 - 10).map_err(|e| e.kind()) if let Err(CapacityOverflow) = ten_u32s.try_reserve(MAX_CAP / 4 - 10).map_err(|e| e.kind())
{ {
@ -1322,7 +1322,7 @@ fn test_try_reserve_exact() {
} }
{ {
let mut ten_bytes: VecDeque<u8> = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10].into_iter().collect(); let mut ten_bytes: VecDeque<u8> = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].into_iter().collect();
if let Err(CapacityOverflow) = if let Err(CapacityOverflow) =
ten_bytes.try_reserve_exact(MAX_CAP - 10).map_err(|e| e.kind()) ten_bytes.try_reserve_exact(MAX_CAP - 10).map_err(|e| e.kind())
@ -1355,7 +1355,7 @@ fn test_try_reserve_exact() {
} }
{ {
let mut ten_u32s: VecDeque<u32> = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10].into_iter().collect(); let mut ten_u32s: VecDeque<u32> = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].into_iter().collect();
if let Err(CapacityOverflow) = if let Err(CapacityOverflow) =
ten_u32s.try_reserve_exact(MAX_CAP / 4 - 10).map_err(|e| e.kind()) ten_u32s.try_reserve_exact(MAX_CAP / 4 - 10).map_err(|e| e.kind())

View file

@ -91,7 +91,7 @@ pub use num::FloatToInt;
/// ```rust /// ```rust
/// use std::convert::identity; /// use std::convert::identity;
/// ///
/// let iter = vec![Some(1), None, Some(3)].into_iter(); /// let iter = [Some(1), None, Some(3)].into_iter();
/// let filtered = iter.filter_map(identity).collect::<Vec<_>>(); /// let filtered = iter.filter_map(identity).collect::<Vec<_>>();
/// assert_eq!(vec![1, 3], filtered); /// assert_eq!(vec![1, 3], filtered);
/// ``` /// ```

View file

@ -19,7 +19,7 @@ use crate::ops::Try;
/// you can also [`map`] backwards: /// you can also [`map`] backwards:
/// ///
/// ```rust /// ```rust
/// let v: Vec<i32> = vec![1, 2, 3].into_iter().map(|x| x + 1).rev().collect(); /// let v: Vec<i32> = [1, 2, 3].into_iter().map(|x| x + 1).rev().collect();
/// ///
/// assert_eq!(v, [4, 3, 2]); /// assert_eq!(v, [4, 3, 2]);
/// ``` /// ```
@ -32,7 +32,7 @@ use crate::ops::Try;
/// ```rust /// ```rust
/// let mut c = 0; /// let mut c = 0;
/// ///
/// for pair in vec!['a', 'b', 'c'].into_iter() /// for pair in ['a', 'b', 'c'].into_iter()
/// .map(|letter| { c += 1; (letter, c) }) { /// .map(|letter| { c += 1; (letter, c) }) {
/// println!("{:?}", pair); /// println!("{:?}", pair);
/// } /// }
@ -49,7 +49,7 @@ use crate::ops::Try;
/// ```rust /// ```rust
/// let mut c = 0; /// let mut c = 0;
/// ///
/// for pair in vec!['a', 'b', 'c'].into_iter() /// for pair in ['a', 'b', 'c'].into_iter()
/// .map(|letter| { c += 1; (letter, c) }) /// .map(|letter| { c += 1; (letter, c) })
/// .rev() { /// .rev() {
/// println!("{:?}", pair); /// println!("{:?}", pair);

View file

@ -124,7 +124,7 @@ pub trait FromIterator<A>: Sized {
/// Basic usage: /// Basic usage:
/// ///
/// ``` /// ```
/// let v = vec![1, 2, 3]; /// let v = [1, 2, 3];
/// let mut iter = v.into_iter(); /// let mut iter = v.into_iter();
/// ///
/// assert_eq!(Some(1), iter.next()); /// assert_eq!(Some(1), iter.next());
@ -215,7 +215,7 @@ pub trait IntoIterator {
/// Basic usage: /// Basic usage:
/// ///
/// ``` /// ```
/// let v = vec![1, 2, 3]; /// let v = [1, 2, 3];
/// let mut iter = v.into_iter(); /// let mut iter = v.into_iter();
/// ///
/// assert_eq!(Some(1), iter.next()); /// assert_eq!(Some(1), iter.next());

View file

@ -590,7 +590,7 @@ pub trait Iterator {
/// #[derive(PartialEq, Debug)] /// #[derive(PartialEq, Debug)]
/// struct NotClone(usize); /// struct NotClone(usize);
/// ///
/// let v = vec![NotClone(0), NotClone(1), NotClone(2)]; /// let v = [NotClone(0), NotClone(1), NotClone(2)];
/// let mut it = v.into_iter().intersperse_with(|| NotClone(99)); /// let mut it = v.into_iter().intersperse_with(|| NotClone(99));
/// ///
/// assert_eq!(it.next(), Some(NotClone(0))); // The first element from `v`. /// assert_eq!(it.next(), Some(NotClone(0))); // The first element from `v`.
@ -1270,7 +1270,7 @@ pub trait Iterator {
/// `take` will limit itself to the size of the underlying iterator: /// `take` will limit itself to the size of the underlying iterator:
/// ///
/// ``` /// ```
/// let v = vec![1, 2]; /// let v = [1, 2];
/// let mut iter = v.into_iter().take(5); /// let mut iter = v.into_iter().take(5);
/// assert_eq!(iter.next(), Some(1)); /// assert_eq!(iter.next(), Some(1));
/// assert_eq!(iter.next(), Some(2)); /// assert_eq!(iter.next(), Some(2));
@ -1604,7 +1604,7 @@ pub trait Iterator {
/// Basic usage: /// Basic usage:
/// ///
/// ``` /// ```
/// let mut words = vec!["hello", "world", "of", "Rust"].into_iter(); /// let mut words = ["hello", "world", "of", "Rust"].into_iter();
/// ///
/// // Take the first two words. /// // Take the first two words.
/// let hello_world: Vec<_> = words.by_ref().take(2).collect(); /// let hello_world: Vec<_> = words.by_ref().take(2).collect();
@ -2700,7 +2700,7 @@ pub trait Iterator {
/// incomparable. You can work around this by using [`Iterator::reduce`]: /// incomparable. You can work around this by using [`Iterator::reduce`]:
/// ``` /// ```
/// assert_eq!( /// assert_eq!(
/// vec![2.4, f32::NAN, 1.3] /// [2.4, f32::NAN, 1.3]
/// .into_iter() /// .into_iter()
/// .reduce(f32::max) /// .reduce(f32::max)
/// .unwrap(), /// .unwrap(),
@ -2738,7 +2738,7 @@ pub trait Iterator {
/// incomparable. You can work around this by using [`Iterator::reduce`]: /// incomparable. You can work around this by using [`Iterator::reduce`]:
/// ``` /// ```
/// assert_eq!( /// assert_eq!(
/// vec![2.4, f32::NAN, 1.3] /// [2.4, f32::NAN, 1.3]
/// .into_iter() /// .into_iter()
/// .reduce(f32::min) /// .reduce(f32::min)
/// .unwrap(), /// .unwrap(),

View file

@ -270,7 +270,7 @@
//! let mut bt = BTreeMap::new(); //! let mut bt = BTreeMap::new();
//! bt.insert(20u8, "foo"); //! bt.insert(20u8, "foo");
//! bt.insert(42u8, "bar"); //! bt.insert(42u8, "bar");
//! let res = vec![0u8, 1, 11, 200, 22] //! let res = [0u8, 1, 11, 200, 22]
//! .into_iter() //! .into_iter()
//! .map(|x| { //! .map(|x| {
//! // `checked_sub()` returns `None` on error //! // `checked_sub()` returns `None` on error
@ -390,10 +390,10 @@
//! [impl-FromIterator]: Option#impl-FromIterator%3COption%3CA%3E%3E //! [impl-FromIterator]: Option#impl-FromIterator%3COption%3CA%3E%3E
//! //!
//! ``` //! ```
//! let v = vec![Some(2), Some(4), None, Some(8)]; //! let v = [Some(2), Some(4), None, Some(8)];
//! let res: Option<Vec<_>> = v.into_iter().collect(); //! let res: Option<Vec<_>> = v.into_iter().collect();
//! assert_eq!(res, None); //! assert_eq!(res, None);
//! let v = vec![Some(2), Some(4), Some(8)]; //! let v = [Some(2), Some(4), Some(8)];
//! let res: Option<Vec<_>> = v.into_iter().collect(); //! let res: Option<Vec<_>> = v.into_iter().collect();
//! assert_eq!(res, Some(vec![2, 4, 8])); //! assert_eq!(res, Some(vec![2, 4, 8]));
//! ``` //! ```
@ -407,10 +407,10 @@
//! [impl-Sum]: Option#impl-Sum%3COption%3CU%3E%3E //! [impl-Sum]: Option#impl-Sum%3COption%3CU%3E%3E
//! //!
//! ``` //! ```
//! let v = vec![None, Some(1), Some(2), Some(3)]; //! let v = [None, Some(1), Some(2), Some(3)];
//! let res: Option<i32> = v.into_iter().sum(); //! let res: Option<i32> = v.into_iter().sum();
//! assert_eq!(res, None); //! assert_eq!(res, None);
//! let v = vec![Some(1), Some(2), Some(21)]; //! let v = [Some(1), Some(2), Some(21)];
//! let res: Option<i32> = v.into_iter().product(); //! let res: Option<i32> = v.into_iter().product();
//! assert_eq!(res, Some(42)); //! assert_eq!(res, Some(42));
//! ``` //! ```

View file

@ -436,7 +436,7 @@
//! # use std::str::FromStr; //! # use std::str::FromStr;
//! let mut results = vec![]; //! let mut results = vec![];
//! let mut errs = vec![]; //! let mut errs = vec![];
//! let nums: Vec<_> = vec!["17", "not a number", "99", "-27", "768"] //! let nums: Vec<_> = ["17", "not a number", "99", "-27", "768"]
//! .into_iter() //! .into_iter()
//! .map(u8::from_str) //! .map(u8::from_str)
//! // Save clones of the raw `Result` values to inspect //! // Save clones of the raw `Result` values to inspect
@ -462,10 +462,10 @@
//! [impl-FromIterator]: Result#impl-FromIterator%3CResult%3CA%2C%20E%3E%3E //! [impl-FromIterator]: Result#impl-FromIterator%3CResult%3CA%2C%20E%3E%3E
//! //!
//! ``` //! ```
//! let v = vec![Ok(2), Ok(4), Err("err!"), Ok(8)]; //! let v = [Ok(2), Ok(4), Err("err!"), Ok(8)];
//! let res: Result<Vec<_>, &str> = v.into_iter().collect(); //! let res: Result<Vec<_>, &str> = v.into_iter().collect();
//! assert_eq!(res, Err("err!")); //! assert_eq!(res, Err("err!"));
//! let v = vec![Ok(2), Ok(4), Ok(8)]; //! let v = [Ok(2), Ok(4), Ok(8)];
//! let res: Result<Vec<_>, &str> = v.into_iter().collect(); //! let res: Result<Vec<_>, &str> = v.into_iter().collect();
//! assert_eq!(res, Ok(vec![2, 4, 8])); //! assert_eq!(res, Ok(vec![2, 4, 8]));
//! ``` //! ```
@ -479,10 +479,10 @@
//! [impl-Sum]: Result#impl-Sum%3CResult%3CU%2C%20E%3E%3E //! [impl-Sum]: Result#impl-Sum%3CResult%3CU%2C%20E%3E%3E
//! //!
//! ``` //! ```
//! let v = vec![Err("error!"), Ok(1), Ok(2), Ok(3), Err("foo")]; //! let v = [Err("error!"), Ok(1), Ok(2), Ok(3), Err("foo")];
//! let res: Result<i32, &str> = v.into_iter().sum(); //! let res: Result<i32, &str> = v.into_iter().sum();
//! assert_eq!(res, Err("error!")); //! assert_eq!(res, Err("error!"));
//! let v: Vec<Result<i32, &str>> = vec![Ok(1), Ok(2), Ok(21)]; //! let v = [Ok(1), Ok(2), Ok(21)];
//! let res: Result<i32, &str> = v.into_iter().product(); //! let res: Result<i32, &str> = v.into_iter().product();
//! assert_eq!(res, Ok(42)); //! assert_eq!(res, Ok(42));
//! ``` //! ```

View file

@ -74,7 +74,7 @@ fn test_intersperse_with() {
struct NotClone { struct NotClone {
u: u32, u: u32,
} }
let r = vec![NotClone { u: 0 }, NotClone { u: 1 }] let r = [NotClone { u: 0 }, NotClone { u: 1 }]
.into_iter() .into_iter()
.intersperse_with(|| NotClone { u: 2 }) .intersperse_with(|| NotClone { u: 2 })
.collect::<Vec<_>>(); .collect::<Vec<_>>();
@ -120,7 +120,7 @@ fn test_intersperse_fold() {
#[test] #[test]
fn test_intersperse_collect_string() { fn test_intersperse_collect_string() {
let contents = vec![1, 2, 3]; let contents = [1, 2, 3];
let contents_string = contents let contents_string = contents
.into_iter() .into_iter()

View file

@ -144,7 +144,7 @@ fn test_iterator_peekable_rfold() {
#[test] #[test]
fn test_iterator_peekable_next_if_eq() { fn test_iterator_peekable_next_if_eq() {
// first, try on references // first, try on references
let xs = vec!["Heart", "of", "Gold"]; let xs = ["Heart", "of", "Gold"];
let mut it = xs.into_iter().peekable(); let mut it = xs.into_iter().peekable();
// try before `peek()` // try before `peek()`
assert_eq!(it.next_if_eq(&"trillian"), None); assert_eq!(it.next_if_eq(&"trillian"), None);
@ -157,7 +157,7 @@ fn test_iterator_peekable_next_if_eq() {
assert_eq!(it.next(), Some("Gold")); assert_eq!(it.next(), Some("Gold"));
// make sure comparison works for owned values // make sure comparison works for owned values
let xs = vec![String::from("Ludicrous"), "speed".into()]; let xs = [String::from("Ludicrous"), "speed".into()];
let mut it = xs.into_iter().peekable(); let mut it = xs.into_iter().peekable();
// make sure basic functionality works // make sure basic functionality works
assert_eq!(it.next_if_eq("Ludicrous"), Some("Ludicrous".into())); assert_eq!(it.next_if_eq("Ludicrous"), Some("Ludicrous".into()));
@ -167,7 +167,7 @@ fn test_iterator_peekable_next_if_eq() {
#[test] #[test]
fn test_iterator_peekable_mut() { fn test_iterator_peekable_mut() {
let mut it = vec![1, 2, 3].into_iter().peekable(); let mut it = [1, 2, 3].into_iter().peekable();
if let Some(p) = it.peek_mut() { if let Some(p) = it.peek_mut() {
if *p == 1 { if *p == 1 {
*p = 5; *p = 5;

View file

@ -456,25 +456,25 @@ fn test_find_map() {
#[test] #[test]
fn test_try_reduce() { fn test_try_reduce() {
let v: Vec<usize> = vec![1, 2, 3, 4, 5]; let v = [1usize, 2, 3, 4, 5];
let sum = v.into_iter().try_reduce(|x, y| x.checked_add(y)); let sum = v.into_iter().try_reduce(|x, y| x.checked_add(y));
assert_eq!(sum, Some(Some(15))); assert_eq!(sum, Some(Some(15)));
let v: Vec<usize> = vec![1, 2, 3, 4, 5, usize::MAX]; let v = [1, 2, 3, 4, 5, usize::MAX];
let sum = v.into_iter().try_reduce(|x, y| x.checked_add(y)); let sum = v.into_iter().try_reduce(|x, y| x.checked_add(y));
assert_eq!(sum, None); assert_eq!(sum, None);
let v: Vec<usize> = Vec::new(); let v: [usize; 0] = [];
let sum = v.into_iter().try_reduce(|x, y| x.checked_add(y)); let sum = v.into_iter().try_reduce(|x, y| x.checked_add(y));
assert_eq!(sum, Some(None)); assert_eq!(sum, Some(None));
let v = vec!["1", "2", "3", "4", "5"]; let v = ["1", "2", "3", "4", "5"];
let max = v.into_iter().try_reduce(|x, y| { let max = v.into_iter().try_reduce(|x, y| {
if x.parse::<usize>().ok()? > y.parse::<usize>().ok()? { Some(x) } else { Some(y) } if x.parse::<usize>().ok()? > y.parse::<usize>().ok()? { Some(x) } else { Some(y) }
}); });
assert_eq!(max, Some(Some("5"))); assert_eq!(max, Some(Some("5")));
let v = vec!["1", "2", "3", "4", "5"]; let v = ["1", "2", "3", "4", "5"];
let max: Result<Option<_>, <usize as std::str::FromStr>::Err> = let max: Result<Option<_>, <usize as std::str::FromStr>::Err> =
v.into_iter().try_reduce(|x, y| { v.into_iter().try_reduce(|x, y| {
if x.parse::<usize>()? > y.parse::<usize>()? { Ok(x) } else { Ok(y) } if x.parse::<usize>()? > y.parse::<usize>()? { Ok(x) } else { Ok(y) }

View file

@ -420,8 +420,8 @@ fn test_iterate() {
#[test] #[test]
fn test_keys() { fn test_keys() {
let vec = vec![(1, 'a'), (2, 'b'), (3, 'c')]; let pairs = [(1, 'a'), (2, 'b'), (3, 'c')];
let map: HashMap<_, _> = vec.into_iter().collect(); let map: HashMap<_, _> = pairs.into_iter().collect();
let keys: Vec<_> = map.keys().cloned().collect(); let keys: Vec<_> = map.keys().cloned().collect();
assert_eq!(keys.len(), 3); assert_eq!(keys.len(), 3);
assert!(keys.contains(&1)); assert!(keys.contains(&1));
@ -431,8 +431,8 @@ fn test_keys() {
#[test] #[test]
fn test_values() { fn test_values() {
let vec = vec![(1, 'a'), (2, 'b'), (3, 'c')]; let pairs = [(1, 'a'), (2, 'b'), (3, 'c')];
let map: HashMap<_, _> = vec.into_iter().collect(); let map: HashMap<_, _> = pairs.into_iter().collect();
let values: Vec<_> = map.values().cloned().collect(); let values: Vec<_> = map.values().cloned().collect();
assert_eq!(values.len(), 3); assert_eq!(values.len(), 3);
assert!(values.contains(&'a')); assert!(values.contains(&'a'));
@ -442,8 +442,8 @@ fn test_values() {
#[test] #[test]
fn test_values_mut() { fn test_values_mut() {
let vec = vec![(1, 1), (2, 2), (3, 3)]; let pairs = [(1, 1), (2, 2), (3, 3)];
let mut map: HashMap<_, _> = vec.into_iter().collect(); let mut map: HashMap<_, _> = pairs.into_iter().collect();
for value in map.values_mut() { for value in map.values_mut() {
*value = (*value) * 2 *value = (*value) * 2
} }
@ -456,8 +456,8 @@ fn test_values_mut() {
#[test] #[test]
fn test_into_keys() { fn test_into_keys() {
let vec = vec![(1, 'a'), (2, 'b'), (3, 'c')]; let pairs = [(1, 'a'), (2, 'b'), (3, 'c')];
let map: HashMap<_, _> = vec.into_iter().collect(); let map: HashMap<_, _> = pairs.into_iter().collect();
let keys: Vec<_> = map.into_keys().collect(); let keys: Vec<_> = map.into_keys().collect();
assert_eq!(keys.len(), 3); assert_eq!(keys.len(), 3);
@ -468,8 +468,8 @@ fn test_into_keys() {
#[test] #[test]
fn test_into_values() { fn test_into_values() {
let vec = vec![(1, 'a'), (2, 'b'), (3, 'c')]; let pairs = [(1, 'a'), (2, 'b'), (3, 'c')];
let map: HashMap<_, _> = vec.into_iter().collect(); let map: HashMap<_, _> = pairs.into_iter().collect();
let values: Vec<_> = map.into_values().collect(); let values: Vec<_> = map.into_values().collect();
assert_eq!(values.len(), 3); assert_eq!(values.len(), 3);

View file

@ -232,7 +232,7 @@
//! ``` //! ```
//! use std::collections::VecDeque; //! use std::collections::VecDeque;
//! //!
//! let vec = vec![1, 2, 3, 4]; //! let vec = [1, 2, 3, 4];
//! let buf: VecDeque<_> = vec.into_iter().collect(); //! let buf: VecDeque<_> = vec.into_iter().collect();
//! ``` //! ```
//! //!

View file

@ -2172,7 +2172,7 @@ mod use_keyword {}
/// i.next().unwrap_or_else(I::Item::default) /// i.next().unwrap_or_else(I::Item::default)
/// } /// }
/// ///
/// assert_eq!(first_or_default(vec![1, 2, 3].into_iter()), 1); /// assert_eq!(first_or_default([1, 2, 3].into_iter()), 1);
/// assert_eq!(first_or_default(Vec::<i32>::new().into_iter()), 0); /// assert_eq!(first_or_default(Vec::<i32>::new().into_iter()), 0);
/// ``` /// ```
/// ///

View file

@ -493,7 +493,7 @@ pub fn exclude_should_panic_option() {
#[test] #[test]
pub fn exact_filter_match() { pub fn exact_filter_match() {
fn tests() -> Vec<TestDescAndFn> { fn tests() -> Vec<TestDescAndFn> {
vec!["base", "base::test", "base::test1", "base::test2"] ["base", "base::test", "base::test1", "base::test2"]
.into_iter() .into_iter()
.map(|name| TestDescAndFn { .map(|name| TestDescAndFn {
desc: TestDesc { desc: TestDesc {