tests: dlist to add a testcase and add some tags

Add a testcase to verify some operations running
in constant time.
Add new informative Doxygen tags

Signed-off-by: Ningx Zhao <ningx.zhao@intel.com>
This commit is contained in:
Ningx Zhao 2020-06-04 17:27:41 +08:00 committed by Anas Nashif
parent ce31b89e50
commit 2c92af5a80
2 changed files with 83 additions and 2 deletions

View file

@ -6,6 +6,7 @@
#include <ztest.h>
#include <sys/dlist.h>
#include "time.h"
static sys_dlist_t test_list;
@ -161,13 +162,91 @@ static inline bool verify_tail_head(sys_dlist_t *list,
return true;
}
static enum dlist_perf_stats {PEEK_HEAD_TAIL, INSERT_REMOVE} operation;
clock_t check_dlist_perf(sys_dlist_t *test_dlist, size_t size)
{
struct container_node node_ii[30] = {0};
struct container_node test_node;
sys_dlist_init(test_dlist);
zassert_true(sys_dlist_is_empty(test_dlist), NULL);
/*avoid that array index is overflow*/
size = size < 30 ? size : 30;
for (int i = 0; i < size; i++) {
sys_dlist_append(test_dlist, &node_ii[i].node);
}
clock_t start = 0, finish = 0;
start = clock();
for (int i = 0; i < 10000; i++) {
switch (operation) {
case PEEK_HEAD_TAIL:
sys_dlist_peek_head(test_dlist);
sys_dlist_peek_tail(test_dlist);
break;
case INSERT_REMOVE:
sys_dlist_insert(&node_ii[size/2].node,
&test_node.node);
sys_dlist_remove(&test_node.node);
break;
default:
/*Just running without no operations*/
break;
}
}
finish = clock();
return finish - start;
}
void check_some_operations(enum dlist_perf_stats op)
{
clock_t const_time[3] = {0};
operation = op;
/*test list size is 10 nodes*/
const_time[0] = check_dlist_perf(&test_list, 10);
/*test list size is 20 nodes*/
const_time[1] = check_dlist_perf(&test_list, 20);
/*test list size is 30 nodes*/
const_time[2] = check_dlist_perf(&test_list, 30);
zassert_within(const_time[0], const_time[1], 20, NULL);
zassert_within(const_time[1], const_time[2], 20, NULL);
}
/**
* @addtogroup unit_tests
* @{
*/
/**
* @brief Verify doubly linked list funtionalities
* @brief test dlist some operations running in constant time.
*
* @details
* Define a double list, and record the time of running some
* operations by API clock() in usr/libc of native posix platform
* Verify some operations running in constant time.
*
* @ingroup lib_list_tests
*
* @see sys_dlist_peek_head(), sys_dlist_peek_tail(),
* sys_dlist_insert(), sys_dlist_remove().
*/
void test_check_dlist_perf(void)
{
/**TESTPOINT: test peek head and tail in constant time*/
check_some_operations(PEEK_HEAD_TAIL);
/**TESTPOINT: test insert and remove in constant time*/
check_some_operations(INSERT_REMOVE);
}
/**
* @brief Verify doubly linked list functionalities
*
* @see sys_dlist_append(), sys_dlist_remove(), sys_dlist_prepend(),
* sys_dlist_remove(), sys_dlist_insert(), sys_dlist_peek_next()
@ -281,7 +360,7 @@ void test_dlist(void)
zassert_true((verify_emptyness(&test_list)),
"test_list should be empty");
/* test iterator from a node */
/* test iterator of "for each" style from a node */
struct data_node {
sys_dnode_t node;
int data;

View file

@ -9,11 +9,13 @@
extern void test_slist(void);
extern void test_sflist(void);
extern void test_dlist(void);
extern void test_check_dlist_perf(void);
void test_main(void)
{
ztest_test_suite(dlist,
ztest_unit_test(test_dlist),
ztest_unit_test(test_check_dlist_perf),
ztest_unit_test(test_slist),
ztest_unit_test(test_sflist)
);