qdf_slist_test.c 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. /*
  2. * Copyright (c) 2019 The Linux Foundation. All rights reserved.
  3. *
  4. * Permission to use, copy, modify, and/or distribute this software for
  5. * any purpose with or without fee is hereby granted, provided that the
  6. * above copyright notice and this permission notice appear in all
  7. * copies.
  8. *
  9. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
  10. * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
  11. * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
  12. * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
  13. * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
  14. * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
  15. * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  16. * PERFORMANCE OF THIS SOFTWARE.
  17. */
  18. #include "qdf_slist.h"
  19. #include "qdf_slist_test.h"
  20. #include "qdf_trace.h"
  21. struct qdf_slist_test_item {
  22. uint32_t id;
  23. struct qdf_slist_node node;
  24. };
  25. #define qdf_slist_node_count 10
  26. static uint32_t qdf_slist_test_empty(void)
  27. {
  28. struct qdf_slist list;
  29. struct qdf_slist_test_item *item;
  30. /* a new list should ... */
  31. qdf_slist_init(&list);
  32. /* ... be empty */
  33. QDF_BUG(qdf_slist_empty(&list));
  34. /* ... return NULL when pop()'d */
  35. QDF_BUG(!qdf_slist_pop(&list, item, node));
  36. qdf_slist_deinit(&list);
  37. return 0;
  38. }
  39. static uint32_t qdf_slist_test_push_pop(void)
  40. {
  41. struct qdf_slist list;
  42. struct qdf_slist_test_item items[qdf_slist_node_count];
  43. struct qdf_slist_test_item *item;
  44. int i;
  45. qdf_slist_init(&list);
  46. /* a list with items should ... */
  47. for (i = 0; i < qdf_slist_node_count; i++)
  48. qdf_slist_push(&list, &items[i], node);
  49. /* ... not be empty */
  50. QDF_BUG(!qdf_slist_empty(&list));
  51. /* ... be able to pop() all items previously push()'d */
  52. for (i = 0; i < qdf_slist_node_count; i++)
  53. QDF_BUG(qdf_slist_pop(&list, item, node));
  54. /* ... be empty after pop()'ing all items */
  55. QDF_BUG(qdf_slist_empty(&list));
  56. qdf_slist_deinit(&list);
  57. return 0;
  58. }
  59. static uint32_t qdf_slist_test_for_each(void)
  60. {
  61. struct qdf_slist list;
  62. struct qdf_slist_test_item items[qdf_slist_node_count];
  63. struct qdf_slist_test_item *prev;
  64. struct qdf_slist_test_item *item;
  65. int i;
  66. qdf_slist_init(&list);
  67. /* a list with items should ... */
  68. for (i = 0; i < qdf_slist_node_count; i++)
  69. qdf_slist_push(&list, &items[i], node);
  70. /* ... be able to iterate over each item */
  71. i = 0;
  72. qdf_slist_for_each(&list, item, node) {
  73. item->id = i++;
  74. }
  75. QDF_BUG(i == qdf_slist_node_count);
  76. /* ... be able to remove each item in the same order */
  77. i = 0;
  78. qdf_slist_for_each_del(&list, prev, item, node) {
  79. QDF_BUG(item);
  80. QDF_BUG(item->id == i++);
  81. QDF_BUG(qdf_slist_remove(&list, prev, node)->id == item->id);
  82. }
  83. QDF_BUG(i == qdf_slist_node_count);
  84. /* ... be empty after all items are removed */
  85. QDF_BUG(!qdf_slist_pop(&list, item, node));
  86. QDF_BUG(qdf_slist_empty(&list));
  87. qdf_slist_deinit(&list);
  88. return 0;
  89. }
  90. uint32_t qdf_slist_unit_test(void)
  91. {
  92. uint32_t errors = 0;
  93. errors += qdf_slist_test_empty();
  94. errors += qdf_slist_test_push_pop();
  95. errors += qdf_slist_test_for_each();
  96. return errors;
  97. }