#![allow(clippy::useless_vec, clippy::manual_repeat_n)] use std::iter::repeat; fn main() { resize_vector(); extend_vector(); mixed_extend_resize_vector(); from_empty_vec(); } fn extend_vector() { // Extend with constant expression let len = 300; let mut vec1 = Vec::with_capacity(len); //~^ slow_vector_initialization vec1.extend(repeat(0).take(len)); // Extend with len expression let mut vec2 = Vec::with_capacity(len - 10); //~^ slow_vector_initialization vec2.extend(repeat(0).take(len - 10)); // Extend with mismatching expression should not be warned let mut vec3 = Vec::with_capacity(24322); vec3.extend(repeat(0).take(2)); let mut vec4 = Vec::with_capacity(len); //~^ slow_vector_initialization vec4.extend(repeat(0).take(vec4.capacity())); } fn mixed_extend_resize_vector() { // Mismatching len let mut mismatching_len = Vec::with_capacity(30); mismatching_len.extend(repeat(0).take(40)); // Slow initialization let mut resized_vec = Vec::with_capacity(30); //~^ slow_vector_initialization resized_vec.resize(30, 0); let mut extend_vec = Vec::with_capacity(30); //~^ slow_vector_initialization extend_vec.extend(repeat(0).take(30)); } fn resize_vector() { // Resize with constant expression let len = 300; let mut vec1 = Vec::with_capacity(len); //~^ slow_vector_initialization vec1.resize(len, 0); // Resize mismatch len let mut vec2 = Vec::with_capacity(200); vec2.resize(10, 0); // Resize with len expression let mut vec3 = Vec::with_capacity(len - 10); //~^ slow_vector_initialization vec3.resize(len - 10, 0); let mut vec4 = Vec::with_capacity(len); //~^ slow_vector_initialization vec4.resize(vec4.capacity(), 0); // Reinitialization should be warned vec1 = Vec::with_capacity(10); //~^ slow_vector_initialization vec1.resize(10, 0); } fn from_empty_vec() { // Resize with constant expression let len = 300; let mut vec1 = Vec::new(); //~^ slow_vector_initialization vec1.resize(len, 0); // Resize with len expression let mut vec3 = Vec::new(); //~^ slow_vector_initialization vec3.resize(len - 10, 0); // Reinitialization should be warned vec1 = Vec::new(); //~^ slow_vector_initialization vec1.resize(10, 0); vec1 = vec![]; //~^ slow_vector_initialization vec1.resize(10, 0); macro_rules! x { () => { vec![] }; } // `vec![]` comes from another macro, don't warn vec1 = x!(); vec1.resize(10, 0); } fn do_stuff(vec: &mut [u8]) {} fn extend_vector_with_manipulations_between() { let len = 300; let mut vec1: Vec = Vec::with_capacity(len); do_stuff(&mut vec1); vec1.extend(repeat(0).take(len)); }