2323
2424#include " FreeRTOS.h"
2525#include " queue.h"
26+ #include " semphr.h"
2627#include " cpputest_for_freertos_memory.hpp"
2728
2829// must be last
@@ -192,4 +193,54 @@ TEST(QueueSetTests, select_from_set_with_multiple_queues_will_return_expected_qu
192193 // confirm select shows null now
193194 auto selectResult = xQueueSelectFromSet (mUnderTest .get (), portMAX_DELAY);
194195 CHECK_EQUAL (nullptr , selectResult);
196+ }
197+
198+ TEST (QueueSetTests, select_from_set_will_return_expected_semaphore)
199+ {
200+ CreateSetUnderTest (2 );
201+ cms::test::unique_sema sema (xSemaphoreCreateBinary ());
202+ CHECK_TRUE (sema != nullptr );
203+
204+ auto rtn = xQueueAddToSet (sema.get (), mUnderTest .get ());
205+ CHECK_EQUAL (pdPASS, rtn);
206+
207+ auto selectResult = xQueueSelectFromSet (mUnderTest .get (), portMAX_DELAY);
208+ CHECK_EQUAL (nullptr , selectResult);
209+
210+ xSemaphoreGive (sema.get ());
211+
212+ selectResult = xQueueSelectFromSet (mUnderTest .get (), portMAX_DELAY);
213+ CHECK_EQUAL (sema.get (), selectResult);
214+
215+ auto count = uxSemaphoreGetCount (selectResult);
216+ CHECK_EQUAL (1 , count);
217+ }
218+
219+ TEST (QueueSetTests, select_from_set_with_multiple_semaphores_will_return_expected_semaphore_in_expected_order)
220+ {
221+ CreateSetUnderTest (2 );
222+ cms::test::unique_sema sema1 (xSemaphoreCreateBinary ());
223+ CHECK_TRUE (sema1 != nullptr );
224+ cms::test::unique_sema sema2 (xSemaphoreCreateBinary ());
225+ CHECK_TRUE (sema2 != nullptr );
226+ auto rtn = xQueueAddToSet (sema1.get (), mUnderTest .get ());
227+ CHECK_EQUAL (pdPASS, rtn);
228+ rtn = xQueueAddToSet (sema2.get (), mUnderTest .get ());
229+ CHECK_EQUAL (pdPASS, rtn);
230+
231+ auto selectResult = xQueueSelectFromSet (mUnderTest .get (), portMAX_DELAY);
232+ CHECK_EQUAL (nullptr , selectResult);
233+
234+ xSemaphoreGive (sema2.get ());
235+ xSemaphoreGive (sema1.get ());
236+
237+ selectResult = xQueueSelectFromSet (mUnderTest .get (), portMAX_DELAY);
238+ CHECK_EQUAL (sema2.get (), selectResult);
239+ auto count = uxSemaphoreGetCount (selectResult);
240+ CHECK_EQUAL (1 , count);
241+
242+ selectResult = xQueueSelectFromSet (mUnderTest .get (), portMAX_DELAY);
243+ CHECK_EQUAL (sema1.get (), selectResult);
244+ count = uxSemaphoreGetCount (selectResult);
245+ CHECK_EQUAL (1 , count);
195246}
0 commit comments