mirror of https://github.com/rust-lang/rust
39 lines
827 B
Rust
39 lines
827 B
Rust
//@ run-pass
|
|
//! Check that type lengths don't explode with `Map` folds.
|
|
//!
|
|
//! The normal limit is a million, and this test used to exceed 1.5 million, but
|
|
//! now we can survive an even tighter limit. Still seems excessive though...
|
|
#![type_length_limit = "256000"]
|
|
|
|
// Custom wrapper so Iterator methods aren't specialized.
|
|
struct Iter<I>(I);
|
|
|
|
impl<I> Iterator for Iter<I>
|
|
where
|
|
I: Iterator
|
|
{
|
|
type Item = I::Item;
|
|
|
|
fn next(&mut self) -> Option<Self::Item> {
|
|
self.0.next()
|
|
}
|
|
}
|
|
|
|
fn main() {
|
|
let c = Iter(0i32..10)
|
|
.map(|x| x)
|
|
.map(|x| x)
|
|
.map(|x| x)
|
|
.map(|x| x)
|
|
.map(|x| x)
|
|
.map(|x| x)
|
|
.map(|x| x)
|
|
.map(|x| x)
|
|
.map(|x| x)
|
|
.map(|x| x)
|
|
.map(|x| x)
|
|
.map(|x| x)
|
|
.count();
|
|
assert_eq!(c, 10);
|
|
}
|