File: test_epoch.cc

package info (click to toggle)
logserver 1.13.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 720 kB
  • sloc: cpp: 10,815; makefile: 3
file content (42 lines) | stat: -rw-r--r-- 602 bytes parent folder | download
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();
}