1*03ce13f7SAndroid Build Coastguard Worker // Copyright 2020 The SwiftShader Authors. All Rights Reserved.
2*03ce13f7SAndroid Build Coastguard Worker //
3*03ce13f7SAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License");
4*03ce13f7SAndroid Build Coastguard Worker // you may not use this file except in compliance with the License.
5*03ce13f7SAndroid Build Coastguard Worker // You may obtain a copy of the License at
6*03ce13f7SAndroid Build Coastguard Worker //
7*03ce13f7SAndroid Build Coastguard Worker // http://www.apache.org/licenses/LICENSE-2.0
8*03ce13f7SAndroid Build Coastguard Worker //
9*03ce13f7SAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
10*03ce13f7SAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS,
11*03ce13f7SAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*03ce13f7SAndroid Build Coastguard Worker // See the License for the specific language governing permissions and
13*03ce13f7SAndroid Build Coastguard Worker // limitations under the License.
14*03ce13f7SAndroid Build Coastguard Worker
15*03ce13f7SAndroid Build Coastguard Worker #include "System/Synchronization.hpp"
16*03ce13f7SAndroid Build Coastguard Worker
17*03ce13f7SAndroid Build Coastguard Worker #include <gmock/gmock.h>
18*03ce13f7SAndroid Build Coastguard Worker #include <gtest/gtest.h>
19*03ce13f7SAndroid Build Coastguard Worker
20*03ce13f7SAndroid Build Coastguard Worker #include <thread>
21*03ce13f7SAndroid Build Coastguard Worker
TEST(EventCounter,ConstructUnsignalled)22*03ce13f7SAndroid Build Coastguard Worker TEST(EventCounter, ConstructUnsignalled)
23*03ce13f7SAndroid Build Coastguard Worker {
24*03ce13f7SAndroid Build Coastguard Worker sw::CountedEvent ev;
25*03ce13f7SAndroid Build Coastguard Worker ASSERT_FALSE(ev.signalled());
26*03ce13f7SAndroid Build Coastguard Worker }
27*03ce13f7SAndroid Build Coastguard Worker
TEST(EventCounter,ConstructSignalled)28*03ce13f7SAndroid Build Coastguard Worker TEST(EventCounter, ConstructSignalled)
29*03ce13f7SAndroid Build Coastguard Worker {
30*03ce13f7SAndroid Build Coastguard Worker sw::CountedEvent ev(true);
31*03ce13f7SAndroid Build Coastguard Worker ASSERT_TRUE(ev.signalled());
32*03ce13f7SAndroid Build Coastguard Worker }
33*03ce13f7SAndroid Build Coastguard Worker
TEST(EventCounter,Reset)34*03ce13f7SAndroid Build Coastguard Worker TEST(EventCounter, Reset)
35*03ce13f7SAndroid Build Coastguard Worker {
36*03ce13f7SAndroid Build Coastguard Worker sw::CountedEvent ev(true);
37*03ce13f7SAndroid Build Coastguard Worker ev.reset();
38*03ce13f7SAndroid Build Coastguard Worker ASSERT_FALSE(ev.signalled());
39*03ce13f7SAndroid Build Coastguard Worker }
40*03ce13f7SAndroid Build Coastguard Worker
TEST(EventCounter,AddUnsignalled)41*03ce13f7SAndroid Build Coastguard Worker TEST(EventCounter, AddUnsignalled)
42*03ce13f7SAndroid Build Coastguard Worker {
43*03ce13f7SAndroid Build Coastguard Worker sw::CountedEvent ev;
44*03ce13f7SAndroid Build Coastguard Worker ev.add();
45*03ce13f7SAndroid Build Coastguard Worker ASSERT_FALSE(ev.signalled());
46*03ce13f7SAndroid Build Coastguard Worker }
47*03ce13f7SAndroid Build Coastguard Worker
TEST(EventCounter,AddDoneUnsignalled)48*03ce13f7SAndroid Build Coastguard Worker TEST(EventCounter, AddDoneUnsignalled)
49*03ce13f7SAndroid Build Coastguard Worker {
50*03ce13f7SAndroid Build Coastguard Worker sw::CountedEvent ev;
51*03ce13f7SAndroid Build Coastguard Worker ev.add();
52*03ce13f7SAndroid Build Coastguard Worker ev.done();
53*03ce13f7SAndroid Build Coastguard Worker ASSERT_TRUE(ev.signalled());
54*03ce13f7SAndroid Build Coastguard Worker }
55*03ce13f7SAndroid Build Coastguard Worker
TEST(EventCounter,Wait)56*03ce13f7SAndroid Build Coastguard Worker TEST(EventCounter, Wait)
57*03ce13f7SAndroid Build Coastguard Worker {
58*03ce13f7SAndroid Build Coastguard Worker sw::CountedEvent ev;
59*03ce13f7SAndroid Build Coastguard Worker bool b = false;
60*03ce13f7SAndroid Build Coastguard Worker
61*03ce13f7SAndroid Build Coastguard Worker ev.add();
62*03ce13f7SAndroid Build Coastguard Worker auto t = std::thread([=, &b] {
63*03ce13f7SAndroid Build Coastguard Worker b = true;
64*03ce13f7SAndroid Build Coastguard Worker ev.done();
65*03ce13f7SAndroid Build Coastguard Worker });
66*03ce13f7SAndroid Build Coastguard Worker
67*03ce13f7SAndroid Build Coastguard Worker ev.wait();
68*03ce13f7SAndroid Build Coastguard Worker ASSERT_TRUE(b);
69*03ce13f7SAndroid Build Coastguard Worker t.join();
70*03ce13f7SAndroid Build Coastguard Worker }
71*03ce13f7SAndroid Build Coastguard Worker
TEST(EventCounter,WaitNoTimeout)72*03ce13f7SAndroid Build Coastguard Worker TEST(EventCounter, WaitNoTimeout)
73*03ce13f7SAndroid Build Coastguard Worker {
74*03ce13f7SAndroid Build Coastguard Worker sw::CountedEvent ev;
75*03ce13f7SAndroid Build Coastguard Worker bool b = false;
76*03ce13f7SAndroid Build Coastguard Worker
77*03ce13f7SAndroid Build Coastguard Worker ev.add();
78*03ce13f7SAndroid Build Coastguard Worker auto t = std::thread([=, &b] {
79*03ce13f7SAndroid Build Coastguard Worker b = true;
80*03ce13f7SAndroid Build Coastguard Worker ev.done();
81*03ce13f7SAndroid Build Coastguard Worker });
82*03ce13f7SAndroid Build Coastguard Worker
83*03ce13f7SAndroid Build Coastguard Worker ASSERT_TRUE(ev.wait(std::chrono::system_clock::now() + std::chrono::seconds(10)));
84*03ce13f7SAndroid Build Coastguard Worker ASSERT_TRUE(b);
85*03ce13f7SAndroid Build Coastguard Worker t.join();
86*03ce13f7SAndroid Build Coastguard Worker }
87*03ce13f7SAndroid Build Coastguard Worker
TEST(EventCounter,WaitTimeout)88*03ce13f7SAndroid Build Coastguard Worker TEST(EventCounter, WaitTimeout)
89*03ce13f7SAndroid Build Coastguard Worker {
90*03ce13f7SAndroid Build Coastguard Worker sw::CountedEvent ev;
91*03ce13f7SAndroid Build Coastguard Worker ev.add();
92*03ce13f7SAndroid Build Coastguard Worker ASSERT_FALSE(ev.wait(std::chrono::system_clock::now() + std::chrono::milliseconds(1)));
93*03ce13f7SAndroid Build Coastguard Worker }
94