Skip to content

Commit 3a05b63

Browse files
Merge pull request #5158 from YarivCol/master
RTOS : added empty and full functions to Mail and Queue
2 parents 9e8a9a9 + e0a0615 commit 3a05b63

File tree

4 files changed

+109
-2
lines changed

4 files changed

+109
-2
lines changed

TESTS/mbedmicro-rtos-mbed/mail/main.cpp

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -454,6 +454,43 @@ void test_calloc()
454454
TEST_ASSERT_EQUAL(0, *mail);
455455
}
456456

457+
/** Test mail empty
458+
459+
Given a mail of uint32_t data
460+
before data is inserted the mail should be empty
461+
after data is inserted the mail shouldn't be empty
462+
*/
463+
void test_mail_empty()
464+
{
465+
Mail<mail_t, 1> m;
466+
467+
mail_t *mail = m.alloc();
468+
469+
TEST_ASSERT_EQUAL(true, m.empty());
470+
471+
m.put(mail);
472+
473+
TEST_ASSERT_EQUAL(false, m.empty());
474+
}
475+
476+
/** Test mail empty
477+
478+
Given a mail of uint32_t data with size of 1
479+
before data is inserted the mail shouldn't be full
480+
after data is inserted the mail should be full
481+
*/
482+
void test_mail_full()
483+
{
484+
Mail<mail_t, 1> m;
485+
486+
mail_t *mail = m.alloc();
487+
488+
TEST_ASSERT_EQUAL(false, m.full());
489+
490+
m.put(mail);
491+
492+
TEST_ASSERT_EQUAL(true, m.full());
493+
}
457494

458495
utest::v1::status_t test_setup(const size_t number_of_cases)
459496
{
@@ -475,7 +512,9 @@ Case cases[] = {
475512
Case("Test invalid message free", test_free_wrong),
476513
Case("Test message send/receive single thread and order", test_single_thread_order),
477514
Case("Test message send/receive multi-thread and per thread order", test_multi_thread_order),
478-
Case("Test message send/receive multi-thread, multi-Mail and per thread order", test_multi_thread_multi_mail_order)
515+
Case("Test message send/receive multi-thread, multi-Mail and per thread order", test_multi_thread_multi_mail_order),
516+
Case("Test mail empty", test_mail_empty),
517+
Case("Test mail full", test_mail_full)
479518
};
480519

481520
Specification specification(test_setup, cases);

TESTS/mbedmicro-rtos-mbed/queue/main.cpp

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,40 @@ void test_msg_prio()
282282
TEST_ASSERT_EQUAL(TEST_UINT_MSG, evt.value.v);
283283
}
284284

285+
/** Test queue empty
286+
287+
Given a queue of uint32_t data
288+
before data is inserted the queue should be empty
289+
after data is inserted the queue shouldn't be empty
290+
*/
291+
void test_queue_empty()
292+
{
293+
Queue<uint32_t, 1> q;
294+
295+
TEST_ASSERT_EQUAL(true, q.empty());
296+
297+
q.put((uint32_t*) TEST_UINT_MSG, TEST_TIMEOUT, 1);
298+
299+
TEST_ASSERT_EQUAL(false, q.empty());
300+
}
301+
302+
/** Test queue empty
303+
304+
Given a queue of uint32_t data with size of 1
305+
before data is inserted the queue shouldn't be full
306+
after data is inserted the queue should be full
307+
*/
308+
void test_queue_full()
309+
{
310+
Queue<uint32_t, 1> q;
311+
312+
TEST_ASSERT_EQUAL(false, q.full());
313+
314+
q.put((uint32_t*) TEST_UINT_MSG, TEST_TIMEOUT, 1);
315+
316+
TEST_ASSERT_EQUAL(true, q.full());
317+
}
318+
285319
utest::v1::status_t test_setup(const size_t number_of_cases)
286320
{
287321
GREENTEA_SETUP(5, "default_auto");
@@ -299,7 +333,9 @@ Case cases[] = {
299333
Case("Test put full timeout", test_put_full_timeout),
300334
Case("Test put full wait forever", test_put_full_waitforever),
301335
Case("Test message ordering", test_msg_order),
302-
Case("Test message priority", test_msg_prio)
336+
Case("Test message priority", test_msg_prio),
337+
Case("Test queue empty", test_queue_empty),
338+
Case("Test queue full", test_queue_full)
303339
};
304340

305341
Specification specification(test_setup, cases);

rtos/Mail.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,22 @@ class Mail : private mbed::NonCopyable<Mail<T, queue_sz> > {
5454
/** Create and Initialise Mail queue. */
5555
Mail() { };
5656

57+
/** Check if the mail queue is empty
58+
*
59+
* @return True if the mail queue is empty, false if not
60+
*/
61+
bool empty() const {
62+
return _queue.empty();
63+
}
64+
65+
/** Check if the mail queue is full
66+
*
67+
* @return True if the mail queue is full, false if not
68+
*/
69+
bool full() const {
70+
return _queue.full();
71+
}
72+
5773
/** Allocate a memory block of type T
5874
@param millisec timeout value or 0 in case of no time-out. (default: 0).
5975
@return pointer to memory block that can be filled with mail or NULL in case error.

rtos/Queue.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,22 @@ class Queue : private mbed::NonCopyable<Queue<T, queue_sz> > {
6464
osMessageQueueDelete(_id);
6565
}
6666

67+
/** Check if the queue is empty
68+
*
69+
* @return True if the queue is empty, false if not
70+
*/
71+
bool empty() const {
72+
return osMessageQueueGetCount(_id) == 0;
73+
}
74+
75+
/** Check if the queue is full
76+
*
77+
* @return True if the queue is full, false if not
78+
*/
79+
bool full() const {
80+
return osMessageQueueGetSpace(_id) == 0;
81+
}
82+
6783
/** Put a message in a Queue.
6884
@param data message pointer.
6985
@param millisec timeout value or 0 in case of no time-out. (default: 0)

0 commit comments

Comments
 (0)