@@ -362,14 +362,18 @@ void mixed_dynamic_static_events_queue_test()
362362
363363 EventTest e1_test;
364364 Event<void ()> e1 = queue.event (&e1_test, &EventTest::f0);
365+ e1 .delay (10 );
366+ e1 .period (10 );
365367 int id1 = e1 .post ();
366368 TEST_ASSERT_NOT_EQUAL (0 , id1);
367369 EventTest e2_test;
368370 Event<void ()> e2 = queue.event (&e2_test, &EventTest::f1, 3 );
371+ e2 .period (10 );
369372 int id2 = e2 .post ();
370373 TEST_ASSERT_NOT_EQUAL (0 , id2);
371374 EventTest e3_test;
372375 Event<void ()> e3 = queue.event (&e3_test, &EventTest::f5, 1 , 2 , 3 , 4 , 5 );
376+ e3 .period (10 );
373377 int id3 = e3 .post ();
374378 TEST_ASSERT_NOT_EQUAL (0 , id3);
375379
@@ -390,8 +394,11 @@ void mixed_dynamic_static_events_queue_test()
390394 TEST_ASSERT_EQUAL (false , ue0.try_call ());
391395 ue1.call_on (&queue);
392396 TEST_ASSERT_EQUAL (false , ue1.try_call ());
397+ ue2.period (10 );
393398 ue2.call_on (&queue);
394399 TEST_ASSERT_EQUAL (false , ue2.try_call ());
400+ ue3.period (10 );
401+ ue3.delay (50 );
395402 ue3.call_on (&queue);
396403 TEST_ASSERT_EQUAL (false , ue3.try_call ());
397404 ue4.call_on (&queue);
@@ -400,21 +407,36 @@ void mixed_dynamic_static_events_queue_test()
400407 ue4.cancel ();
401408 e2 .cancel ();
402409
403- queue.dispatch (1 );
410+ queue.dispatch (101 );
404411
405412 TEST_ASSERT_EQUAL (true , touched);
406413 TEST_ASSERT_EQUAL (1 , ue1_test.counter );
407- TEST_ASSERT_EQUAL (3 , ue2_test.counter );
408- TEST_ASSERT_EQUAL (15 , ue3_test.counter );
414+ TEST_ASSERT_EQUAL (33 , ue2_test.counter );
415+ TEST_ASSERT_EQUAL (90 , ue3_test.counter );
409416 TEST_ASSERT_EQUAL (0 , ue4_test.counter );
410- TEST_ASSERT_EQUAL (1 , e1_test.counter );
417+ TEST_ASSERT_EQUAL (10 , e1_test.counter );
411418 TEST_ASSERT_EQUAL (0 , e2_test.counter );
412- TEST_ASSERT_EQUAL (15 , e3_test.counter );
419+ TEST_ASSERT_EQUAL (165 , e3_test.counter );
420+
421+ // user allocated event have to be canceled(removed from the queue) before destruction
422+ // cancel all periodic user events
423+ ue2.cancel ();
424+ ue3.cancel ();
413425 }
414426}
415427
416428
417429static EventQueue g_queue (0 );
430+ static auto ue0 = g_queue.make_user_allocated_event(func0);
431+ static EventTest test1;
432+ static auto ue1 = make_user_allocated_event(&test1, &EventTest::f0);
433+ static EventTest test2;
434+ static auto ue2 = g_queue.make_user_allocated_event(&test2, &EventTest::f1, 3 );
435+ static EventTest test3;
436+ static auto ue3 = make_user_allocated_event(&test3, &EventTest::f5, 1 , 2 , 3 , 4 , 5 );
437+ static EventTest test4;
438+ static auto ue4 = g_queue.make_user_allocated_event(&test4, &EventTest::f5, 1 , 2 , 3 , 4 , 5 );
439+
418440
419441/* * Test that static queue executes user allocated events.
420442 *
@@ -428,15 +450,20 @@ void static_events_queue_test()
428450 Event<void ()> e0 = g_queue.event (func0);
429451 TEST_ASSERT_EQUAL (0 , e0 .post ());
430452
431- auto ue0 = g_queue.make_user_allocated_event (func0);
432- EventTest test1;
433- auto ue1 = make_user_allocated_event (&test1, &EventTest::f0);
434- EventTest test2;
435- auto ue2 = g_queue.make_user_allocated_event (&test2, &EventTest::f1, 3 );
436- EventTest test3;
437- auto ue3 = make_user_allocated_event (&test3, &EventTest::f5, 1 , 2 , 3 , 4 , 5 );
438- EventTest test4;
439- auto ue4 = g_queue.make_user_allocated_event (&test4, &EventTest::f5, 1 , 2 , 3 , 4 , 5 );
453+ ue0.delay (100 );
454+ ue0.period (200 );
455+
456+ ue1.delay (100 );
457+ ue1.period (200 );
458+
459+ ue2.delay (100 );
460+ ue2.period (200 );
461+
462+ ue3.delay (100 );
463+ ue3.period (200 );
464+
465+ ue4.delay (100 );
466+ ue4.period (200 );
440467
441468 ue0.call ();
442469 TEST_ASSERT_EQUAL (false , ue0.try_call ());
@@ -448,16 +475,26 @@ void static_events_queue_test()
448475 TEST_ASSERT_EQUAL (false , ue3.try_call ());
449476 ue4.call ();
450477 ue4.cancel ();
478+ ue4.cancel ();
451479 TEST_ASSERT_EQUAL (true , ue4.try_call ());
452480 g_queue.cancel (&ue4);
481+ g_queue.cancel (&ue4);
453482
454- g_queue.dispatch (1 );
483+ g_queue.dispatch (400 );
455484
456- TEST_ASSERT_EQUAL (1 , test1.counter );
457- TEST_ASSERT_EQUAL (3 , test2.counter );
458- TEST_ASSERT_EQUAL (15 , test3.counter );
485+ TEST_ASSERT_EQUAL (2 , test1.counter );
486+ TEST_ASSERT_EQUAL (6 , test2.counter );
487+ TEST_ASSERT_EQUAL (30 , test3.counter );
459488 TEST_ASSERT_EQUAL (0 , test4.counter );
460489
490+ ue4.delay (1 );
491+ TEST_ASSERT_EQUAL (true , ue4.try_call ());
492+ g_queue.dispatch (1 );
493+
494+ TEST_ASSERT_EQUAL (2 , test1.counter );
495+ TEST_ASSERT_EQUAL (6 , test2.counter );
496+ TEST_ASSERT_EQUAL (30 , test3.counter );
497+ TEST_ASSERT_EQUAL (15 , test4.counter );
461498}
462499
463500// Test setup
0 commit comments