1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
#include <functional>
#include <mutex>
#include <thread>
#include "test.h"
#include "epoch.h"
using namespace std;
TEST_CASE("advance") {
Epoch e;
CHECK(e.cur() == 1);
e.advance();
CHECK(e.cur() == 2);
e.advance();
CHECK(e.cur() == 3);
e.advance();
CHECK(e.cur() == 4);
}
void epoch_waiter(Epoch* e) {
mutex m;
unique_lock<mutex> ul(m);
size_t cur = e->cur();
e->wait(&ul);
CHECK(e->cur() == cur + 1);
}
TEST_CASE("wait") {
Epoch e;
e.advance();
e.advance();
e.advance();
e.advance();
e.advance();
thread t(bind(&epoch_waiter, &e));
usleep(1000);
e.advance();
t.join();
}
|