2016-05-23 03:19:56 +00:00
|
|
|
#include "k_test_driver.h"
|
2016-08-27 05:13:54 +00:00
|
|
|
#include "k_linked_list.h"
|
2016-05-22 01:54:29 +00:00
|
|
|
#include "k_lib_test.h"
|
2016-08-27 05:13:54 +00:00
|
|
|
#include "k_stdlib.h"
|
2016-05-20 00:34:55 +00:00
|
|
|
|
2016-05-18 05:43:48 +00:00
|
|
|
typedef struct
|
|
|
|
{
|
2016-08-28 00:20:38 +00:00
|
|
|
k_linked_list_node_t lnode;
|
2016-05-18 05:43:48 +00:00
|
|
|
int val;
|
2016-05-20 00:34:55 +00:00
|
|
|
} my_list_node;
|
|
|
|
|
2016-08-28 00:20:38 +00:00
|
|
|
static bool validate_list(k_linked_list_t *list)
|
2016-05-18 05:43:48 +00:00
|
|
|
{
|
2016-05-20 00:18:27 +00:00
|
|
|
bool result = true;
|
|
|
|
// list_head_test
|
2016-05-23 03:19:56 +00:00
|
|
|
if (list->head != NULL)
|
2016-05-20 00:18:27 +00:00
|
|
|
{
|
|
|
|
result = result && (list->head->prev == NULL);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
result = result && (list->tail == NULL);
|
|
|
|
}
|
|
|
|
|
2016-05-23 03:19:56 +00:00
|
|
|
if (list->tail != NULL)
|
2016-05-20 00:18:27 +00:00
|
|
|
{
|
|
|
|
result = result && (list->tail->next == NULL);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
result = result && (list->head == NULL);
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
2016-05-18 05:43:48 +00:00
|
|
|
}
|
|
|
|
|
2016-05-20 00:18:27 +00:00
|
|
|
|
2016-08-28 00:20:38 +00:00
|
|
|
static bool assert_list(k_linked_list_t *list, int val[], int size)
|
2016-05-18 05:43:48 +00:00
|
|
|
{
|
2016-08-28 00:20:38 +00:00
|
|
|
k_linked_list_node_t *node = ke_linked_list_first(list);
|
2016-05-22 08:24:08 +00:00
|
|
|
int i = 0;
|
2016-05-20 00:18:27 +00:00
|
|
|
|
2016-05-23 03:19:56 +00:00
|
|
|
if (!validate_list(list))
|
2016-05-20 00:18:27 +00:00
|
|
|
return false;
|
|
|
|
|
2016-05-23 03:19:56 +00:00
|
|
|
while (node != NULL && i < size)
|
2016-05-20 00:18:27 +00:00
|
|
|
{
|
2016-06-17 09:18:07 +00:00
|
|
|
my_list_node *enode = OBTAIN_STRUCT_ADDR(node, my_list_node, lnode);
|
2016-05-23 03:19:56 +00:00
|
|
|
if (enode->val != val[i])
|
2016-05-20 00:18:27 +00:00
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
i++;
|
2016-08-28 00:20:38 +00:00
|
|
|
node = ke_linked_list_next(node);
|
2016-05-20 00:18:27 +00:00
|
|
|
}
|
|
|
|
|
2016-05-23 03:19:56 +00:00
|
|
|
if (i != size)
|
2016-05-18 05:43:48 +00:00
|
|
|
{
|
2016-05-20 00:18:27 +00:00
|
|
|
return false;
|
2016-05-18 05:43:48 +00:00
|
|
|
}
|
|
|
|
|
2016-08-28 00:20:38 +00:00
|
|
|
node = ke_linked_list_last(list);
|
2016-05-23 03:19:56 +00:00
|
|
|
while (node != NULL && i >= 0)
|
2016-05-18 05:43:48 +00:00
|
|
|
{
|
2016-06-17 09:18:07 +00:00
|
|
|
my_list_node *enode = OBTAIN_STRUCT_ADDR(node, my_list_node, lnode);
|
2016-05-23 03:19:56 +00:00
|
|
|
if (enode->val != val[i - 1])
|
2016-05-20 00:18:27 +00:00
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
i--;
|
2016-08-28 00:20:38 +00:00
|
|
|
node = ke_linked_list_prev(node);
|
2016-05-18 05:43:48 +00:00
|
|
|
}
|
|
|
|
|
2016-05-20 00:18:27 +00:00
|
|
|
return i == 0;
|
2016-05-18 05:43:48 +00:00
|
|
|
}
|
|
|
|
|
2016-05-20 00:18:27 +00:00
|
|
|
//void print_validate(linked_list_t *list)
|
|
|
|
//{
|
2016-05-20 00:34:55 +00:00
|
|
|
// my_list_node* node = (my_list_node*) linked_list_first(list);
|
2016-05-20 00:18:27 +00:00
|
|
|
// while(node != NULL)
|
|
|
|
// {
|
2016-05-22 01:54:29 +00:00
|
|
|
// hal_printf("%d", node->val);
|
2016-05-20 00:34:55 +00:00
|
|
|
// node = (my_list_node*) linked_list_next((linked_list_node_t *) node);
|
2016-05-20 00:18:27 +00:00
|
|
|
// }
|
|
|
|
//
|
2016-05-22 01:54:29 +00:00
|
|
|
// hal_printf("======");
|
2016-05-20 00:34:55 +00:00
|
|
|
// node = (my_list_node*) linked_list_last(list);
|
2016-05-20 00:18:27 +00:00
|
|
|
// while(node != NULL)
|
|
|
|
// {
|
2016-05-22 01:54:29 +00:00
|
|
|
// hal_printf("%d", node->val);
|
2016-05-20 00:34:55 +00:00
|
|
|
// node = (my_list_node*) linked_list_prev((linked_list_node_t *) node);
|
2016-05-20 00:18:27 +00:00
|
|
|
// }
|
|
|
|
//
|
|
|
|
// validate_list(list);
|
2016-05-22 01:54:29 +00:00
|
|
|
// hal_printf("\n");
|
2016-05-20 00:18:27 +00:00
|
|
|
// return;
|
|
|
|
//}
|
|
|
|
|
2016-08-28 00:20:38 +00:00
|
|
|
static void insert_val(k_linked_list_t *list, int index, int val)
|
2016-05-18 05:43:48 +00:00
|
|
|
{
|
2016-05-23 03:19:56 +00:00
|
|
|
my_list_node *a = (my_list_node *) talloc(sizeof(my_list_node));
|
2016-05-18 05:43:48 +00:00
|
|
|
a->val = val;
|
2016-08-28 00:20:38 +00:00
|
|
|
ke_linked_list_insert(list, index, &a->lnode);
|
2016-05-18 05:43:48 +00:00
|
|
|
}
|
|
|
|
|
2016-08-28 00:20:38 +00:00
|
|
|
static void push_back_val(k_linked_list_t *list, int val)
|
2016-05-18 05:43:48 +00:00
|
|
|
{
|
2016-05-23 03:19:56 +00:00
|
|
|
my_list_node *a = (my_list_node *) talloc(sizeof(my_list_node));
|
2016-05-18 05:43:48 +00:00
|
|
|
a->val = val;
|
2016-08-28 00:20:38 +00:00
|
|
|
ke_linked_list_push_back(list, &a->lnode);
|
2016-05-18 05:43:48 +00:00
|
|
|
}
|
|
|
|
|
2016-08-28 00:20:38 +00:00
|
|
|
static void push_front_val(k_linked_list_t *list, int val)
|
2016-05-18 05:43:48 +00:00
|
|
|
{
|
2016-05-23 03:19:56 +00:00
|
|
|
my_list_node *a = (my_list_node *) talloc(sizeof(my_list_node));
|
2016-05-18 05:43:48 +00:00
|
|
|
a->val = val;
|
2016-08-28 00:20:38 +00:00
|
|
|
ke_linked_list_push_front(list, &a->lnode);
|
2016-05-18 05:43:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2016-05-23 03:19:56 +00:00
|
|
|
static bool insert_test_beginning()
|
2016-05-18 05:43:48 +00:00
|
|
|
{
|
2016-08-28 00:20:38 +00:00
|
|
|
k_linked_list_t list;
|
|
|
|
ke_linked_list_init(&list);
|
2016-05-18 05:43:48 +00:00
|
|
|
insert_val(&list, 0, 0);
|
|
|
|
insert_val(&list, 0, 1);
|
|
|
|
insert_val(&list, 0, 2);
|
|
|
|
insert_val(&list, 0, 3);
|
|
|
|
|
|
|
|
// 3210==0123
|
2016-05-23 03:19:56 +00:00
|
|
|
int val[4] = {3, 2, 1, 0};
|
|
|
|
return assert_list(&list, val, 4);
|
2016-05-18 05:43:48 +00:00
|
|
|
}
|
|
|
|
|
2016-05-23 03:19:56 +00:00
|
|
|
static bool insert_test_middle()
|
2016-05-18 05:43:48 +00:00
|
|
|
{
|
2016-08-28 00:20:38 +00:00
|
|
|
k_linked_list_t list;
|
|
|
|
ke_linked_list_init(&list);
|
2016-05-18 05:43:48 +00:00
|
|
|
|
|
|
|
insert_val(&list, 0, 0);
|
|
|
|
insert_val(&list, 0, 1);
|
|
|
|
insert_val(&list, 0, 2);
|
|
|
|
|
|
|
|
insert_val(&list, 1, 4);
|
|
|
|
insert_val(&list, 1, 5);
|
|
|
|
insert_val(&list, 2, 6);
|
|
|
|
|
2016-05-23 03:19:56 +00:00
|
|
|
int val[] = {2, 5, 6, 4, 1, 0};
|
|
|
|
return assert_list(&list, val, 6);
|
2016-05-18 05:43:48 +00:00
|
|
|
}
|
|
|
|
|
2016-05-23 03:19:56 +00:00
|
|
|
static bool insert_test_end()
|
2016-05-18 05:43:48 +00:00
|
|
|
{
|
2016-08-28 00:20:38 +00:00
|
|
|
k_linked_list_t list;
|
|
|
|
ke_linked_list_init(&list);
|
2016-05-18 05:43:48 +00:00
|
|
|
|
|
|
|
insert_val(&list, 0, 0);
|
|
|
|
insert_val(&list, 1, 1);
|
|
|
|
insert_val(&list, 2, 2);
|
|
|
|
insert_val(&list, 3, 3);
|
|
|
|
|
2016-05-23 03:19:56 +00:00
|
|
|
int val[] = {0, 1, 2, 3};
|
|
|
|
return assert_list(&list, val, 4);
|
2016-05-18 05:43:48 +00:00
|
|
|
}
|
|
|
|
|
2016-05-23 03:19:56 +00:00
|
|
|
static bool insert_test_invalid()
|
2016-05-18 05:43:48 +00:00
|
|
|
{
|
2016-08-28 00:20:38 +00:00
|
|
|
k_linked_list_t list;
|
|
|
|
ke_linked_list_init(&list);
|
2016-05-18 05:43:48 +00:00
|
|
|
|
|
|
|
insert_val(&list, 0, 3);
|
|
|
|
insert_val(&list, 0, 2);
|
|
|
|
insert_val(&list, 0, 1);
|
|
|
|
insert_val(&list, 0, 0);
|
|
|
|
|
|
|
|
// large index
|
|
|
|
insert_val(&list, 5, 9);
|
|
|
|
insert_val(&list, 6, 9);
|
|
|
|
insert_val(&list, 999, 9);
|
|
|
|
|
|
|
|
// small index
|
|
|
|
insert_val(&list, -1, 8);
|
|
|
|
insert_val(&list, -2, 8);
|
|
|
|
insert_val(&list, -999, 8);
|
|
|
|
|
|
|
|
// NULL
|
|
|
|
insert_val(NULL, 1, 4);
|
2016-08-28 00:20:38 +00:00
|
|
|
ke_linked_list_insert_ref(NULL, list.head, list.tail);
|
|
|
|
ke_linked_list_insert_ref(&list, list.head, NULL);
|
2016-05-18 05:43:48 +00:00
|
|
|
|
2016-05-23 03:19:56 +00:00
|
|
|
int val[] = {0, 1, 2, 3};
|
|
|
|
return assert_list(&list, val, 4);
|
2016-05-18 05:43:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2016-05-23 03:19:56 +00:00
|
|
|
static bool remove_test_beginning()
|
2016-05-18 05:43:48 +00:00
|
|
|
{
|
2016-08-28 00:20:38 +00:00
|
|
|
k_linked_list_t list;
|
|
|
|
ke_linked_list_init(&list);
|
2016-05-18 05:43:48 +00:00
|
|
|
insert_val(&list, 0, 0);
|
|
|
|
insert_val(&list, 0, 1);
|
|
|
|
insert_val(&list, 0, 2);
|
|
|
|
insert_val(&list, 0, 3);
|
|
|
|
|
2016-08-28 00:20:38 +00:00
|
|
|
ke_linked_list_remove(&list, 0);
|
|
|
|
ke_linked_list_remove(&list, 0);
|
2016-05-18 05:43:48 +00:00
|
|
|
|
|
|
|
// 10==01
|
2016-05-23 03:19:56 +00:00
|
|
|
int val[] = {1, 0};
|
|
|
|
return assert_list(&list, val, 2);
|
2016-05-18 05:43:48 +00:00
|
|
|
}
|
|
|
|
|
2016-05-23 03:19:56 +00:00
|
|
|
static bool remove_test_middle()
|
2016-05-18 05:43:48 +00:00
|
|
|
{
|
2016-08-28 00:20:38 +00:00
|
|
|
k_linked_list_t list;
|
|
|
|
ke_linked_list_init(&list);
|
2016-05-18 05:43:48 +00:00
|
|
|
|
|
|
|
insert_val(&list, 0, 0);
|
|
|
|
insert_val(&list, 0, 1);
|
|
|
|
insert_val(&list, 0, 2);
|
|
|
|
|
|
|
|
insert_val(&list, 0, 3);
|
|
|
|
insert_val(&list, 0, 4);
|
|
|
|
insert_val(&list, 0, 5);
|
|
|
|
|
2016-08-28 00:20:38 +00:00
|
|
|
ke_linked_list_remove(&list, 1);
|
|
|
|
ke_linked_list_remove(&list, 2);
|
2016-05-18 05:43:48 +00:00
|
|
|
|
|
|
|
// 5310=====0135
|
2016-05-23 03:19:56 +00:00
|
|
|
int val[] = {5, 3, 1, 0};
|
|
|
|
return assert_list(&list, val, 4);
|
2016-05-18 05:43:48 +00:00
|
|
|
}
|
|
|
|
|
2016-05-23 03:19:56 +00:00
|
|
|
static bool remove_test_end()
|
2016-05-18 05:43:48 +00:00
|
|
|
{
|
2016-08-28 00:20:38 +00:00
|
|
|
k_linked_list_t list;
|
|
|
|
ke_linked_list_init(&list);
|
2016-05-18 05:43:48 +00:00
|
|
|
|
|
|
|
insert_val(&list, 0, 0);
|
|
|
|
insert_val(&list, 1, 1);
|
|
|
|
insert_val(&list, 2, 2);
|
|
|
|
insert_val(&list, 3, 3);
|
|
|
|
|
2016-08-28 00:20:38 +00:00
|
|
|
ke_linked_list_remove(&list, 3);
|
|
|
|
ke_linked_list_remove(&list, 2);
|
2016-05-18 05:43:48 +00:00
|
|
|
|
2016-05-23 03:19:56 +00:00
|
|
|
int val[] = {0, 1};
|
|
|
|
return assert_list(&list, val, 2);
|
2016-05-18 05:43:48 +00:00
|
|
|
}
|
|
|
|
|
2016-05-23 03:19:56 +00:00
|
|
|
static bool remove_test_all()
|
2016-05-18 05:43:48 +00:00
|
|
|
{
|
2016-05-20 00:18:27 +00:00
|
|
|
bool result = true;
|
2016-08-28 00:20:38 +00:00
|
|
|
k_linked_list_t list;
|
|
|
|
ke_linked_list_init(&list);
|
2016-05-18 05:43:48 +00:00
|
|
|
|
|
|
|
insert_val(&list, 0, 0);
|
|
|
|
insert_val(&list, 1, 1);
|
|
|
|
insert_val(&list, 2, 2);
|
|
|
|
insert_val(&list, 3, 3);
|
|
|
|
|
2016-08-28 00:20:38 +00:00
|
|
|
ke_linked_list_remove(&list, 0);
|
|
|
|
ke_linked_list_remove(&list, 0);
|
|
|
|
ke_linked_list_remove(&list, 0);
|
|
|
|
ke_linked_list_remove(&list, 0);
|
2016-05-18 05:43:48 +00:00
|
|
|
|
2016-05-20 00:18:27 +00:00
|
|
|
result = result && assert_list(&list, NULL, 0);
|
2016-05-18 05:43:48 +00:00
|
|
|
|
|
|
|
insert_val(&list, 0, 0);
|
|
|
|
insert_val(&list, 1, 1);
|
|
|
|
insert_val(&list, 2, 2);
|
|
|
|
insert_val(&list, 3, 3);
|
|
|
|
|
2016-08-28 00:20:38 +00:00
|
|
|
ke_linked_list_remove(&list, 3);
|
|
|
|
ke_linked_list_remove(&list, 2);
|
|
|
|
ke_linked_list_remove(&list, 1);
|
|
|
|
ke_linked_list_remove(&list, 0);
|
2016-05-18 05:43:48 +00:00
|
|
|
|
2016-05-20 00:18:27 +00:00
|
|
|
result = result && assert_list(&list, NULL, 0);
|
2016-05-18 05:43:48 +00:00
|
|
|
|
|
|
|
insert_val(&list, 0, 0);
|
|
|
|
insert_val(&list, 1, 1);
|
|
|
|
insert_val(&list, 2, 2);
|
|
|
|
insert_val(&list, 3, 3);
|
|
|
|
|
2016-08-28 00:20:38 +00:00
|
|
|
ke_linked_list_remove(&list, 1);
|
|
|
|
ke_linked_list_remove(&list, 1);
|
|
|
|
ke_linked_list_remove(&list, 1);
|
|
|
|
ke_linked_list_remove(&list, 0);
|
2016-05-18 05:43:48 +00:00
|
|
|
|
2016-05-20 00:18:27 +00:00
|
|
|
result = result && assert_list(&list, NULL, 0);
|
2016-05-18 05:43:48 +00:00
|
|
|
|
2016-05-23 03:19:56 +00:00
|
|
|
return result;
|
2016-05-18 05:43:48 +00:00
|
|
|
}
|
|
|
|
|
2016-05-23 03:19:56 +00:00
|
|
|
static bool remove_test_invalid()
|
2016-05-18 05:43:48 +00:00
|
|
|
{
|
2016-08-28 00:20:38 +00:00
|
|
|
k_linked_list_t list;
|
|
|
|
ke_linked_list_init(&list);
|
2016-05-18 05:43:48 +00:00
|
|
|
|
|
|
|
insert_val(&list, 0, 3);
|
|
|
|
insert_val(&list, 0, 2);
|
|
|
|
insert_val(&list, 0, 1);
|
|
|
|
insert_val(&list, 0, 0);
|
|
|
|
|
|
|
|
// large index
|
2016-08-28 00:20:38 +00:00
|
|
|
ke_linked_list_remove(&list, 5);
|
|
|
|
ke_linked_list_remove(&list, 6);
|
|
|
|
ke_linked_list_remove(&list, 999);
|
2016-05-18 05:43:48 +00:00
|
|
|
|
|
|
|
// small index
|
2016-08-28 00:20:38 +00:00
|
|
|
ke_linked_list_remove(&list, -1);
|
|
|
|
ke_linked_list_remove(&list, -2);
|
|
|
|
ke_linked_list_remove(&list, -999);
|
2016-05-18 05:43:48 +00:00
|
|
|
|
|
|
|
// NULL
|
2016-08-28 00:20:38 +00:00
|
|
|
ke_linked_list_remove(NULL, 1);
|
|
|
|
ke_linked_list_remove_ref(NULL, list.head);
|
|
|
|
ke_linked_list_remove_ref(&list, NULL);
|
2016-05-18 05:43:48 +00:00
|
|
|
|
|
|
|
// 0123=====3210
|
2016-05-23 03:19:56 +00:00
|
|
|
int val[] = {0, 1, 2, 3};
|
|
|
|
return assert_list(&list, val, 4);
|
2016-05-18 05:43:48 +00:00
|
|
|
}
|
|
|
|
|
2016-05-23 03:19:56 +00:00
|
|
|
static bool size_test()
|
2016-05-18 05:43:48 +00:00
|
|
|
{
|
2016-05-20 00:18:27 +00:00
|
|
|
bool result = true;
|
2016-08-28 00:20:38 +00:00
|
|
|
k_linked_list_t list;
|
|
|
|
ke_linked_list_init(&list);
|
|
|
|
k_linked_list_t list2;
|
|
|
|
ke_linked_list_init(&list2);
|
2016-05-18 05:43:48 +00:00
|
|
|
|
|
|
|
insert_val(&list, 0, 0);
|
|
|
|
insert_val(&list, 1, 1);
|
|
|
|
insert_val(&list, 2, 2);
|
|
|
|
insert_val(&list, 3, 3);
|
|
|
|
|
2016-08-28 00:20:38 +00:00
|
|
|
result = result && (ke_linked_list_size(&list) == 4 && ke_linked_list_size(&list2) == 0 && ke_linked_list_size(NULL) == -1);
|
2016-05-23 03:19:56 +00:00
|
|
|
int val[] = {0, 1, 2, 3};
|
2016-05-20 00:18:27 +00:00
|
|
|
result = result && assert_list(&list, val, 4);
|
2016-05-23 03:19:56 +00:00
|
|
|
return result;
|
2016-05-18 05:43:48 +00:00
|
|
|
}
|
|
|
|
|
2016-05-23 03:19:56 +00:00
|
|
|
static bool push_pop_front_test()
|
2016-05-18 05:43:48 +00:00
|
|
|
{
|
2016-05-20 00:18:27 +00:00
|
|
|
bool result = true;
|
2016-08-28 00:20:38 +00:00
|
|
|
k_linked_list_t list;
|
|
|
|
ke_linked_list_init(&list);
|
2016-05-18 05:43:48 +00:00
|
|
|
|
|
|
|
push_front_val(&list, 1);
|
|
|
|
push_front_val(&list, 2);
|
|
|
|
push_front_val(&list, 3);
|
|
|
|
push_front_val(&list, 4);
|
|
|
|
|
|
|
|
//4321==1234
|
2016-05-23 03:19:56 +00:00
|
|
|
int val1[] = {4, 3, 2, 1};
|
2016-05-20 00:18:27 +00:00
|
|
|
result = result && assert_list(&list, val1, 4);
|
2016-05-18 05:43:48 +00:00
|
|
|
|
2016-08-28 00:20:38 +00:00
|
|
|
ke_linked_list_pop_front(&list);
|
2016-05-18 05:43:48 +00:00
|
|
|
//321==123
|
2016-05-23 03:19:56 +00:00
|
|
|
int val2[] = {3, 2, 1};
|
2016-05-20 00:18:27 +00:00
|
|
|
result = result && assert_list(&list, val2, 3);
|
2016-05-18 05:43:48 +00:00
|
|
|
|
2016-08-28 00:20:38 +00:00
|
|
|
ke_linked_list_pop_front(&list);
|
|
|
|
ke_linked_list_pop_front(&list);
|
|
|
|
ke_linked_list_pop_front(&list);
|
2016-05-18 05:43:48 +00:00
|
|
|
|
2016-05-20 00:18:27 +00:00
|
|
|
result = result && assert_list(&list, NULL, 0);
|
2016-05-23 03:19:56 +00:00
|
|
|
return result;
|
2016-05-18 05:43:48 +00:00
|
|
|
}
|
|
|
|
|
2016-05-23 03:19:56 +00:00
|
|
|
static bool push_pop_back_test()
|
2016-05-18 05:43:48 +00:00
|
|
|
{
|
2016-05-20 00:18:27 +00:00
|
|
|
bool result = true;
|
2016-08-28 00:20:38 +00:00
|
|
|
k_linked_list_t list;
|
|
|
|
ke_linked_list_init(&list);
|
2016-05-18 05:43:48 +00:00
|
|
|
|
|
|
|
push_back_val(&list, 1);
|
|
|
|
push_back_val(&list, 2);
|
|
|
|
push_back_val(&list, 3);
|
|
|
|
push_back_val(&list, 4);
|
|
|
|
|
|
|
|
//1234==4321
|
2016-05-23 03:19:56 +00:00
|
|
|
int val1[] = {1, 2, 3, 4};
|
2016-05-20 00:18:27 +00:00
|
|
|
result = result && assert_list(&list, val1, 4);
|
2016-05-18 05:43:48 +00:00
|
|
|
|
2016-08-28 00:20:38 +00:00
|
|
|
ke_linked_list_pop_back(&list);
|
2016-05-18 05:43:48 +00:00
|
|
|
//123==321
|
2016-05-23 03:19:56 +00:00
|
|
|
int val2[] = {1, 2, 3};
|
2016-05-20 00:18:27 +00:00
|
|
|
result = result && assert_list(&list, val2, 3);
|
2016-05-18 05:43:48 +00:00
|
|
|
|
2016-08-28 00:20:38 +00:00
|
|
|
ke_linked_list_pop_back(&list);
|
|
|
|
ke_linked_list_pop_back(&list);
|
|
|
|
ke_linked_list_pop_back(&list);
|
2016-05-18 05:43:48 +00:00
|
|
|
|
2016-05-20 00:18:27 +00:00
|
|
|
result = result && assert_list(&list, NULL, 0);
|
2016-05-23 03:19:56 +00:00
|
|
|
return result;
|
2016-05-20 00:18:27 +00:00
|
|
|
}
|
|
|
|
|
2016-08-28 00:20:38 +00:00
|
|
|
static bool equals(k_linked_list_node_t *a, k_linked_list_node_t *b)
|
2016-05-20 00:18:27 +00:00
|
|
|
{
|
2016-07-09 03:01:33 +00:00
|
|
|
return (int64_t) b == OBTAIN_STRUCT_ADDR(a, my_list_node, lnode)->val;
|
2016-05-20 00:18:27 +00:00
|
|
|
}
|
|
|
|
|
2016-05-23 03:19:56 +00:00
|
|
|
static bool search_test()
|
2016-05-20 00:18:27 +00:00
|
|
|
{
|
|
|
|
bool result = true;
|
2016-08-28 00:20:38 +00:00
|
|
|
k_linked_list_t list;
|
|
|
|
ke_linked_list_init(&list);
|
2016-05-20 00:18:27 +00:00
|
|
|
|
|
|
|
push_back_val(&list, 1);
|
|
|
|
push_back_val(&list, 2);
|
|
|
|
push_back_val(&list, 3);
|
|
|
|
push_back_val(&list, 4);
|
|
|
|
|
2016-05-23 03:19:56 +00:00
|
|
|
int val1[] = {1, 2, 3, 4};
|
2016-05-20 00:18:27 +00:00
|
|
|
result = result && assert_list(&list, val1, 4);
|
|
|
|
|
2016-08-28 00:20:38 +00:00
|
|
|
result = result && (ke_linked_list_search(&list, (k_linked_list_node_t *) 4, equals) == 3);
|
|
|
|
result = result && (ke_linked_list_search(&list, (k_linked_list_node_t *) 3, equals) == 2);
|
|
|
|
result = result && (ke_linked_list_search(&list, (k_linked_list_node_t *) 2, equals) == 1);
|
|
|
|
result = result && (ke_linked_list_search(&list, (k_linked_list_node_t *) 1, equals) == 0);
|
2016-05-20 00:18:27 +00:00
|
|
|
|
2016-08-28 00:20:38 +00:00
|
|
|
result = result && (ke_linked_list_search(&list, NULL, equals) == -1);
|
|
|
|
result = result && (ke_linked_list_search(NULL, (k_linked_list_node_t *) 1, equals) == -1);
|
2016-05-20 00:18:27 +00:00
|
|
|
|
2016-08-28 00:20:38 +00:00
|
|
|
k_linked_list_node_t *node = ke_linked_list_get(&list, 1);
|
|
|
|
result = result && (ke_linked_list_search(&list, node, NULL) == 1);
|
2016-05-20 00:18:27 +00:00
|
|
|
|
|
|
|
|
|
|
|
result = result && assert_list(&list, val1, 4);
|
|
|
|
|
2016-05-23 03:19:56 +00:00
|
|
|
return result;
|
2016-05-18 05:43:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2016-06-01 05:00:29 +00:00
|
|
|
void KAPI linked_list_test(void)
|
2016-05-18 05:43:48 +00:00
|
|
|
{
|
2016-05-23 03:19:56 +00:00
|
|
|
test_begin("Linked list test");
|
|
|
|
run_case("insert_test_beginning", insert_test_beginning());
|
|
|
|
run_case("insert_test_middle", insert_test_middle());
|
|
|
|
run_case("insert_test_end", insert_test_end());
|
|
|
|
run_case("insert_test_invalid", insert_test_invalid());
|
2016-05-18 05:43:48 +00:00
|
|
|
|
2016-05-23 03:19:56 +00:00
|
|
|
run_case("remove_test_beginning", remove_test_beginning());
|
|
|
|
run_case("remove_test_middle", remove_test_middle());
|
|
|
|
run_case("remove_test_end", remove_test_end());
|
|
|
|
run_case("remove_test_invalid", remove_test_invalid());
|
2016-05-18 05:43:48 +00:00
|
|
|
|
2016-05-23 03:19:56 +00:00
|
|
|
run_case("size_test", size_test());
|
2016-05-18 05:43:48 +00:00
|
|
|
|
2016-05-23 03:19:56 +00:00
|
|
|
run_case("remove_test_all", remove_test_all());
|
2016-05-18 05:43:48 +00:00
|
|
|
|
2016-05-23 03:19:56 +00:00
|
|
|
run_case("push_pop_front_test", push_pop_front_test());
|
|
|
|
run_case("push_pop_back_test", push_pop_back_test());
|
2016-05-20 00:18:27 +00:00
|
|
|
|
2016-05-23 03:19:56 +00:00
|
|
|
run_case("search_test", search_test());
|
|
|
|
test_end();
|
2016-05-18 05:43:48 +00:00
|
|
|
}
|
|
|
|
|