Auto merge of #106943 - mina86:exact_size_take_repeat, r=dtolnay · patricklam/verify-rust-std@dc5fed5 (original) (raw)

`@@ -170,3 +170,93 @@ fn test_byref_take_consumed_items() {

`

170

170

`assert_eq!(count, 70);

`

171

171

`assert_eq!(inner, 90..90);

`

172

172

`}

`

``

173

+

``

174

`+

#[test]

`

``

175

`+

fn test_exact_size_take_repeat() {

`

``

176

`+

let mut iter = core::iter::repeat(42).take(40);

`

``

177

`+

assert_eq!((40, Some(40)), iter.size_hint());

`

``

178

`+

assert_eq!(40, iter.len());

`

``

179

+

``

180

`+

assert_eq!(Some(42), iter.next());

`

``

181

`+

assert_eq!((39, Some(39)), iter.size_hint());

`

``

182

`+

assert_eq!(39, iter.len());

`

``

183

+

``

184

`+

assert_eq!(Some(42), iter.next_back());

`

``

185

`+

assert_eq!((38, Some(38)), iter.size_hint());

`

``

186

`+

assert_eq!(38, iter.len());

`

``

187

+

``

188

`+

assert_eq!(Some(42), iter.nth(3));

`

``

189

`+

assert_eq!((34, Some(34)), iter.size_hint());

`

``

190

`+

assert_eq!(34, iter.len());

`

``

191

+

``

192

`+

assert_eq!(Some(42), iter.nth_back(3));

`

``

193

`+

assert_eq!((30, Some(30)), iter.size_hint());

`

``

194

`+

assert_eq!(30, iter.len());

`

``

195

+

``

196

`+

assert_eq!(Ok(()), iter.advance_by(10));

`

``

197

`+

assert_eq!((20, Some(20)), iter.size_hint());

`

``

198

`+

assert_eq!(20, iter.len());

`

``

199

+

``

200

`+

assert_eq!(Ok(()), iter.advance_back_by(10));

`

``

201

`+

assert_eq!((10, Some(10)), iter.size_hint());

`

``

202

`+

assert_eq!(10, iter.len());

`

``

203

`+

}

`

``

204

+

``

205

`+

#[test]

`

``

206

`+

fn test_exact_size_take_repeat_with() {

`

``

207

`+

let mut counter = 0;

`

``

208

`+

let mut iter = core::iter::repeat_with(move || {

`

``

209

`+

counter += 1;

`

``

210

`+

counter

`

``

211

`+

})

`

``

212

`+

.take(40);

`

``

213

`+

assert_eq!((40, Some(40)), iter.size_hint());

`

``

214

`+

assert_eq!(40, iter.len());

`

``

215

+

``

216

`+

assert_eq!(Some(1), iter.next());

`

``

217

`+

assert_eq!((39, Some(39)), iter.size_hint());

`

``

218

`+

assert_eq!(39, iter.len());

`

``

219

+

``

220

`+

assert_eq!(Some(5), iter.nth(3));

`

``

221

`+

assert_eq!((35, Some(35)), iter.size_hint());

`

``

222

`+

assert_eq!(35, iter.len());

`

``

223

+

``

224

`+

assert_eq!(Ok(()), iter.advance_by(10));

`

``

225

`+

assert_eq!((25, Some(25)), iter.size_hint());

`

``

226

`+

assert_eq!(25, iter.len());

`

``

227

+

``

228

`+

assert_eq!(Some(16), iter.next());

`

``

229

`+

assert_eq!((24, Some(24)), iter.size_hint());

`

``

230

`+

assert_eq!(24, iter.len());

`

``

231

`+

}

`

``

232

+

``

233

`+

// This is https://github.com/rust-lang/rust/issues/104729 with all uses of

`

``

234

`+

// repeat(0) were replaced by repeat(0).take(20).

`

``

235

`+

#[test]

`

``

236

`+

fn test_reverse_on_zip() {

`

``

237

`+

let vec_1 = [1; 10];

`

``

238

+

``

239

`+

let zipped_iter = vec_1.iter().copied().zip(core::iter::repeat(0).take(20));

`

``

240

+

``

241

`+

// Forward

`

``

242

`+

for (one, zero) in zipped_iter {

`

``

243

`+

assert_eq!((1, 0), (one, zero));

`

``

244

`+

}

`

``

245

+

``

246

`+

let rev_vec_iter = vec_1.iter().rev();

`

``

247

`+

let rev_repeat_iter = std::iter::repeat(0).take(20).rev();

`

``

248

+

``

249

`+

// Manual reversed zip

`

``

250

`+

let rev_zipped_iter = rev_vec_iter.zip(rev_repeat_iter);

`

``

251

+

``

252

`+

for (&one, zero) in rev_zipped_iter {

`

``

253

`+

assert_eq!((1, 0), (one, zero));

`

``

254

`+

}

`

``

255

+

``

256

`+

let zipped_iter = vec_1.iter().zip(core::iter::repeat(0).take(20));

`

``

257

+

``

258

`+

// Cannot call rev here for automatic reversed zip constuction

`

``

259

`+

for (&one, zero) in zipped_iter.rev() {

`

``

260

`+

assert_eq!((1, 0), (one, zero));

`

``

261

`+

}

`

``

262

`+

}

`