@@ -913,10 +913,12 @@ pub mod traits {
913
913
use cmp::{TotalOrd, Ordering, Less, Equal, Greater, Eq, Ord, Equiv, TotalEq};
914
914
use super::{Str, eq_slice};
915
915
916
- impl<'self> Add<&'self str,~str> for ~ str {
916
+ impl<'self> Add<&'self str,~str> for &'self str {
917
917
#[inline(always)]
918
918
fn add(&self, rhs: & &'self str) -> ~str {
919
- self.append((*rhs))
919
+ let mut ret = self.to_owned();
920
+ ret.push_str(*rhs);
921
+ ret
920
922
}
921
923
}
922
924
@@ -3137,6 +3139,24 @@ mod tests {
3137
3139
assert_eq!(" abc".char_range_at_reverse(0).next, 0);
3138
3140
}
3139
3141
3142
+ #[test]
3143
+ fn test_add() {
3144
+ macro_rules! t (
3145
+ ($s1:expr, $s2:expr, $e:expr) => {
3146
+ assert_eq!($s1 + $s2, $e);
3147
+ assert_eq!($s1.to_owned() + $s2, $e);
3148
+ assert_eq!($s1.to_managed() + $s2, $e);
3149
+ }
3150
+ );
3151
+
3152
+ t!(" foo", " bar", ~" foobar");
3153
+ t!(" foo", @" bar", ~" foobar");
3154
+ t!(" foo", ~" bar", ~" foobar");
3155
+ t!(" ศไทย中", " 华Việt Nam ", ~" ศไทย中华Việt Nam ");
3156
+ t!(" ศไทย中", @" 华Việt Nam ", ~" ศไทย中华Việt Nam ");
3157
+ t!(" ศไทย中", ~" 华Việt Nam ", ~" ศไทย中华Việt Nam ");
3158
+ }
3159
+
3140
3160
#[test]
3141
3161
fn test_iterator() {
3142
3162
use iterator::*;
0 commit comments