@@ -362,14 +362,18 @@ void mixed_dynamic_static_events_queue_test()
362
362
363
363
EventTest e1_test;
364
364
Event<void ()> e1 = queue.event (&e1_test, &EventTest::f0);
365
+ e1 .delay (1 );
366
+ e1 .period (1 );
365
367
int id1 = e1 .post ();
366
368
TEST_ASSERT_NOT_EQUAL (0 , id1);
367
369
EventTest e2_test;
368
370
Event<void ()> e2 = queue.event (&e2_test, &EventTest::f1, 3 );
371
+ e2 .period (1 );
369
372
int id2 = e2 .post ();
370
373
TEST_ASSERT_NOT_EQUAL (0 , id2);
371
374
EventTest e3_test;
372
375
Event<void ()> e3 = queue.event (&e3_test, &EventTest::f5, 1 , 2 , 3 , 4 , 5 );
376
+ e3 .period (1 );
373
377
int id3 = e3 .post ();
374
378
TEST_ASSERT_NOT_EQUAL (0 , id3);
375
379
@@ -390,8 +394,11 @@ void mixed_dynamic_static_events_queue_test()
390
394
TEST_ASSERT_EQUAL (false , ue0.try_call ());
391
395
ue1.call_on (&queue);
392
396
TEST_ASSERT_EQUAL (false , ue1.try_call ());
397
+ ue2.period (1 );
393
398
ue2.call_on (&queue);
394
399
TEST_ASSERT_EQUAL (false , ue2.try_call ());
400
+ ue3.period (1 );
401
+ ue3.delay (5 );
395
402
ue3.call_on (&queue);
396
403
TEST_ASSERT_EQUAL (false , ue3.try_call ());
397
404
ue4.call_on (&queue);
@@ -400,21 +407,36 @@ void mixed_dynamic_static_events_queue_test()
400
407
ue4.cancel ();
401
408
e2 .cancel ();
402
409
403
- queue.dispatch (1 );
410
+ queue.dispatch (10 );
404
411
405
412
TEST_ASSERT_EQUAL (true , touched);
406
413
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 );
409
416
TEST_ASSERT_EQUAL (0 , ue4_test.counter );
410
- TEST_ASSERT_EQUAL (1 , e1_test.counter );
417
+ TEST_ASSERT_EQUAL (10 , e1_test.counter );
411
418
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 ();
413
425
}
414
426
}
415
427
416
428
417
429
static 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
+
418
440
419
441
/* * Test that static queue executes user allocated events.
420
442
*
@@ -428,15 +450,20 @@ void static_events_queue_test()
428
450
Event<void ()> e0 = g_queue.event (func0);
429
451
TEST_ASSERT_EQUAL (0 , e0 .post ());
430
452
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 );
440
467
441
468
ue0.call ();
442
469
TEST_ASSERT_EQUAL (false , ue0.try_call ());
@@ -448,16 +475,26 @@ void static_events_queue_test()
448
475
TEST_ASSERT_EQUAL (false , ue3.try_call ());
449
476
ue4.call ();
450
477
ue4.cancel ();
478
+ ue4.cancel ();
451
479
TEST_ASSERT_EQUAL (true , ue4.try_call ());
452
480
g_queue.cancel (&ue4);
481
+ g_queue.cancel (&ue4);
453
482
454
- g_queue.dispatch (1 );
483
+ g_queue.dispatch (400 );
455
484
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 );
459
488
TEST_ASSERT_EQUAL (0 , test4.counter );
460
489
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 );
461
498
}
462
499
463
500
// Test setup
0 commit comments