@@ -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]
1212fn 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]
131186fn get_unchecked ( ) {
132187 let cell = OnceNonZeroUsize :: new ( ) ;
0 commit comments