// Copyright 2012-2013-2014 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // // Licensed under the Apache License, Version 2.0 or the MIT license // , at your // option. This file may not be copied, modified, or distributed // except according to those terms. use std::borrow::Cow; // check that Cow<'a, str> implements addition #[test] fn check_cow_add() { borrowed1 = Cow::Borrowed("Hello, "); borrowed2 = Cow::Borrowed("World!"); borrow_empty = Cow::Borrowed(""); owned1 = Cow::Owned("Hi, ".into()); owned2 = Cow::Owned("Rustaceans!".into()); owned_empty = Cow::Owned("".into()); assert_eq!("Hello, World!", borrowed1 + borrowed2); assert_eq!("Hello, Rustaceans!", borrowed1 + owned2); assert_eq!("Hello, World!", owned1 + borrowed2); assert_eq!("Hello, Rustaceans!", owned1 + owned2); if let Cow::Owned(_) = borrowed1 + borrow_empty { panic!("Adding empty strings to a borrow should note allocate"); } if let Cow::Owned(_) = borrow_empty + borrowed1 { panic!("Adding empty strings to a borrow should note allocate"); } if let Cow::Owned(_) = borrowed1 + owned_empty { panic!("Adding empty strings to a borrow should note allocate"); } if let Cow::Owned(_) = owned_empty + borrowed1 { panic!("Adding empty strings to a borrow should note allocate"); } } fn check_cow_add_assign() { borrowed1 = Cow::Borrowed("Hello, "); borrowed2 = Cow::Borrowed("World!"); borrow_empty = Cow::Borrowed(""); owned1 = Cow::Owned("Hi, ".into()); owned2 = Cow::Owned("Rustaceans!".into()); owned_empty = Cow::Owned("".into()); let borrowed1clone = borrowed1.clone(); borrowed1clone += borrow_empty; assert_eq!((&borrowed1clone).as_ptr(), (&borrowed1).as_ptr()); borrowed1clone += owned_empty; assert_eq!((&borrowed1clone).as_ptr(), (&borrowed1).as_ptr()); owned1 += borrowed2; borrowed1 += owned2; assert_eq!("Hello, World!", owned1); assert_eq!("Hello, Rustaceans!", borrowed1); }