Skip to content

Commit 43cf9a3

Browse files
committed
Working unittests
1 parent 73add44 commit 43cf9a3

File tree

3 files changed

+78
-23
lines changed

3 files changed

+78
-23
lines changed

UNITTESTS/events/equeue/test_equeue.cpp

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
#define DISPATCH_INFINITE -1
2727
#define ITERATION_TIMES 10
2828

29+
extern unsigned int global_time;
30+
2931
class TestEqueue : public testing::Test {
3032
virtual void SetUp()
3133
{
@@ -48,6 +50,7 @@ static void simple_func(void *p)
4850

4951
static void sloth_func(void *p)
5052
{
53+
global_time += 10;
5154
usleep(10000);
5255
(*(reinterpret_cast<uint8_t *>(p)))++;
5356
}
@@ -122,7 +125,7 @@ static void nest_func(void *p)
122125
{
123126
struct nest *nst = reinterpret_cast<struct nest *>(p);
124127
equeue_call(nst->q, nst->cb, nst->data);
125-
128+
global_time += 10;
126129
usleep(10000);
127130
}
128131

@@ -133,6 +136,14 @@ static void *multithread_thread(void *p)
133136
return 0;
134137
}
135138

139+
static void multithread_func(void *p)
140+
{
141+
if ((*(reinterpret_cast<uint8_t *>(p))) < 200) {
142+
(*(reinterpret_cast<uint8_t *>(p)))++;
143+
}
144+
usleep(10);
145+
}
146+
136147
static void background_func(void *p, int ms)
137148
{
138149
*(reinterpret_cast<int *>(p)) = ms;
@@ -160,6 +171,7 @@ static void simple_breaker(void *p)
160171
{
161172
struct count_and_queue *caq = reinterpret_cast<struct count_and_queue *>(p);
162173
equeue_break(caq->q);
174+
global_time += 10;
163175
usleep(10000);
164176
caq->p++;
165177
}
@@ -223,7 +235,7 @@ TEST_F(TestEqueue, test_equeue_simple_call_in)
223235
* Then function passed by equeue_call_every is executed properly.
224236
*/
225237

226-
TEST_F(TestEqueue, test_equeue_simple_call_every) // not working
238+
TEST_F(TestEqueue, test_equeue_simple_call_every)
227239
{
228240
equeue_t q;
229241
int err = equeue_create(&q, TEST_EQUEUE_SIZE);
@@ -548,7 +560,7 @@ TEST_F(TestEqueue, test_equeue_break_no_windup)
548560
* Then event is executed (dispatch time/period) times.
549561
*/
550562

551-
TEST_F(TestEqueue, test_equeue_period) // not working
563+
TEST_F(TestEqueue, test_equeue_period)
552564
{
553565
equeue_t q;
554566
int err = equeue_create(&q, TEST_EQUEUE_SIZE);
@@ -569,7 +581,7 @@ TEST_F(TestEqueue, test_equeue_period) // not working
569581
* When nested function is added to enqueue.
570582
* Then it is executed in the next dispatch, or after execution of "mother" function.
571583
*/
572-
TEST_F(TestEqueue, test_equeue_nested) // not working
584+
TEST_F(TestEqueue, test_equeue_nested)
573585
{
574586
equeue_t q;
575587
int err = equeue_create(&q, TEST_EQUEUE_SIZE);
@@ -645,14 +657,14 @@ TEST_F(TestEqueue, test_equeue_sloth)
645657
* When equeue starts dispatching in one thread.
646658
* Then it can be stopped from another thread via equeue_break.
647659
*/
648-
TEST_F(TestEqueue, test_equeue_multithread) // not working
660+
TEST_F(TestEqueue, test_equeue_multithread)
649661
{
650662
equeue_t q;
651663
int err = equeue_create(&q, TEST_EQUEUE_SIZE);
652664
ASSERT_EQ(0, err);
653665

654666
uint8_t touched = 0;
655-
equeue_call_every(&q, 1, simple_func, &touched);
667+
equeue_call_every(&q, 1, multithread_func, &touched);
656668

657669
pthread_t thread;
658670
err = pthread_create(&thread, 0, multithread_thread, &q);
@@ -929,7 +941,7 @@ TEST_F(TestEqueue, test_equeue_multithreaded_barrage)
929941
* When equeue break request flag is called but equeue stops dispatching because of timeout.
930942
* Then next equeue dispatch is not stopped.
931943
*/
932-
TEST_F(TestEqueue, test_equeue_break_request_cleared_on_timeout) // not working
944+
TEST_F(TestEqueue, test_equeue_break_request_cleared_on_timeout)
933945
{
934946
equeue_t q;
935947
int err = equeue_create(&q, TEST_EQUEUE_SIZE);

UNITTESTS/events/equeue/unittest.cmake

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,11 @@ set(unittest-includes ${unittest-includes}
1212

1313
set(unittest-sources
1414
../events/equeue/equeue.c
15-
### comment on windows
16-
../events/equeue/equeue_posix.c
17-
###
1815
)
1916

2017
set(unittest-test-sources
2118
events/equeue/test_equeue.cpp
22-
### uncomment on windows
23-
# stubs/EqueuePosix_stub.c
24-
###
19+
stubs/EqueuePosix_stub.c
2520
)
2621

2722
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread -DEQUEUE_PLATFORM_POSIX")

UNITTESTS/stubs/EqueuePosix_stub.c

Lines changed: 58 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,43 +23,91 @@
2323
#include <sys/time.h>
2424
#include <errno.h>
2525

26+
unsigned int global_time = 0;
2627

2728
// Tick operations
2829
void equeue_tick_init(void) {}
2930

3031
unsigned equeue_tick(void)
3132
{
32-
struct timeval tv;
33-
gettimeofday(&tv, 0);
34-
return (unsigned)(tv.tv_sec * 1000 + tv.tv_usec / 1000);
33+
return global_time;
3534
}
3635

3736

3837
// Mutex operations
3938
int equeue_mutex_create(equeue_mutex_t *m)
4039
{
41-
return 0;
40+
return pthread_mutex_init(m, 0);
4241
}
4342

44-
void equeue_mutex_destroy(equeue_mutex_t *m) {}
43+
void equeue_mutex_destroy(equeue_mutex_t *m)
44+
{
45+
pthread_mutex_destroy(m);
46+
}
4547

46-
void equeue_mutex_lock(equeue_mutex_t *m) {}
48+
void equeue_mutex_lock(equeue_mutex_t *m)
49+
{
50+
pthread_mutex_lock(m);
51+
}
52+
53+
void equeue_mutex_unlock(equeue_mutex_t *m)
54+
{
55+
pthread_mutex_unlock(m);
56+
}
4757

48-
void equeue_mutex_unlock(equeue_mutex_t *m) {}
4958

5059
// Semaphore operations
5160
int equeue_sema_create(equeue_sema_t *s)
5261
{
62+
int err = pthread_mutex_init(&s->mutex, 0);
63+
if (err) {
64+
return err;
65+
}
66+
67+
err = pthread_cond_init(&s->cond, 0);
68+
if (err) {
69+
return err;
70+
}
71+
72+
s->signal = false;
5373
return 0;
5474
}
5575

56-
void equeue_sema_destroy(equeue_sema_t *s) {}
76+
void equeue_sema_destroy(equeue_sema_t *s)
77+
{
78+
pthread_cond_destroy(&s->cond);
79+
pthread_mutex_destroy(&s->mutex);
80+
}
5781

58-
void equeue_sema_signal(equeue_sema_t *s) {}
82+
void equeue_sema_signal(equeue_sema_t *s)
83+
{
84+
pthread_mutex_lock(&s->mutex);
85+
s->signal = true;
86+
pthread_cond_signal(&s->cond);
87+
pthread_mutex_unlock(&s->mutex);
88+
}
5989

6090
bool equeue_sema_wait(equeue_sema_t *s, int ms)
6191
{
62-
return false;
92+
pthread_mutex_lock(&s->mutex);
93+
if (!s->signal) {
94+
if (ms < 0) {
95+
pthread_cond_wait(&s->cond, &s->mutex);
96+
} else {
97+
for (int i = 0; i < ms; i++) {
98+
global_time++;
99+
}
100+
if (ms == 0) {
101+
global_time++;
102+
}
103+
}
104+
}
105+
106+
bool signal = s->signal;
107+
s->signal = false;
108+
pthread_mutex_unlock(&s->mutex);
109+
110+
return signal;
63111
}
64112

65113
#endif

0 commit comments

Comments
 (0)