Skip to content

Commit 0a3fe46

Browse files
authored
sync: remove duplicated code in OnceCell tests (#7458)
Signed-off-by: ADD-SP <[email protected]>
1 parent 154d7d5 commit 0a3fe46

File tree

1 file changed

+29
-53
lines changed

1 file changed

+29
-53
lines changed

tokio/tests/sync_once_cell.rs

Lines changed: 29 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -3,99 +3,75 @@
33

44
use std::mem;
55
use std::sync::atomic::{AtomicU32, Ordering};
6+
use std::sync::Arc;
67
use std::time::Duration;
78
use tokio::runtime;
89
use tokio::sync::OnceCell;
910
use tokio::sync::SetError;
1011
use tokio::time;
1112

12-
#[test]
13-
fn drop_cell() {
14-
static NUM_DROPS: AtomicU32 = AtomicU32::new(0);
15-
16-
struct Foo {}
13+
struct Foo {
14+
value: Arc<AtomicU32>,
15+
}
1716

18-
let fooer = Foo {};
17+
impl Drop for Foo {
18+
fn drop(&mut self) {
19+
self.value.fetch_add(1, Ordering::Release);
20+
}
21+
}
1922

20-
impl Drop for Foo {
21-
fn drop(&mut self) {
22-
NUM_DROPS.fetch_add(1, Ordering::Release);
23-
}
23+
impl From<Arc<AtomicU32>> for Foo {
24+
fn from(value: Arc<AtomicU32>) -> Self {
25+
Foo { value }
2426
}
27+
}
2528

29+
#[test]
30+
fn drop_cell() {
31+
let num_drops = Arc::new(AtomicU32::new(0));
2632
{
2733
let once_cell = OnceCell::new();
28-
let prev = once_cell.set(fooer);
34+
let prev = once_cell.set(Foo::from(num_drops.clone()));
2935
assert!(prev.is_ok())
3036
}
31-
assert!(NUM_DROPS.load(Ordering::Acquire) == 1);
37+
assert!(num_drops.load(Ordering::Acquire) == 1);
3238
}
3339

3440
#[test]
3541
fn drop_cell_new_with() {
36-
static NUM_DROPS: AtomicU32 = AtomicU32::new(0);
37-
38-
struct Foo {}
39-
40-
let fooer = Foo {};
41-
42-
impl Drop for Foo {
43-
fn drop(&mut self) {
44-
NUM_DROPS.fetch_add(1, Ordering::Release);
45-
}
46-
}
47-
42+
let num_drops = Arc::new(AtomicU32::new(0));
4843
{
49-
let once_cell = OnceCell::new_with(Some(fooer));
44+
let once_cell = OnceCell::new_with(Some(Foo::from(num_drops.clone())));
5045
assert!(once_cell.initialized());
5146
}
52-
assert!(NUM_DROPS.load(Ordering::Acquire) == 1);
47+
assert!(num_drops.load(Ordering::Acquire) == 1);
5348
}
5449

5550
#[test]
5651
fn drop_into_inner() {
57-
static NUM_DROPS: AtomicU32 = AtomicU32::new(0);
58-
59-
struct Foo {}
60-
61-
let fooer = Foo {};
62-
63-
impl Drop for Foo {
64-
fn drop(&mut self) {
65-
NUM_DROPS.fetch_add(1, Ordering::Release);
66-
}
67-
}
52+
let num_drops = Arc::new(AtomicU32::new(0));
6853

6954
let once_cell = OnceCell::new();
70-
assert!(once_cell.set(fooer).is_ok());
55+
assert!(once_cell.set(Foo::from(num_drops.clone())).is_ok());
7156
let fooer = once_cell.into_inner();
72-
let count = NUM_DROPS.load(Ordering::Acquire);
57+
let count = num_drops.load(Ordering::Acquire);
7358
assert!(count == 0);
7459
drop(fooer);
75-
let count = NUM_DROPS.load(Ordering::Acquire);
60+
let count = num_drops.load(Ordering::Acquire);
7661
assert!(count == 1);
7762
}
7863

7964
#[test]
8065
fn drop_into_inner_new_with() {
81-
static NUM_DROPS: AtomicU32 = AtomicU32::new(0);
82-
83-
struct Foo {}
84-
85-
let fooer = Foo {};
86-
87-
impl Drop for Foo {
88-
fn drop(&mut self) {
89-
NUM_DROPS.fetch_add(1, Ordering::Release);
90-
}
91-
}
66+
let num_drops = Arc::new(AtomicU32::new(0));
67+
let fooer = Foo::from(num_drops.clone());
9268

9369
let once_cell = OnceCell::new_with(Some(fooer));
9470
let fooer = once_cell.into_inner();
95-
let count = NUM_DROPS.load(Ordering::Acquire);
71+
let count = num_drops.load(Ordering::Acquire);
9672
assert!(count == 0);
9773
mem::drop(fooer);
98-
let count = NUM_DROPS.load(Ordering::Acquire);
74+
let count = num_drops.load(Ordering::Acquire);
9975
assert!(count == 1);
10076
}
10177

0 commit comments

Comments
 (0)