Skip to content

Commit b5b98c0

Browse files
author
AbeZbm
committed
Add tests for OnceRef
1 parent 29e3d93 commit b5b98c0

1 file changed

Lines changed: 56 additions & 1 deletion

File tree

tests/it/race.rs

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use std::{
66
thread::scope,
77
};
88

9-
use once_cell::race::{OnceBool, OnceNonZeroUsize};
9+
use once_cell::race::{OnceBool, OnceNonZeroUsize, OnceRef};
1010

1111
#[test]
1212
fn once_non_zero_usize_smoke_test() {
@@ -127,6 +127,61 @@ fn once_bool_set() {
127127
assert_eq!(cell.get(), Some(false));
128128
}
129129

130+
#[test]
131+
fn once_bool_get_or_try_init() {
132+
let cell = OnceBool::new();
133+
134+
let result1: Result<bool, ()> = cell.get_or_try_init(|| Ok(true));
135+
let result2: Result<bool, ()> = cell.get_or_try_init(|| Ok(false));
136+
assert_eq!(result1, Ok(true));
137+
assert_eq!(result2, Ok(true));
138+
139+
let cell = OnceBool::new();
140+
141+
let result3: Result<bool, ()> = cell.get_or_try_init(|| Err(()));
142+
assert_eq!(result3, Err(()));
143+
}
144+
145+
#[test]
146+
fn once_ref_smoke_test() {
147+
let cnt: AtomicUsize = AtomicUsize::new(0);
148+
let cell: OnceRef<'_, &str> = OnceRef::new();
149+
scope(|s| {
150+
s.spawn(|| {
151+
assert_eq!(
152+
cell.get_or_init(|| {
153+
cnt.fetch_add(1, SeqCst);
154+
&"false"
155+
}),
156+
&"false"
157+
);
158+
assert_eq!(cnt.load(SeqCst), 1);
159+
160+
assert_eq!(
161+
cell.get_or_init(|| {
162+
cnt.fetch_add(1, SeqCst);
163+
&"false"
164+
}),
165+
&"false"
166+
);
167+
assert_eq!(cnt.load(SeqCst), 1);
168+
});
169+
});
170+
assert_eq!(cell.get(), Some(&"false"));
171+
assert_eq!(cnt.load(SeqCst), 1);
172+
}
173+
174+
#[test]
175+
fn once_ref_set() {
176+
let cell: OnceRef<'_, &str> = OnceRef::new();
177+
178+
assert!(cell.set(&"false").is_ok());
179+
assert_eq!(cell.get(), Some(&"false"));
180+
181+
assert!(cell.set(&"true").is_err());
182+
assert_eq!(cell.get(), Some(&"false"));
183+
}
184+
130185
#[test]
131186
fn get_unchecked() {
132187
let cell = OnceNonZeroUsize::new();

0 commit comments

Comments
 (0)