123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- /*
- * Copyright (c) 2019 The Linux Foundation. All rights reserved.
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
- #include "qdf_slist.h"
- #include "qdf_slist_test.h"
- #include "qdf_trace.h"
- struct qdf_slist_test_item {
- uint32_t id;
- struct qdf_slist_node node;
- };
- #define qdf_slist_node_count 10
- static uint32_t qdf_slist_test_empty(void)
- {
- struct qdf_slist list;
- struct qdf_slist_test_item *item;
- /* a new list should ... */
- qdf_slist_init(&list);
- /* ... be empty */
- QDF_BUG(qdf_slist_empty(&list));
- /* ... return NULL when pop()'d */
- QDF_BUG(!qdf_slist_pop(&list, item, node));
- qdf_slist_deinit(&list);
- return 0;
- }
- static uint32_t qdf_slist_test_push_pop(void)
- {
- struct qdf_slist list;
- struct qdf_slist_test_item items[qdf_slist_node_count];
- struct qdf_slist_test_item *item;
- int i;
- qdf_slist_init(&list);
- /* a list with items should ... */
- for (i = 0; i < qdf_slist_node_count; i++)
- qdf_slist_push(&list, &items[i], node);
- /* ... not be empty */
- QDF_BUG(!qdf_slist_empty(&list));
- /* ... be able to pop() all items previously push()'d */
- for (i = 0; i < qdf_slist_node_count; i++)
- QDF_BUG(qdf_slist_pop(&list, item, node));
- /* ... be empty after pop()'ing all items */
- QDF_BUG(qdf_slist_empty(&list));
- qdf_slist_deinit(&list);
- return 0;
- }
- static uint32_t qdf_slist_test_for_each(void)
- {
- struct qdf_slist list;
- struct qdf_slist_test_item items[qdf_slist_node_count];
- struct qdf_slist_test_item *prev;
- struct qdf_slist_test_item *item;
- int i;
- qdf_slist_init(&list);
- /* a list with items should ... */
- for (i = 0; i < qdf_slist_node_count; i++)
- qdf_slist_push(&list, &items[i], node);
- /* ... be able to iterate over each item */
- i = 0;
- qdf_slist_for_each(&list, item, node) {
- item->id = i++;
- }
- QDF_BUG(i == qdf_slist_node_count);
- /* ... be able to remove each item in the same order */
- i = 0;
- qdf_slist_for_each_del(&list, prev, item, node) {
- QDF_BUG(item);
- QDF_BUG(item->id == i++);
- QDF_BUG(qdf_slist_remove(&list, prev, node)->id == item->id);
- }
- QDF_BUG(i == qdf_slist_node_count);
- /* ... be empty after all items are removed */
- QDF_BUG(!qdf_slist_pop(&list, item, node));
- QDF_BUG(qdf_slist_empty(&list));
- qdf_slist_deinit(&list);
- return 0;
- }
- uint32_t qdf_slist_unit_test(void)
- {
- uint32_t errors = 0;
- errors += qdf_slist_test_empty();
- errors += qdf_slist_test_push_pop();
- errors += qdf_slist_test_for_each();
- return errors;
- }
|