@@ -98,7 +98,7 @@ TEST_GROUP(tiny_queue)
9898 CHECK_EQUAL (element, dequeued_element_storage);
9999 }
100100
101- bool given_that_large_element_has_been_enqueued (uint8_t * element)
101+ bool given_that_large_element_has_been_enqueued (uint8_t * element)
102102 {
103103 return tiny_queue_enqueue (&self, (void *)element, large_element_size);
104104 }
@@ -115,7 +115,7 @@ TEST_GROUP(tiny_queue)
115115 CHECK_FALSE (given_that_large_element_has_been_enqueued (some_large_element_1));
116116 }
117117
118- void dequeueing_should_yield (uint8_t * element)
118+ void dequeueing_should_yield (uint8_t * element)
119119 {
120120 uint8_t dequeued_element_storage[large_element_size];
121121 memset (dequeued_element_storage, 0 , sizeof (dequeued_element_storage));
@@ -134,7 +134,7 @@ TEST_GROUP(tiny_queue)
134134 tiny_queue_discard (&self);
135135 }
136136
137- void peeking_should_yield (uint8_t * element, size_t element_size, uint16_t element_index)
137+ void peeking_should_yield (uint8_t * element, size_t element_size, uint16_t element_index)
138138 {
139139 uint8_t peekedElementStorage[std::numeric_limits<uint8_t >::max ()];
140140 memset (peekedElementStorage, 0 , sizeof (peekedElementStorage));
@@ -148,7 +148,7 @@ TEST_GROUP(tiny_queue)
148148 }
149149 }
150150
151- void peeking_from_the_front_of_the_queue_should_yield (uint8_t * element)
151+ void peeking_from_the_front_of_the_queue_should_yield (uint8_t * element)
152152 {
153153 peeking_should_yield (element, large_element_size, 0 );
154154 }
@@ -226,6 +226,41 @@ TEST_GROUP(tiny_queue)
226226 {
227227 CHECK_EQUAL (expected, tiny_queue_count (&self));
228228 }
229+
230+ void given_that_the_queue_has_been_initialized_with_storage_size (uint16_t size)
231+ {
232+ CHECK (size <= sizeof (buffer));
233+
234+ tiny_queue_init (
235+ &self,
236+ buffer,
237+ size);
238+ }
239+
240+ template <typename T>
241+ void given_that_an_element_has_been_enqueued (T element)
242+ {
243+ CHECK (tiny_queue_enqueue (&self, &element, sizeof (element)));
244+ }
245+
246+ void should_be_able_to_iterate_over_element_bytes (uint16_t index)
247+ {
248+ uint8_t expected[UINT8_MAX];
249+ uint16_t size;
250+ tiny_queue_peek (&self, expected, &size, index);
251+
252+ tiny_queue_raw_element_iterator_t iterator = tiny_queue_raw_element_iterator (&self, index);
253+ for (uint16_t i = 0 ; i < size; i++) {
254+ uint8_t byte = tiny_queue_raw_element_iterator_peek (&iterator);
255+ tiny_queue_raw_element_iterator_advance (&iterator);
256+ CHECK_EQUAL (expected[i], byte);
257+ }
258+ }
259+
260+ void given_that_an_element_has_been_discarded ()
261+ {
262+ tiny_queue_discard (&self);
263+ }
229264};
230265
231266TEST (tiny_queue, should_be_able_to_enqueue_and_dequeue_a_small_element)
@@ -371,3 +406,23 @@ TEST(tiny_queue, should_know_how_many_elements_are_queued_after_some_have_been_d
371406 given_that_n_elements_have_been_discarded (2 );
372407 the_element_count_should_be (2 );
373408}
409+
410+ TEST (tiny_queue, should_allow_the_bytes_of_an_element_to_be_iterated_over)
411+ {
412+ given_that_the_queue_has_been_initialized ();
413+ given_that_an_element_has_been_enqueued ((uint32_t )0x12345678 );
414+ given_that_an_element_has_been_enqueued ((uint16_t )0xABCD );
415+ should_be_able_to_iterate_over_element_bytes (0 );
416+ should_be_able_to_iterate_over_element_bytes (1 );
417+ }
418+
419+ TEST (tiny_queue, should_allow_the_bytes_of_an_element_to_be_iterated_over_even_if_the_element_wraps)
420+ {
421+ given_that_the_queue_has_been_initialized_with_storage_size (12 );
422+ given_that_an_element_has_been_enqueued ((uint16_t )0xABCD );
423+ given_that_an_element_has_been_enqueued ((uint32_t )0x12345678 );
424+ given_that_an_element_has_been_discarded ();
425+ given_that_an_element_has_been_enqueued ((uint32_t )0x87654321 );
426+
427+ should_be_able_to_iterate_over_element_bytes (1 );
428+ }
0 commit comments