}
}
+#[experimental = "waiting on FromIterator stabilization"]
+impl<'a> FromIterator<&'a str> for String {
+ fn from_iter<I:Iterator<&'a str>>(iterator: I) -> String {
+ let mut buf = String::new();
+ buf.extend(iterator);
+ buf
+ }
+}
+
#[experimental = "waiting on Extend stabilization"]
impl Extend<char> for String {
fn extend<I:Iterator<char>>(&mut self, mut iterator: I) {
+ let (lower_bound, _) = iterator.size_hint();
+ self.reserve(lower_bound);
for ch in iterator {
self.push(ch)
}
}
}
+#[experimental = "waiting on Extend stabilization"]
+impl<'a> Extend<&'a str> for String {
+ fn extend<I: Iterator<&'a str>>(&mut self, mut iterator: I) {
+ // A guess that at least one byte per iterator element will be needed.
+ let (lower_bound, _) = iterator.size_hint();
+ self.reserve(lower_bound);
+ for s in iterator {
+ self.push_str(s)
+ }
+ }
+}
+
impl PartialEq for String {
#[inline]
fn eq(&self, other: &String) -> bool { PartialEq::eq(&**self, &**other) }
"[[], [1], [1, 1]]");
}
+ #[test]
+ fn test_from_iterator() {
+ let s = "ศไทย中华Việt Nam".to_string();
+ let t = "ศไทย中华";
+ let u = "Việt Nam";
+
+ let a: String = s.chars().collect();
+ assert_eq!(s, a);
+
+ let mut b = t.to_string();
+ b.extend(u.chars());
+ assert_eq!(s, b);
+
+ let c: String = vec![t, u].into_iter().collect();
+ assert_eq!(s, c);
+
+ let mut d = t.to_string();
+ d.extend(vec![u].into_iter());
+ assert_eq!(s, d);
+ }
+
#[bench]
fn bench_with_capacity(b: &mut Bencher) {
b.iter(|| {