mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2025-12-27 18:25:05 +00:00
Check queue_remove_unit returns 0 on queue empty. BUG=chrome-os-partner:19236 TEST=Pass the test. BRANCH=None Change-Id: I3162ba5e57e9111e1896954d815c26882fa372eb Signed-off-by: Vic Yang <victoryang@chromium.org> Reviewed-on: https://gerrit.chromium.org/gerrit/58331 Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
168 lines
3.9 KiB
C
168 lines
3.9 KiB
C
/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*
|
|
* Test queue.
|
|
*/
|
|
|
|
#include "common.h"
|
|
#include "console.h"
|
|
#include "queue.h"
|
|
#include "test_util.h"
|
|
#include "timer.h"
|
|
#include "util.h"
|
|
|
|
static char buffer6[6]; /* Max 5 items in queue */
|
|
static struct queue test_queue6 = {
|
|
.buf_bytes = sizeof(buffer6),
|
|
.unit_bytes = sizeof(char),
|
|
.buf = buffer6,
|
|
};
|
|
|
|
static char buffer5[5]; /* Max 2 items (2 byte for each) in queue */
|
|
static struct queue test_queue5 = {
|
|
.buf_bytes = sizeof(buffer5),
|
|
.unit_bytes = 2,
|
|
.buf = buffer5,
|
|
};
|
|
|
|
#define LOOP_DEQUE(q, d, n) \
|
|
do { \
|
|
int i; \
|
|
for (i = 0; i < n; ++i) \
|
|
TEST_ASSERT(queue_remove_unit(&q, d + i)); \
|
|
} while (0)
|
|
|
|
static int test_queue6_empty(void)
|
|
{
|
|
char dummy = 1;
|
|
|
|
queue_reset(&test_queue6);
|
|
TEST_ASSERT(queue_is_empty(&test_queue6));
|
|
TEST_ASSERT(!queue_remove_unit(&test_queue6, &dummy));
|
|
queue_add_units(&test_queue6, &dummy, 1);
|
|
TEST_ASSERT(!queue_is_empty(&test_queue6));
|
|
|
|
return EC_SUCCESS;
|
|
}
|
|
|
|
static int test_queue6_reset(void)
|
|
{
|
|
char dummy = 1;
|
|
|
|
queue_reset(&test_queue6);
|
|
queue_add_units(&test_queue6, &dummy, 1);
|
|
queue_reset(&test_queue6);
|
|
TEST_ASSERT(queue_is_empty(&test_queue6));
|
|
|
|
return EC_SUCCESS;
|
|
}
|
|
|
|
static int test_queue6_fifo(void)
|
|
{
|
|
char buf1[3] = {1, 2, 3};
|
|
char buf2[3];
|
|
|
|
queue_reset(&test_queue6);
|
|
|
|
queue_add_units(&test_queue6, buf1 + 0, 1);
|
|
queue_add_units(&test_queue6, buf1 + 1, 1);
|
|
queue_add_units(&test_queue6, buf1 + 2, 1);
|
|
|
|
LOOP_DEQUE(test_queue6, buf2, 3);
|
|
TEST_ASSERT_ARRAY_EQ(buf1, buf2, 3);
|
|
|
|
return EC_SUCCESS;
|
|
}
|
|
|
|
static int test_queue6_multiple_units_add(void)
|
|
{
|
|
char buf1[5] = {1, 2, 3, 4, 5};
|
|
char buf2[5];
|
|
|
|
queue_reset(&test_queue6);
|
|
TEST_ASSERT(queue_has_space(&test_queue6, 5));
|
|
queue_add_units(&test_queue6, buf1, 5);
|
|
LOOP_DEQUE(test_queue6, buf2, 5);
|
|
TEST_ASSERT_ARRAY_EQ(buf1, buf2, 5);
|
|
|
|
return EC_SUCCESS;
|
|
}
|
|
|
|
static int test_queue6_removal(void)
|
|
{
|
|
char buf1[5] = {1, 2, 3, 4, 5};
|
|
char buf2[5];
|
|
|
|
queue_reset(&test_queue6);
|
|
queue_add_units(&test_queue6, buf1, 5);
|
|
/* 1, 2, 3, 4, 5 */
|
|
LOOP_DEQUE(test_queue6, buf2, 3);
|
|
TEST_ASSERT_ARRAY_EQ(buf1, buf2, 3);
|
|
/* 4, 5 */
|
|
queue_add_units(&test_queue6, buf1, 2);
|
|
/* 4, 5, 1, 2 */
|
|
TEST_ASSERT(queue_has_space(&test_queue6, 1));
|
|
TEST_ASSERT(!queue_has_space(&test_queue6, 2));
|
|
LOOP_DEQUE(test_queue6, buf2, 1);
|
|
TEST_ASSERT(buf2[0] == 4);
|
|
/* 5, 1, 2 */
|
|
queue_add_units(&test_queue6, buf1 + 2, 2);
|
|
/* 5, 1, 2, 3, 4 */
|
|
TEST_ASSERT(!queue_has_space(&test_queue6, 1));
|
|
LOOP_DEQUE(test_queue6, buf2, 1);
|
|
TEST_ASSERT(buf2[0] == 5);
|
|
LOOP_DEQUE(test_queue6, buf2, 4);
|
|
TEST_ASSERT_ARRAY_EQ(buf1, buf2, 4);
|
|
TEST_ASSERT(queue_is_empty(&test_queue6));
|
|
/* Empty */
|
|
queue_add_units(&test_queue6, buf1, 5);
|
|
LOOP_DEQUE(test_queue6, buf2, 5);
|
|
TEST_ASSERT_ARRAY_EQ(buf1, buf2, 5);
|
|
|
|
return EC_SUCCESS;
|
|
}
|
|
|
|
static int test_queue5_odd_even(void)
|
|
{
|
|
uint16_t buf1[3] = {1, 2, 3};
|
|
uint16_t buf2[3];
|
|
|
|
queue_reset(&test_queue5);
|
|
queue_add_units(&test_queue5, buf1, 1);
|
|
/* 1 */
|
|
TEST_ASSERT(!queue_has_space(&test_queue5, 2));
|
|
TEST_ASSERT(queue_has_space(&test_queue5, 1));
|
|
queue_add_units(&test_queue5, buf1 + 1, 1);
|
|
/* 1, 2 */
|
|
TEST_ASSERT(!queue_has_space(&test_queue5, 1));
|
|
LOOP_DEQUE(test_queue5, buf2, 2);
|
|
TEST_ASSERT_ARRAY_EQ(buf1, buf2, 2);
|
|
TEST_ASSERT(queue_is_empty(&test_queue5));
|
|
/* Empty */
|
|
TEST_ASSERT(!queue_has_space(&test_queue5, 3));
|
|
TEST_ASSERT(queue_has_space(&test_queue5, 2));
|
|
TEST_ASSERT(queue_has_space(&test_queue5, 1));
|
|
queue_add_units(&test_queue5, buf1 + 2, 1);
|
|
/* 3 */
|
|
LOOP_DEQUE(test_queue5, buf2, 1);
|
|
TEST_ASSERT(buf2[0] == 3);
|
|
TEST_ASSERT(queue_is_empty(&test_queue5));
|
|
|
|
return EC_SUCCESS;
|
|
}
|
|
|
|
void run_test(void)
|
|
{
|
|
test_reset();
|
|
|
|
RUN_TEST(test_queue6_empty);
|
|
RUN_TEST(test_queue6_reset);
|
|
RUN_TEST(test_queue6_fifo);
|
|
RUN_TEST(test_queue6_multiple_units_add);
|
|
RUN_TEST(test_queue6_removal);
|
|
RUN_TEST(test_queue5_odd_even);
|
|
|
|
test_print_result();
|
|
}
|