Skip to content

Commit f74a36b

Browse files
queue test: add user allocated events test
1 parent 34172ef commit f74a36b

File tree

1 file changed

+129
-0
lines changed

1 file changed

+129
-0
lines changed

TESTS/events/queue/main.cpp

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,134 @@ void time_left_test()
322322
TEST_ASSERT_EQUAL(-1, queue.time_left(0));
323323
}
324324

325+
void f5(int a1, int a2, int a3, int a4, int a5)
326+
{
327+
touched = true;
328+
}
329+
330+
class UserAllocatedTest {
331+
public:
332+
UserAllocatedTest() : counter() {}
333+
void f0()
334+
{
335+
counter++;
336+
}
337+
void f1(int a)
338+
{
339+
counter += a;
340+
}
341+
void f5(int a, int b, int c, int d, int e)
342+
{
343+
counter += a + b + c + d + e;
344+
}
345+
uint32_t counter;
346+
};
347+
348+
void my_f0()
349+
{
350+
touched = true;
351+
}
352+
void my_f5(int, int, int, int, int)
353+
{
354+
touched = true;
355+
}
356+
357+
/** Test that queue executes user allocated events.
358+
*
359+
* Given queue is initialized and its size is set to store one Event at max in its internal memory.
360+
* When post queue allocated event.
361+
* Then only one event can be posted due to queue memory size.
362+
* When post user allocated evens.
363+
* Then number of posted events is not limited by queue memory size.
364+
* When both Event and UserAllocatedEvent are posted and queue dispatch is called.
365+
* Then both types of events are executed properly.
366+
*
367+
* Given queue is initialized and its size is set 1B - only user allocated events allowed.
368+
* When post user allocated evens.
369+
* Then UserAllocatedEvent are posted and dispatched without any error.
370+
*/
371+
void user_allocated_events_test()
372+
{
373+
{
374+
EventQueue queue(4 * EVENTS_EVENT_SIZE);
375+
376+
Event<void()> e0 = queue.event(func0);
377+
TEST_ASSERT_NOT_EQUAL(0, e0.post());
378+
Event<void()> e1 = queue.event(func0);
379+
TEST_ASSERT_EQUAL(0, e1.post());
380+
381+
auto ue0 = make_user_allocated_event(func0);
382+
UserAllocatedTest test1;
383+
auto ue1 = make_user_allocated_event(&test1, &UserAllocatedTest::f0);
384+
UserAllocatedTest test2;
385+
auto ue2 = make_user_allocated_event(&test2, &UserAllocatedTest::f1, 3);
386+
UserAllocatedTest test3;
387+
auto ue3 = make_user_allocated_event(&test3, &UserAllocatedTest::f5, 1, 2, 3, 4, 5);
388+
UserAllocatedTest test4;
389+
auto ue4 = make_user_allocated_event(&test4, &UserAllocatedTest::f5, 1, 2, 3, 4, 5);
390+
391+
touched = false;
392+
393+
ue0.call_on(&queue);
394+
TEST_ASSERT_EQUAL(false, ue0.try_call());
395+
ue1.call_on(&queue);
396+
TEST_ASSERT_EQUAL(false, ue1.try_call());
397+
ue2.call_on(&queue);
398+
TEST_ASSERT_EQUAL(false, ue2.try_call());
399+
ue3.call_on(&queue);
400+
TEST_ASSERT_EQUAL(false, ue3.try_call());
401+
ue4.call_on(&queue);
402+
ue4.cancel();
403+
TEST_ASSERT_EQUAL(true, ue4.try_call());
404+
ue4.cancel();
405+
406+
queue.dispatch(1);
407+
408+
TEST_ASSERT_EQUAL(true, touched);
409+
TEST_ASSERT_EQUAL(1, test1.counter);
410+
TEST_ASSERT_EQUAL(3, test2.counter);
411+
TEST_ASSERT_EQUAL(15, test3.counter);
412+
TEST_ASSERT_EQUAL(0, test4.counter);
413+
}
414+
415+
{
416+
EventQueue queue(1);
417+
418+
Event<void()> e0 = queue.event(func0);
419+
TEST_ASSERT_EQUAL(0, e0.post());
420+
421+
auto ue0 = make_user_allocated_event(func0);
422+
UserAllocatedTest test1;
423+
auto ue1 = make_user_allocated_event(&test1, &UserAllocatedTest::f0);
424+
UserAllocatedTest test2;
425+
auto ue2 = make_user_allocated_event(&test2, &UserAllocatedTest::f1, 3);
426+
UserAllocatedTest test3;
427+
auto ue3 = make_user_allocated_event(&test3, &UserAllocatedTest::f5, 1, 2, 3, 4, 5);
428+
UserAllocatedTest test4;
429+
auto ue4 = make_user_allocated_event(&test4, &UserAllocatedTest::f5, 1, 2, 3, 4, 5);
430+
431+
ue0.call_on(&queue);
432+
TEST_ASSERT_EQUAL(false, ue0.try_call());
433+
ue1.call_on(&queue);
434+
TEST_ASSERT_EQUAL(false, ue1.try_call());
435+
ue2.call_on(&queue);
436+
TEST_ASSERT_EQUAL(false, ue2.try_call());
437+
ue3.call_on(&queue);
438+
TEST_ASSERT_EQUAL(false, ue3.try_call());
439+
ue4.call_on(&queue);
440+
ue4.cancel();
441+
TEST_ASSERT_EQUAL(true, ue4.try_call());
442+
ue4.cancel();
443+
444+
queue.dispatch(1);
445+
446+
TEST_ASSERT_EQUAL(1, test1.counter);
447+
TEST_ASSERT_EQUAL(3, test2.counter);
448+
TEST_ASSERT_EQUAL(15, test3.counter);
449+
TEST_ASSERT_EQUAL(0, test4.counter);
450+
}
451+
}
452+
325453
// Test setup
326454
utest::v1::status_t test_setup(const size_t number_of_cases)
327455
{
@@ -348,6 +476,7 @@ const Case cases[] = {
348476
Case("Testing the event inference", event_inference_test),
349477

350478
Case("Testing time_left", time_left_test),
479+
Case("Testing user allocated event class", user_allocated_events_test)
351480
};
352481

353482
Specification specification(test_setup, cases);

0 commit comments

Comments
 (0)