|
13 | 13 | use std::uint;
|
14 | 14 | use std::vec;
|
15 | 15 | use std::cast::transmute;
|
| 16 | +use std::iterator::FromIterator; |
16 | 17 |
|
17 | 18 | static INITIAL_CAPACITY: uint = 32u; // 2^5
|
18 | 19 |
|
@@ -253,6 +254,16 @@ fn get<'r, T>(elts: &'r [Option<T>], i: uint) -> &'r T {
|
253 | 254 | match elts[i] { Some(ref t) => t, _ => fail!() }
|
254 | 255 | }
|
255 | 256 |
|
| 257 | +impl<A, T: Iterator<A>> FromIterator<A, T> for Deque<A> { |
| 258 | + fn from_iterator(iterator: &mut T) -> Deque<A> { |
| 259 | + let mut deq = Deque::new(); |
| 260 | + for iterator.advance |elt| { |
| 261 | + deq.add_back(elt); |
| 262 | + } |
| 263 | + deq |
| 264 | + } |
| 265 | +} |
| 266 | + |
256 | 267 | #[cfg(test)]
|
257 | 268 | mod tests {
|
258 | 269 | use super::*;
|
@@ -545,4 +556,20 @@ mod tests {
|
545 | 556 | }
|
546 | 557 | assert_eq!(d.rev_iter().collect::<~[&int]>(), ~[&4,&3,&2,&1,&0,&6,&7,&8]);
|
547 | 558 | }
|
| 559 | + |
| 560 | + #[test] |
| 561 | + fn test_from_iterator() { |
| 562 | + use std::iterator; |
| 563 | + let v = ~[1,2,3,4,5,6,7]; |
| 564 | + let deq: Deque<int> = v.iter().transform(|&x| x).collect(); |
| 565 | + let u: ~[int] = deq.iter().transform(|&x| x).collect(); |
| 566 | + assert_eq!(u, v); |
| 567 | + |
| 568 | + let mut seq = iterator::Counter::new(0u, 2).take_(256); |
| 569 | + let deq: Deque<uint> = seq.collect(); |
| 570 | + for deq.iter().enumerate().advance |(i, &x)| { |
| 571 | + assert_eq!(2*i, x); |
| 572 | + } |
| 573 | + assert_eq!(deq.len(), 256); |
| 574 | + } |
548 | 575 | }
|
0 commit comments