1
- // Copyright 2012-2013-2014 The Rust Project Developers. See the COPYRIGHT
1
+ // Copyright 2016 The Rust Project Developers. See the COPYRIGHT
2
2
// file at the top-level directory of this distribution and at
3
3
// http://rust-lang.org/COPYRIGHT.
4
4
//
@@ -12,54 +12,130 @@ use std::borrow::Cow;
12
12
13
13
// check that Cow<'a, str> implements addition
14
14
#[ test]
15
- fn check_cow_add ( ) {
16
- borrowed1 = Cow :: Borrowed ( "Hello, " ) ;
17
- borrowed2 = Cow :: Borrowed ( "World!" ) ;
18
- borrow_empty = Cow :: Borrowed ( "" ) ;
15
+ fn check_cow_add_cow ( ) {
16
+ let borrowed1 = Cow :: Borrowed ( "Hello, " ) ;
17
+ let borrowed2 = Cow :: Borrowed ( "World!" ) ;
18
+ let borrow_empty = Cow :: Borrowed ( "" ) ;
19
19
20
- owned1 = Cow :: Owned ( "Hi, " . into ( ) ) ;
21
- owned2 = Cow :: Owned ( "Rustaceans!" . into ( ) ) ;
22
- owned_empty = Cow :: Owned ( "" . into ( ) ) ;
20
+ let owned1: Cow < str > = Cow :: Owned ( String :: from ( "Hi, " ) ) ;
21
+ let owned2: Cow < str > = Cow :: Owned ( String :: from ( "Rustaceans!" ) ) ;
22
+ let owned_empty: Cow < str > = Cow :: Owned ( String :: new ( ) ) ;
23
23
24
- assert_eq ! ( "Hello, World!" , borrowed1 + borrowed2) ;
25
- assert_eq ! ( "Hello, Rustaceans!" , borrowed1 + owned2) ;
24
+ assert_eq ! ( "Hello, World!" , borrowed1. clone ( ) + borrowed2. clone ( ) ) ;
25
+ assert_eq ! ( "Hello, Rustaceans!" , borrowed1. clone ( ) + owned2. clone ( ) ) ;
26
26
27
- assert_eq ! ( "Hello , World!" , owned1 + borrowed2) ;
28
- assert_eq ! ( "Hello , Rustaceans!" , owned1 + owned2) ;
27
+ assert_eq ! ( "Hi , World!" , owned1. clone ( ) + borrowed2. clone ( ) ) ;
28
+ assert_eq ! ( "Hi , Rustaceans!" , owned1. clone ( ) + owned2. clone ( ) ) ;
29
29
30
- if let Cow :: Owned ( _) = borrowed1 + borrow_empty {
30
+ if let Cow :: Owned ( _) = borrowed1. clone ( ) + borrow_empty. clone ( ) {
31
31
panic ! ( "Adding empty strings to a borrow should note allocate" ) ;
32
32
}
33
- if let Cow :: Owned ( _) = borrow_empty + borrowed1 {
33
+ if let Cow :: Owned ( _) = borrow_empty. clone ( ) + borrowed1. clone ( ) {
34
34
panic ! ( "Adding empty strings to a borrow should note allocate" ) ;
35
35
}
36
- if let Cow :: Owned ( _) = borrowed1 + owned_empty {
36
+ if let Cow :: Owned ( _) = borrowed1. clone ( ) + owned_empty. clone ( ) {
37
37
panic ! ( "Adding empty strings to a borrow should note allocate" ) ;
38
38
}
39
- if let Cow :: Owned ( _) = owned_empty + borrowed1 {
39
+ if let Cow :: Owned ( _) = owned_empty. clone ( ) + borrowed1. clone ( ) {
40
40
panic ! ( "Adding empty strings to a borrow should note allocate" ) ;
41
41
}
42
42
}
43
43
44
- fn check_cow_add_assign ( ) {
45
- borrowed1 = Cow :: Borrowed ( "Hello, " ) ;
46
- borrowed2 = Cow :: Borrowed ( "World!" ) ;
47
- borrow_empty = Cow :: Borrowed ( "" ) ;
44
+ #[ test]
45
+ fn check_cow_add_str ( ) {
46
+ let borrowed = Cow :: Borrowed ( "Hello, " ) ;
47
+ let borrow_empty = Cow :: Borrowed ( "" ) ;
48
+
49
+ let owned: Cow < str > = Cow :: Owned ( String :: from ( "Hi, " ) ) ;
50
+ let owned_empty: Cow < str > = Cow :: Owned ( String :: new ( ) ) ;
48
51
49
- owned1 = Cow :: Owned ( "Hi, " . into ( ) ) ;
50
- owned2 = Cow :: Owned ( "Rustaceans!" . into ( ) ) ;
51
- owned_empty = Cow :: Owned ( "" . into ( ) ) ;
52
+ assert_eq ! ( "Hello, World!" , borrowed. clone( ) + "World!" ) ;
52
53
53
- let borrowed1clone = borrowed1. clone ( ) ;
54
- borrowed1clone += borrow_empty;
55
- assert_eq ! ( ( & borrowed1clone) . as_ptr( ) , ( & borrowed1) . as_ptr( ) ) ;
54
+ assert_eq ! ( "Hi, World!" , owned. clone( ) + "World!" ) ;
56
55
57
- borrowed1clone += owned_empty;
58
- assert_eq ! ( ( & borrowed1clone) . as_ptr( ) , ( & borrowed1) . as_ptr( ) ) ;
56
+ if let Cow :: Owned ( _) = borrowed. clone ( ) + "" {
57
+ panic ! ( "Adding empty strings to a borrow should note allocate" ) ;
58
+ }
59
+ if let Cow :: Owned ( _) = borrow_empty. clone ( ) + "Hello, " {
60
+ panic ! ( "Adding empty strings to a borrow should note allocate" ) ;
61
+ }
62
+ if let Cow :: Owned ( _) = owned_empty. clone ( ) + "Hello, " {
63
+ panic ! ( "Adding empty strings to a borrow should note allocate" ) ;
64
+ }
65
+ }
66
+
67
+ #[ test]
68
+ fn check_cow_add_assign_cow ( ) {
69
+ let mut borrowed1 = Cow :: Borrowed ( "Hello, " ) ;
70
+ let borrowed2 = Cow :: Borrowed ( "World!" ) ;
71
+ let borrow_empty = Cow :: Borrowed ( "" ) ;
72
+
73
+ let mut owned1: Cow < str > = Cow :: Owned ( String :: from ( "Hi, " ) ) ;
74
+ let owned2: Cow < str > = Cow :: Owned ( String :: from ( "Rustaceans!" ) ) ;
75
+ let owned_empty: Cow < str > = Cow :: Owned ( String :: new ( ) ) ;
76
+
77
+ let mut s = borrowed1. clone ( ) ;
78
+ s += borrow_empty. clone ( ) ;
79
+ assert_eq ! ( "Hello, " , s) ;
80
+ if let Cow :: Owned ( _) = s {
81
+ panic ! ( "Adding empty strings to a borrow should note allocate" ) ;
82
+ }
83
+ let mut s = borrow_empty. clone ( ) ;
84
+ s += borrowed1. clone ( ) ;
85
+ assert_eq ! ( "Hello, " , s) ;
86
+ if let Cow :: Owned ( _) = s {
87
+ panic ! ( "Adding empty strings to a borrow should note allocate" ) ;
88
+ }
89
+ let mut s = borrowed1. clone ( ) ;
90
+ s += owned_empty. clone ( ) ;
91
+ assert_eq ! ( "Hello, " , s) ;
92
+ if let Cow :: Owned ( _) = s {
93
+ panic ! ( "Adding empty strings to a borrow should note allocate" ) ;
94
+ }
95
+ let mut s = owned_empty. clone ( ) ;
96
+ s += borrowed1. clone ( ) ;
97
+ assert_eq ! ( "Hello, " , s) ;
98
+ if let Cow :: Owned ( _) = s {
99
+ panic ! ( "Adding empty strings to a borrow should note allocate" ) ;
100
+ }
59
101
60
102
owned1 += borrowed2;
61
103
borrowed1 += owned2;
62
104
63
- assert_eq ! ( "Hello , World!" , owned1) ;
105
+ assert_eq ! ( "Hi , World!" , owned1) ;
64
106
assert_eq ! ( "Hello, Rustaceans!" , borrowed1) ;
65
107
}
108
+
109
+ #[ test]
110
+ fn check_cow_add_assign_str ( ) {
111
+ let mut borrowed = Cow :: Borrowed ( "Hello, " ) ;
112
+ let borrow_empty = Cow :: Borrowed ( "" ) ;
113
+
114
+ let mut owned: Cow < str > = Cow :: Owned ( String :: from ( "Hi, " ) ) ;
115
+ let owned_empty: Cow < str > = Cow :: Owned ( String :: new ( ) ) ;
116
+
117
+ let mut s = borrowed. clone ( ) ;
118
+ s += "" ;
119
+ assert_eq ! ( "Hello, " , s) ;
120
+ if let Cow :: Owned ( _) = s {
121
+ panic ! ( "Adding empty strings to a borrow should note allocate" ) ;
122
+ }
123
+ let mut s = borrow_empty. clone ( ) ;
124
+ s += "World!" ;
125
+ assert_eq ! ( "World!" , s) ;
126
+ if let Cow :: Owned ( _) = s {
127
+ panic ! ( "Adding empty strings to a borrow should note allocate" ) ;
128
+ }
129
+ let mut s = owned_empty. clone ( ) ;
130
+ s += "World!" ;
131
+ assert_eq ! ( "World!" , s) ;
132
+ if let Cow :: Owned ( _) = s {
133
+ panic ! ( "Adding empty strings to a borrow should note allocate" ) ;
134
+ }
135
+
136
+ owned += "World!" ;
137
+ borrowed += "World!" ;
138
+
139
+ assert_eq ! ( "Hi, World!" , owned) ;
140
+ assert_eq ! ( "Hello, World!" , borrowed) ;
141
+ }
0 commit comments