]>
git.proxmox.com Git - rustc.git/blob - vendor/crossbeam-utils/tests/cache_padded.rs
1 extern crate crossbeam_utils
;
6 use crossbeam_utils
::CachePadded
;
10 let x
: CachePadded
<u64> = Default
::default();
16 let x
: CachePadded
<u64> = CachePadded
::new(17);
22 let x
: CachePadded
<(u64, u64)> = CachePadded
::new((17, 37));
29 let arr
= [CachePadded
::new(17u8), CachePadded
::new(37u8)];
30 let a
= &*arr
[0] as *const u8;
31 let b
= &*arr
[1] as *const u8;
32 assert
!(unsafe { a.offset(64) }
<= b
);
36 fn different_sizes() {
37 CachePadded
::new(17u8);
38 CachePadded
::new(17u16);
39 CachePadded
::new(17u32);
40 CachePadded
::new([17u64; 0]);
41 CachePadded
::new([17u64; 1]);
42 CachePadded
::new([17u64; 2]);
43 CachePadded
::new([17u64; 3]);
44 CachePadded
::new([17u64; 4]);
45 CachePadded
::new([17u64; 5]);
46 CachePadded
::new([17u64; 6]);
47 CachePadded
::new([17u64; 7]);
48 CachePadded
::new([17u64; 8]);
54 let b
= CachePadded
::new(a
);
55 assert
!(mem
::size_of_val(&a
) <= mem
::size_of_val(&b
));
61 format
!("{:?}", CachePadded
::new(17u64)),
62 "CachePadded { value: 17 }"
68 let count
= Cell
::new(0);
70 struct Foo
<'a
>(&'a Cell
<usize>);
72 impl<'a
> Drop
for Foo
<'a
> {
74 self.0.set(self.0.get() + 1);
78 let a
= CachePadded
::new(Foo(&count
));
79 let b
= CachePadded
::new(Foo(&count
));
81 assert_eq
!(count
.get(), 0);
83 assert_eq
!(count
.get(), 1);
85 assert_eq
!(count
.get(), 2);
90 let a
= CachePadded
::new(17);
96 fn runs_custom_clone() {
97 let count
= Cell
::new(0);
99 struct Foo
<'a
>(&'a Cell
<usize>);
101 impl<'a
> Clone
for Foo
<'a
> {
102 fn clone(&self) -> Foo
<'a
> {
103 self.0.set(self.0.get() + 1);
108 let a
= CachePadded
::new(Foo(&count
));
111 assert_eq
!(count
.get(), 1);