xref: /aosp_15_r20/external/pigweed/pw_sync/lock_traits_test.cc (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1*61c4878aSAndroid Build Coastguard Worker // Copyright 2023 The Pigweed Authors
2*61c4878aSAndroid Build Coastguard Worker //
3*61c4878aSAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License"); you may not
4*61c4878aSAndroid Build Coastguard Worker // use this file except in compliance with the License. You may obtain a copy of
5*61c4878aSAndroid Build Coastguard Worker // the License at
6*61c4878aSAndroid Build Coastguard Worker //
7*61c4878aSAndroid Build Coastguard Worker //     https://www.apache.org/licenses/LICENSE-2.0
8*61c4878aSAndroid Build Coastguard Worker //
9*61c4878aSAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
10*61c4878aSAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11*61c4878aSAndroid Build Coastguard Worker // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12*61c4878aSAndroid Build Coastguard Worker // License for the specific language governing permissions and limitations under
13*61c4878aSAndroid Build Coastguard Worker // the License.
14*61c4878aSAndroid Build Coastguard Worker 
15*61c4878aSAndroid Build Coastguard Worker #include "pw_sync/lock_traits.h"
16*61c4878aSAndroid Build Coastguard Worker 
17*61c4878aSAndroid Build Coastguard Worker #include "pw_sync/lock_testing.h"
18*61c4878aSAndroid Build Coastguard Worker #include "pw_unit_test/framework.h"
19*61c4878aSAndroid Build Coastguard Worker 
20*61c4878aSAndroid Build Coastguard Worker namespace pw::sync::test {
21*61c4878aSAndroid Build Coastguard Worker namespace {
22*61c4878aSAndroid Build Coastguard Worker 
23*61c4878aSAndroid Build Coastguard Worker struct NotALock {};
24*61c4878aSAndroid Build Coastguard Worker 
TEST(LockTraitsTest,IsBasicLockable)25*61c4878aSAndroid Build Coastguard Worker TEST(LockTraitsTest, IsBasicLockable) {
26*61c4878aSAndroid Build Coastguard Worker   EXPECT_FALSE(is_basic_lockable_v<NotALock>);
27*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(is_basic_lockable_v<FakeBasicLockable>);
28*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(is_basic_lockable_v<FakeLockable>);
29*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(is_basic_lockable_v<FakeTimedLockable>);
30*61c4878aSAndroid Build Coastguard Worker }
31*61c4878aSAndroid Build Coastguard Worker 
TEST(LockTraitsTest,IsLockable)32*61c4878aSAndroid Build Coastguard Worker TEST(LockTraitsTest, IsLockable) {
33*61c4878aSAndroid Build Coastguard Worker   EXPECT_FALSE(is_lockable_v<NotALock>);
34*61c4878aSAndroid Build Coastguard Worker   EXPECT_FALSE(is_lockable_v<FakeBasicLockable>);
35*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(is_lockable_v<FakeLockable>);
36*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE(is_lockable_v<FakeTimedLockable>);
37*61c4878aSAndroid Build Coastguard Worker }
38*61c4878aSAndroid Build Coastguard Worker 
TEST(LockTraitsTest,IsLockableFor)39*61c4878aSAndroid Build Coastguard Worker TEST(LockTraitsTest, IsLockableFor) {
40*61c4878aSAndroid Build Coastguard Worker   EXPECT_FALSE((is_lockable_for_v<NotALock, FakeClock::duration>));
41*61c4878aSAndroid Build Coastguard Worker   EXPECT_FALSE((is_lockable_for_v<FakeBasicLockable, FakeClock::duration>));
42*61c4878aSAndroid Build Coastguard Worker   EXPECT_FALSE((is_lockable_for_v<FakeLockable, FakeClock::duration>));
43*61c4878aSAndroid Build Coastguard Worker   EXPECT_FALSE((is_lockable_for_v<FakeTimedLockable, NotAClock::duration>));
44*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE((is_lockable_for_v<FakeTimedLockable, FakeClock::duration>));
45*61c4878aSAndroid Build Coastguard Worker }
46*61c4878aSAndroid Build Coastguard Worker 
TEST(LockTraitsTest,IsLockableUntil)47*61c4878aSAndroid Build Coastguard Worker TEST(LockTraitsTest, IsLockableUntil) {
48*61c4878aSAndroid Build Coastguard Worker   EXPECT_FALSE((is_lockable_until_v<NotALock, FakeClock::time_point>));
49*61c4878aSAndroid Build Coastguard Worker   EXPECT_FALSE((is_lockable_until_v<FakeBasicLockable, FakeClock::time_point>));
50*61c4878aSAndroid Build Coastguard Worker   EXPECT_FALSE((is_lockable_until_v<FakeLockable, FakeClock::time_point>));
51*61c4878aSAndroid Build Coastguard Worker   EXPECT_FALSE((is_lockable_until_v<FakeTimedLockable, NotAClock::time_point>));
52*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE((is_lockable_until_v<FakeTimedLockable, FakeClock::time_point>));
53*61c4878aSAndroid Build Coastguard Worker }
54*61c4878aSAndroid Build Coastguard Worker 
TEST(LockTraitsTest,IsTimedLockable)55*61c4878aSAndroid Build Coastguard Worker TEST(LockTraitsTest, IsTimedLockable) {
56*61c4878aSAndroid Build Coastguard Worker   EXPECT_FALSE((is_timed_lockable_v<NotALock, FakeClock>));
57*61c4878aSAndroid Build Coastguard Worker   EXPECT_FALSE((is_timed_lockable_v<FakeBasicLockable, FakeClock>));
58*61c4878aSAndroid Build Coastguard Worker   EXPECT_FALSE((is_timed_lockable_v<FakeLockable, FakeClock>));
59*61c4878aSAndroid Build Coastguard Worker   EXPECT_FALSE((is_timed_lockable_v<FakeTimedLockable, NotAClock>));
60*61c4878aSAndroid Build Coastguard Worker   EXPECT_TRUE((is_timed_lockable_v<FakeTimedLockable, FakeClock>));
61*61c4878aSAndroid Build Coastguard Worker }
62*61c4878aSAndroid Build Coastguard Worker 
63*61c4878aSAndroid Build Coastguard Worker }  // namespace
64*61c4878aSAndroid Build Coastguard Worker }  // namespace pw::sync::test
65