@@ -72,6 +72,83 @@ static void test_cib_peek__overflow(void)
7272 TEST_ASSERT_EQUAL_INT (TEST_CIB_SIZE - 1 , cib_peek (& cib ));
7373}
7474
75+ static void test_cib_peek_at (void )
76+ {
77+ /* Peeking an empty cib should give an error */
78+ TEST_ASSERT_EQUAL_INT (-1 , cib_peek_at (& cib , 0 ));
79+
80+ /* Put 1 item in cib and check that we can peek it */
81+ TEST_ASSERT_EQUAL_INT ( 0 , cib_put (& cib ));
82+ TEST_ASSERT_EQUAL_INT ( 0 , cib_peek (& cib ));
83+ TEST_ASSERT_EQUAL_INT ( 0 , cib_peek_at (& cib , 0 ));
84+
85+ /* Peek past the end should give an error. */
86+ TEST_ASSERT_EQUAL_INT (-1 , cib_peek_at (& cib , 1 ));
87+
88+ /* Put another item in cib. */
89+ TEST_ASSERT_EQUAL_INT ( 1 , cib_put (& cib ));
90+
91+ /* cib should now hold the indices { 0, 1 }. Test this. */
92+ TEST_ASSERT_EQUAL_INT ( 0 , cib_peek (& cib ));
93+ TEST_ASSERT_EQUAL_INT ( 0 , cib_peek_at (& cib , 0 ));
94+ TEST_ASSERT_EQUAL_INT ( 1 , cib_peek_at (& cib , 1 ));
95+ TEST_ASSERT_EQUAL_INT (-1 , cib_peek_at (& cib , 2 ));
96+
97+ /* Put another item in cib. */
98+ TEST_ASSERT_EQUAL_INT ( 2 , cib_put (& cib ));
99+
100+ /* cib should now hold the indices { 0, 1, 2 }. Test this. */
101+ TEST_ASSERT_EQUAL_INT ( 0 , cib_peek (& cib ));
102+ TEST_ASSERT_EQUAL_INT ( 0 , cib_peek_at (& cib , 0 ));
103+ TEST_ASSERT_EQUAL_INT ( 1 , cib_peek_at (& cib , 1 ));
104+ TEST_ASSERT_EQUAL_INT ( 2 , cib_peek_at (& cib , 2 ));
105+ TEST_ASSERT_EQUAL_INT (-1 , cib_peek_at (& cib , 3 ));
106+
107+ /* Put another item in cib. */
108+ TEST_ASSERT_EQUAL_INT ( 3 , cib_put (& cib ));
109+
110+ /* cib should now hold the indices { 0, 1, 2, 3 }. Test this. */
111+ TEST_ASSERT_EQUAL_INT ( 0 , cib_peek (& cib ));
112+ TEST_ASSERT_EQUAL_INT ( 0 , cib_peek_at (& cib , 0 ));
113+ TEST_ASSERT_EQUAL_INT ( 1 , cib_peek_at (& cib , 1 ));
114+ TEST_ASSERT_EQUAL_INT ( 2 , cib_peek_at (& cib , 2 ));
115+ TEST_ASSERT_EQUAL_INT ( 3 , cib_peek_at (& cib , 3 ));
116+ TEST_ASSERT_EQUAL_INT (-1 , cib_peek_at (& cib , 4 ));
117+
118+ /* Remove an item from cib. */
119+ TEST_ASSERT_EQUAL_INT ( 0 , cib_get (& cib ));
120+
121+ /* cib should now hold the indices { 1, 2, 3 }. Test this. */
122+ TEST_ASSERT_EQUAL_INT ( 1 , cib_peek (& cib ));
123+ TEST_ASSERT_EQUAL_INT ( 1 , cib_peek_at (& cib , 0 ));
124+ TEST_ASSERT_EQUAL_INT ( 2 , cib_peek_at (& cib , 1 ));
125+ TEST_ASSERT_EQUAL_INT ( 3 , cib_peek_at (& cib , 2 ));
126+ TEST_ASSERT_EQUAL_INT (-1 , cib_peek_at (& cib , 3 ));
127+
128+ /* Remove another item from cib. */
129+ TEST_ASSERT_EQUAL_INT ( 1 , cib_get (& cib ));
130+
131+ /* cib should now hold the indices { 2, 3 }. Test this. */
132+ TEST_ASSERT_EQUAL_INT ( 2 , cib_peek (& cib ));
133+ TEST_ASSERT_EQUAL_INT ( 2 , cib_peek_at (& cib , 0 ));
134+ TEST_ASSERT_EQUAL_INT ( 3 , cib_peek_at (& cib , 1 ));
135+ TEST_ASSERT_EQUAL_INT (-1 , cib_peek_at (& cib , 2 ));
136+
137+ /* Remove another item from cib. */
138+ TEST_ASSERT_EQUAL_INT ( 2 , cib_get (& cib ));
139+
140+ /* cib should now hold the indices { 3 }. Test this. */
141+ TEST_ASSERT_EQUAL_INT ( 3 , cib_peek (& cib ));
142+ TEST_ASSERT_EQUAL_INT ( 3 , cib_peek_at (& cib , 0 ));
143+ TEST_ASSERT_EQUAL_INT (-1 , cib_peek_at (& cib , 1 ));
144+
145+ /* Remove last item from cib. */
146+ TEST_ASSERT_EQUAL_INT ( 3 , cib_get (& cib ));
147+
148+ /* Peeking an empty cib should give an error */
149+ TEST_ASSERT_EQUAL_INT (-1 , cib_peek_at (& cib , 0 ));
150+ }
151+
75152static void test_cib_avail (void )
76153{
77154 TEST_ASSERT_EQUAL_INT (0 , cib_avail (& cib ));
@@ -111,6 +188,7 @@ Test *tests_core_cib_tests(void)
111188 new_TestFixture (test_singleton_cib ),
112189 new_TestFixture (test_cib_peek ),
113190 new_TestFixture (test_cib_peek__overflow ),
191+ new_TestFixture (test_cib_peek_at ),
114192 };
115193
116194 EMB_UNIT_TESTCALLER (core_cib_tests , set_up , NULL , fixtures );
0 commit comments