blob: c1524328d55e5aa14a42215b365a6ec586880242 [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <fbl/auto_lock.h>
#include <fbl/condition_variable.h>
#include <fbl/mutex.h>
#include <unittest/unittest.h>
namespace fbl {
namespace {
bool EmptySignalTest() {
BEGIN_TEST;
ConditionVariable cvar;
cvar.Signal();
cvar.Broadcast();
END_TEST;
}
bool WaitTest() {
BEGIN_TEST;
struct State {
Mutex mutex;
ConditionVariable cvar;
} state;
thrd_t thread;
AutoLock lock(&state.mutex);
thrd_create(&thread, [](void* arg) {
auto state = reinterpret_cast<State*>(arg);
AutoLock lock(&state->mutex);
state->cvar.Signal();
return 0;
}, &state);
state.cvar.Wait(&state.mutex);
thrd_join(thread, NULL);
END_TEST;
}
} // namespace
} // namespace fbl
BEGIN_TEST_CASE(ConditionVariableTests)
RUN_TEST(fbl::EmptySignalTest)
RUN_TEST(fbl::WaitTest)
END_TEST_CASE(ConditionVariableTests)