File: fiber_channel.cc

package info (click to toggle)
tarantool 2.6.0-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 85,364 kB
  • sloc: ansic: 513,760; cpp: 69,489; sh: 25,650; python: 19,190; perl: 14,973; makefile: 4,173; yacc: 1,329; sql: 1,074; pascal: 620; ruby: 190; awk: 18; lisp: 7
file content (101 lines) | stat: -rw-r--r-- 2,175 bytes parent folder | download | duplicates (4)
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include "memory.h"
#include "fiber.h"
#include "fiber_channel.h"
#include "unit.h"

int status;

void
fiber_channel_basic()
{
	header();
	plan(10);

	struct fiber_channel *channel = fiber_channel_new(1);
	ok(channel != NULL, "fiber_channel_new()");

	ok(fiber_channel_size(channel) == 1, "fiber_channel_size()");

	ok(fiber_channel_count(channel) == 0, "fiber_channel_count()");

	ok(fiber_channel_is_full(channel) == false, "fiber_channel_is_full()");

	ok(fiber_channel_is_empty(channel) == true, "fiber_channel_is_empty()");

	char dummy;

	fiber_channel_put(channel, &dummy);

	ok(fiber_channel_size(channel) == 1, "fiber_channel_size(1)");

	ok(fiber_channel_count(channel) == 1, "fiber_channel_count(1)");

	ok(fiber_channel_is_full(channel) == true, "fiber_channel_is_full(1)");

	ok(fiber_channel_is_empty(channel) == false, "fiber_channel_is_empty(1)");

	void *ptr;

	fiber_channel_get(channel, &ptr);
	ok(ptr == &dummy, "fiber_channel_get()");

	fiber_channel_delete(channel);

	footer();
	status = check_plan();
}

void
fiber_channel_get()
{
	header();
	plan(7);

	struct fiber_channel *channel = fiber_channel_new(1);

	char dummy;
	ok(fiber_channel_put_timeout(channel, &dummy, 0) == 0,
	   "fiber_channel_put(0)");
	ok(fiber_channel_put_timeout(channel, &dummy, 0) == -1,
	   "fiber_channel_put_timeout(0)");
	void *ptr;
	fiber_channel_get(channel, &ptr);
	ok(ptr == &dummy, "fiber_channel_get(0)");
	ok(fiber_channel_put_timeout(channel, &dummy, 0.01) == 0,
	   "fiber_channel_put_timeout(1)");
	fiber_channel_get(channel, &ptr);
	ok(ptr == &dummy, "fiber_channel_get(1)");

	fiber_channel_close(channel);

	ok(fiber_channel_put(channel, &dummy) == -1, "fiber_channel_put(closed)");

	ok(fiber_channel_get(channel, &ptr) == -1, "fiber_channel_get(closed)");

	fiber_channel_delete(channel);

	footer();
	status = check_plan();
}

int
main_f(va_list ap)
{
	(void) ap;
	fiber_channel_basic();
	fiber_channel_get();
	ev_break(loop(), EVBREAK_ALL);
	return 0;
}

int main()
{
	memory_init();
	fiber_init(fiber_c_invoke);
	struct fiber *main= fiber_new_xc("main", main_f);
	fiber_wakeup(main);
	ev_run(loop(), 0);
	fiber_free();
	memory_free();
	return status;
}