Files
servo/tests/unit/style/atomic_refcell.rs
Bobby Holley d252c8e42a Implement AtomicRef::map.
MozReview-Commit-ID: 8iOALQylOuK
2016-11-01 20:39:51 +01:00

42 lines
1.0 KiB
Rust

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use style::atomic_refcell::{AtomicRef, AtomicRefCell};
struct Foo {
u: u32,
}
struct Bar {
f: Foo,
}
#[test]
fn map() {
let a = AtomicRefCell::new(Bar { f: Foo { u: 42 } });
let b = a.borrow();
assert_eq!(b.f.u, 42);
let c = AtomicRef::map(b, |x| &x.f);
assert_eq!(c.u, 42);
let d = AtomicRef::map(c, |x| &x.u);
assert_eq!(*d, 42);
}
/* FIXME(bholley): Enable once we have AtomicRefMut::map(), which is blocked on
* https://github.com/Kimundi/owning-ref-rs/pull/16
#[test]
fn map_mut() {
let a = AtomicRefCell::new(Bar { f: Foo { u: 42 } });
let mut b = a.borrow_mut();
assert_eq!(b.f.u, 42);
b.f.u = 43;
let mut c = AtomicRefMut::map(b, |x| &x.f);
assert_eq!(c.u, 43);
c.u = 44;
let mut d = AtomicRefMut::map(c, |x| &x.u);
assert_eq!(*d, 44);
*d. = 45;
assert_eq!(*d, 45);
}*/