Skip to content

Commit 75474ff

Browse files
committed
TrustedLen for Repeat / RangeFrom test cases
1 parent a1809d5 commit 75474ff

File tree

2 files changed

+66
-0
lines changed

2 files changed

+66
-0
lines changed

Diff for: src/libcore/tests/iter.rs

+43
Original file line numberDiff line numberDiff line change
@@ -1371,6 +1371,29 @@ fn test_range_from_nth() {
13711371
assert_eq!(r, 16..);
13721372
assert_eq!(r.nth(10), Some(26));
13731373
assert_eq!(r, 27..);
1374+
1375+
assert_eq!((0..).size_hint(), (usize::MAX, None));
1376+
}
1377+
1378+
fn is_trusted_len<I: TrustedLen>(_: I) {}
1379+
1380+
#[test]
1381+
fn test_range_from_take() {
1382+
let mut it = (0..).take(3);
1383+
assert_eq!(it.next(), Some(0));
1384+
assert_eq!(it.next(), Some(1));
1385+
assert_eq!(it.next(), Some(2));
1386+
assert_eq!(it.next(), None);
1387+
is_trusted_len((0..).take(3));
1388+
assert_eq!((0..).take(3).size_hint(), (3, Some(3)));
1389+
assert_eq!((0..).take(0).size_hint(), (0, Some(0)));
1390+
assert_eq!((0..).take(usize::MAX).size_hint(), (usize::MAX, Some(usize::MAX)));
1391+
}
1392+
1393+
#[test]
1394+
fn test_range_from_take_collect() {
1395+
let v: Vec<_> = (0..).take(3).collect();
1396+
assert_eq!(v, vec![0, 1, 2]);
13741397
}
13751398

13761399
#[test]
@@ -1465,6 +1488,26 @@ fn test_repeat() {
14651488
assert_eq!(it.next(), Some(42));
14661489
assert_eq!(it.next(), Some(42));
14671490
assert_eq!(it.next(), Some(42));
1491+
assert_eq!(repeat(42).size_hint(), (usize::MAX, None));
1492+
}
1493+
1494+
#[test]
1495+
fn test_repeat_take() {
1496+
let mut it = repeat(42).take(3);
1497+
assert_eq!(it.next(), Some(42));
1498+
assert_eq!(it.next(), Some(42));
1499+
assert_eq!(it.next(), Some(42));
1500+
assert_eq!(it.next(), None);
1501+
is_trusted_len(repeat(42).take(3));
1502+
assert_eq!(repeat(42).take(3).size_hint(), (3, Some(3)));
1503+
assert_eq!(repeat(42).take(0).size_hint(), (0, Some(0)));
1504+
assert_eq!(repeat(42).take(usize::MAX).size_hint(), (usize::MAX, Some(usize::MAX)));
1505+
}
1506+
1507+
#[test]
1508+
fn test_repeat_take_collect() {
1509+
let v: Vec<_> = repeat(42).take(3).collect();
1510+
assert_eq!(v, vec![42, 42, 42]);
14681511
}
14691512

14701513
#[test]

Diff for: src/test/codegen/repeat-trusted-len.rs

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
// compile-flags: -O
12+
// ignore-tidy-linelength
13+
14+
#![crate_type = "lib"]
15+
16+
use std::iter;
17+
18+
// CHECK-LABEL: @repeat_take_collect
19+
#[no_mangle]
20+
pub fn repeat_take_collect() -> Vec<u8> {
21+
// CHECK: call void @llvm.memset.p0i8
22+
iter::repeat(42).take(100000).collect()
23+
}

0 commit comments

Comments
 (0)