1 // Copyright 2025 The Pigweed Authors 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); you may not 4 // use this file except in compliance with the License. You may obtain a copy of 5 // the License at 6 // 7 // https://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 11 // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 12 // License for the specific language governing permissions and limitations under 13 // the License. 14 15 #![no_std] 16 #![no_main] 17 use kernel::sync::spinlock::*; 18 use unittest::test; 19 20 #[test] bare_try_lock_returns_correct_value() -> unittest::Result<()>21fn bare_try_lock_returns_correct_value() -> unittest::Result<()> { 22 let lock = BareSpinLock::new(); 23 24 { 25 let _sentinel = lock.lock(); 26 unittest::assert_true!(lock.try_lock().is_none()); 27 } 28 29 unittest::assert_true!(lock.try_lock().is_some()); 30 31 Ok(()) 32 } 33 34 #[test] try_lock_returns_correct_value() -> unittest::Result<()>35fn try_lock_returns_correct_value() -> unittest::Result<()> { 36 let lock = SpinLock::new(false); 37 38 { 39 let mut guard = lock.lock(); 40 *guard = true; 41 unittest::assert_true!(lock.try_lock().is_none()); 42 } 43 44 let guard = lock.lock(); 45 unittest::assert_true!(*guard); 46 47 Ok(()) 48 } 49