danicoin/tests/System/EventLockTests.cpp

73 lines
1.5 KiB
C++
Raw Normal View History

// Copyright (c) 2011-2016 The Cryptonote developers
// Distributed under the MIT/X11 software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
2015-05-27 12:08:46 +00:00
2015-07-30 15:22:07 +00:00
#include <System/Context.h>
2015-05-27 12:08:46 +00:00
#include <System/Dispatcher.h>
#include <System/Event.h>
#include <System/EventLock.h>
#include <gtest/gtest.h>
using namespace System;
TEST(EventLockTests, eventLockIsLocking) {
Dispatcher dispatcher;
Event event(dispatcher);
bool done = false;
2015-07-30 15:22:07 +00:00
Context<> context(dispatcher, [&]() {
2015-05-27 12:08:46 +00:00
EventLock lock(event);
done = true;
});
ASSERT_FALSE(done);
dispatcher.yield();
ASSERT_FALSE(done);
event.set();
dispatcher.yield();
ASSERT_TRUE(done);
}
TEST(EventLockTests, eventLockIsNotLocking) {
Dispatcher dispatcher;
Event event(dispatcher);
event.set();
bool done = false;
2015-07-30 15:22:07 +00:00
Context<> context(dispatcher, [&]() {
2015-05-27 12:08:46 +00:00
EventLock lock(event);
done = true;
});
ASSERT_FALSE(done);
dispatcher.yield();
ASSERT_TRUE(done);
}
TEST(EventLockTests, eventLockIsUnlockOnlyOnce) {
Dispatcher dispatcher;
Event event(dispatcher);
auto i = 0;
2015-07-30 15:22:07 +00:00
Context<> context(dispatcher, [&]() {
2015-05-27 12:08:46 +00:00
EventLock lock(event);
i++;
dispatcher.yield();
i++;
});
2015-07-30 15:22:07 +00:00
Context<> contextSecond(dispatcher, [&]() {
2015-05-27 12:08:46 +00:00
EventLock lock(event);
i += 2;
dispatcher.yield();
i += 2;
});
event.set();
dispatcher.yield();
ASSERT_EQ(i, 1);
dispatcher.yield();
ASSERT_EQ(i, 2);
dispatcher.yield();
ASSERT_EQ(i, 4);
dispatcher.yield();
ASSERT_EQ(i, 6);
}