mirror of
https://gitee.com/apaki/unicstl.git
synced 2025-05-17 19:41:36 +08:00
rbt测试通过
This commit is contained in:
parent
804075ab5f
commit
d8d6256c0a
BIN
doc/unicstl.log
Normal file
BIN
doc/unicstl.log
Normal file
Binary file not shown.
@ -1,61 +0,0 @@
|
||||
|
||||
|
||||
# tree
|
||||
```
|
||||
----- unicstl test -----
|
||||
|
||||
|
||||
----- test_tree_num -----
|
||||
----- insert -----
|
||||
insert = ( 5 ) size = 1 : ( 5 )
|
||||
insert = ( 2 ) size = 2 : ( 5 ) ( 2 )
|
||||
insert = ( 3 ) size = 3 : ( 3 ) ( 2 ) ( 5 )
|
||||
insert = ( 1 ) size = 4 : ( 3 ) ( 2 ) ( 1 ) ( 5 )
|
||||
insert = ( 7 ) size = 5 : ( 3 ) ( 2 ) ( 1 ) ( 5 ) ( 7 )
|
||||
insert = ( 8 ) size = 6 : ( 3 ) ( 2 ) ( 1 ) ( 7 ) ( 5 ) ( 8 )
|
||||
insert = ( 6 ) size = 7 : ( 3 ) ( 2 ) ( 1 ) ( 7 ) ( 5 ) ( 6 ) ( 8 )
|
||||
insert = ( 4 ) size = 8 : ( 3 ) ( 2 ) ( 1 ) ( 7 ) ( 5 ) ( 4 ) ( 6 ) ( 8 )
|
||||
insert = ( 9 ) size = 9 : ( 3 ) ( 2 ) ( 1 ) ( 7 ) ( 5 ) ( 4 ) ( 6 ) ( 8 ) ( 9 )
|
||||
insert = (10 ) size = 10 : ( 3 ) ( 2 ) ( 1 ) ( 7 ) ( 5 ) ( 4 ) ( 6 ) ( 9 ) ( 8 ) (10 )
|
||||
insert = (12 ) size = 11 : ( 7 ) ( 3 ) ( 2 ) ( 1 ) ( 5 ) ( 4 ) ( 6 ) ( 9 ) ( 8 ) (10 ) (12 )
|
||||
insert = (11 ) size = 12 : ( 7 ) ( 3 ) ( 2 ) ( 1 ) ( 5 ) ( 4 ) ( 6 ) ( 9 ) ( 8 ) (11 ) (10 ) (12 )
|
||||
insert = (15 ) size = 13 : ( 7 ) ( 3 ) ( 2 ) ( 1 ) ( 5 ) ( 4 ) ( 6 ) (11 ) ( 9 ) ( 8 ) (10 ) (12 ) (15 )
|
||||
insert = (14 ) size = 14 : ( 7 ) ( 3 ) ( 2 ) ( 1 ) ( 5 ) ( 4 ) ( 6 ) (11 ) ( 9 ) ( 8 ) (10 ) (14 ) (12 ) (15 )
|
||||
insert = (13 ) size = 15 : ( 7 ) ( 3 ) ( 2 ) ( 1 ) ( 5 ) ( 4 ) ( 6 ) (11 ) ( 9 ) ( 8 ) (10 ) (14 ) (12 ) (13 ) (15 )
|
||||
----- preorder -----
|
||||
( 7 ) ( 3 ) ( 2 ) ( 1 ) ( 5 ) ( 4 ) ( 6 ) (11 ) ( 9 ) ( 8 ) (10 ) (14 ) (12 ) (13 ) (15 )
|
||||
----- inorder -----
|
||||
( 1 ) ( 2 ) ( 3 ) ( 4 ) ( 5 ) ( 6 ) ( 7 ) ( 8 ) ( 9 ) (10 ) (11 ) (12 ) (13 ) (14 ) (15 )
|
||||
----- postorder -----
|
||||
( 1 ) ( 2 ) ( 4 ) ( 6 ) ( 5 ) ( 3 ) ( 8 ) (10 ) ( 9 ) (13 ) (12 ) (15 ) (14 ) (11 ) ( 7 )
|
||||
----- breadth -----
|
||||
( 7 ) ( 3 ) (11 ) ( 2 ) ( 5 ) ( 9 ) (14 ) ( 1 ) ( 4 ) ( 6 ) ( 8 ) (10 ) (12 ) (15 ) (13 )
|
||||
----- right priority -----
|
||||
----- preorder(right) -----
|
||||
( 7 ) (11 ) (14 ) (15 ) (12 ) (13 ) ( 9 ) (10 ) ( 8 ) ( 3 ) ( 5 ) ( 6 ) ( 4 ) ( 2 ) ( 1 )
|
||||
----- inorder(right) -----
|
||||
(15 ) (14 ) (13 ) (12 ) (11 ) (10 ) ( 9 ) ( 8 ) ( 7 ) ( 6 ) ( 5 ) ( 4 ) ( 3 ) ( 2 ) ( 1 )
|
||||
----- postorder(right) -----
|
||||
(15 ) (13 ) (12 ) (14 ) (10 ) ( 8 ) ( 9 ) (11 ) ( 6 ) ( 4 ) ( 5 ) ( 1 ) ( 2 ) ( 3 ) ( 7 )
|
||||
----- breadth(right) -----
|
||||
( 7 ) (11 ) ( 3 ) (14 ) ( 9 ) ( 5 ) ( 2 ) (15 ) (12 ) (10 ) ( 8 ) ( 6 ) ( 4 ) ( 1 ) (13 )
|
||||
----- left priority -----
|
||||
----- preorder -----
|
||||
( 7 ) ( 3 ) ( 2 ) ( 1 ) ( 5 ) ( 4 ) ( 6 ) (11 ) ( 9 ) ( 8 ) (10 ) (14 ) (12 ) (13 ) (15 )
|
||||
delete = ( 5 ) size = 14 : ( 7 ) ( 3 ) ( 2 ) ( 1 ) ( 6 ) ( 4 ) (11 ) ( 9 ) ( 8 ) (10 ) (14 ) (12 ) (13 ) (15 )
|
||||
delete = ( 2 ) size = 13 : ( 7 ) ( 3 ) ( 1 ) ( 6 ) ( 4 ) (11 ) ( 9 ) ( 8 ) (10 ) (14 ) (12 ) (13 ) (15 )
|
||||
delete = ( 3 ) size = 12 : ( 7 ) ( 4 ) ( 1 ) ( 6 ) (11 ) ( 9 ) ( 8 ) (10 ) (14 ) (12 ) (13 ) (15 )
|
||||
delete = ( 1 ) size = 11 : (11 ) ( 7 ) ( 4 ) ( 6 ) ( 9 ) ( 8 ) (10 ) (14 ) (12 ) (13 ) (15 )
|
||||
delete = ( 7 ) size = 10 : (11 ) ( 8 ) ( 4 ) ( 6 ) ( 9 ) (10 ) (14 ) (12 ) (13 ) (15 )
|
||||
delete = ( 8 ) size = 9 : (11 ) ( 9 ) ( 4 ) ( 6 ) (10 ) (14 ) (12 ) (13 ) (15 )
|
||||
delete = ( 6 ) size = 8 : (11 ) ( 9 ) ( 4 ) (10 ) (14 ) (12 ) (13 ) (15 )
|
||||
delete = ( 4 ) size = 7 : (11 ) ( 9 ) (10 ) (14 ) (12 ) (13 ) (15 )
|
||||
delete = ( 9 ) size = 6 : (12 ) (11 ) (10 ) (14 ) (13 ) (15 )
|
||||
delete = (10 ) size = 5 : (12 ) (11 ) (14 ) (13 ) (15 )
|
||||
delete = (12 ) size = 4 : (13 ) (11 ) (14 ) (15 )
|
||||
delete = (11 ) size = 3 : (14 ) (13 ) (15 )
|
||||
delete = (15 ) size = 2 : (14 ) (13 )
|
||||
delete = (14 ) size = 1 : (13 )
|
||||
delete = (13 ) size = 0 :
|
||||
----- empty -----
|
||||
```
|
237
test/test_tree.c
237
test/test_tree.c
@ -511,7 +511,7 @@ static const int expected_int_array_orderpre_delete[15][15] = {
|
||||
{ 13, },
|
||||
};
|
||||
|
||||
static void test_tree_iter(void)
|
||||
static void test_avltree_iter(void)
|
||||
{
|
||||
uint32_t i = 0;
|
||||
// int data[] = { 2,1,3,4};
|
||||
@ -641,7 +641,6 @@ static void test_avltree_insert(void)
|
||||
TEST_ASSERT_NULL(tree);
|
||||
}
|
||||
|
||||
|
||||
static void test_avltree_delete(void)
|
||||
{
|
||||
uint32_t i = 0;
|
||||
@ -688,13 +687,243 @@ static void test_avltree_delete(void)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
static const int rbt_expected_int_array[9][15] = {
|
||||
{ 5, 2, 3, 1, 7, 8, 6, 4, 9, 10, 12, 11, 15, 14, 13}, // original data
|
||||
{ 7, 3, 2, 1, 5, 4, 6, 11, 9, 8, 10, 14, 12, 13, 15}, // order_left_pre
|
||||
{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, // order_left_in
|
||||
{ 1, 2, 4, 6, 5, 3, 8, 10, 9, 13, 12, 15, 14, 11, 7}, // order_left_post
|
||||
{ 7, 3, 11, 2, 5, 9, 14, 1, 4, 6, 8, 10, 12, 15, 13}, // order_left_breadth
|
||||
{ 7, 11, 14, 15, 12, 13, 9, 10, 8, 3, 5, 6, 4, 2, 1}, // order_right_pre
|
||||
{ 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1}, // order_right_in
|
||||
{ 15, 13, 12, 14, 10, 8, 9, 11, 6, 4, 5, 1, 2, 3, 7}, // order_right_post
|
||||
{ 7, 11, 3, 14, 9, 5, 2, 15, 12, 10, 8, 6, 4, 1, 13}, // order_right_breadth
|
||||
};
|
||||
|
||||
static const int rbt_expected_int_array_orderpre_insert[15][15] = {
|
||||
{ 5, },
|
||||
{ 5, 2, },
|
||||
{ 3, 2, 5, },
|
||||
{ 3, 2, 1, 5, },
|
||||
{ 3, 2, 1, 5, 7, },
|
||||
{ 3, 2, 1, 7, 5, 8, },
|
||||
{ 3, 2, 1, 7, 5, 6, 8, },
|
||||
{ 3, 2, 1, 7, 5, 4, 6, 8, },
|
||||
{ 3, 2, 1, 7, 5, 4, 6, 8, 9, },
|
||||
{ 3, 2, 1, 7, 5, 4, 6, 9, 8, 10, },
|
||||
{ 7, 3, 2, 1, 5, 4, 6, 9, 8, 10, 12, },
|
||||
{ 7, 3, 2, 1, 5, 4, 6, 9, 8, 11, 10, 12, },
|
||||
{ 7, 3, 2, 1, 5, 4, 6, 9, 8, 11, 10, 12, 15, },
|
||||
{ 7, 3, 2, 1, 5, 4, 6, 9, 8, 11, 10, 14, 12, 15, },
|
||||
{ 7, 3, 2, 1, 5, 4, 6, 11, 9, 8, 10, 14, 12, 13, 15, },
|
||||
};
|
||||
|
||||
static const int rbt_expected_int_array_orderpre_delete[15][15] = {
|
||||
{ 7, 3, 2, 1, 5, 4, 6, 11, 9, 8, 10, 14, 12, 13, 15, },
|
||||
{ 7, 3, 2, 1, 6, 4, 11, 9, 8, 10, 14, 12, 13, 15, },
|
||||
{ 7, 3, 1, 6, 4, 11, 9, 8, 10, 14, 12, 13, 15, },
|
||||
{ 7, 4, 1, 6, 11, 9, 8, 10, 14, 12, 13, 15, },
|
||||
{ 11, 7, 4, 6, 9, 8, 10, 14, 12, 13, 15, },
|
||||
{ 11, 8, 4, 6, 9, 10, 14, 12, 13, 15, },
|
||||
{ 11, 9, 4, 6, 10, 14, 12, 13, 15, },
|
||||
{ 11, 9, 4, 10, 14, 12, 13, 15, },
|
||||
{ 11, 9, 10, 14, 12, 13, 15, },
|
||||
{ 11, 10, 14, 12, 13, 15, },
|
||||
{ 14, 12, 11, 13, 15, },
|
||||
{ 14, 13, 11, 15, },
|
||||
{ 14, 13, 15, },
|
||||
{ 14, 13, },
|
||||
{ 13, },
|
||||
};
|
||||
|
||||
|
||||
static void test_rbtree_iter(void)
|
||||
{
|
||||
uint32_t i = 0;
|
||||
// int data[] = { 2,1,3,4};
|
||||
// int data[] = { 1,2,3,4,5,6};
|
||||
// int data[] = { 5,2,3,1,7,8,6 };
|
||||
// int data[] = { 5,2,3,1,7,8,6,4,9,10,12,11,15,14,13 };
|
||||
int data[15] = { 5, 2, 3, 1, 7, 8, 6, 4, 9, 10, 12, 11, 15, 14, 13, };
|
||||
int buff[32];
|
||||
int temp = 0;
|
||||
uint32_t len = sizeof(data) / sizeof(data[0]);
|
||||
|
||||
int * iter = NULL;
|
||||
int count = 0;
|
||||
|
||||
tree_t tree = tree_new();
|
||||
TEST_ASSERT_NOT_NULL(tree);
|
||||
|
||||
tree_rb_init(tree, sizeof(int));
|
||||
tree->print_obj = print_num;
|
||||
tree->compare = compare_num;
|
||||
|
||||
for (i = 0; i < len; i++)
|
||||
{
|
||||
temp = data[i];
|
||||
TEST_ASSERT_TRUE(tree->insert(tree, &temp));
|
||||
|
||||
for (count = 0, iter = tree->begin(tree); iter != tree->end(tree); iter = tree->next(tree))
|
||||
{
|
||||
buff[count++] = *iter;
|
||||
}
|
||||
TEST_ASSERT_EQUAL_INT_ARRAY(rbt_expected_int_array_orderpre_insert[i], buff, count);
|
||||
}
|
||||
|
||||
for(i = 1; i < 9; i++)
|
||||
{
|
||||
tree->set_order(tree, i); //ORDER_LEFT_IN
|
||||
// printf("\n ----- iter test -----\n");
|
||||
for (count = 0, iter = tree->begin(tree); iter != tree->end(tree); iter = tree->next(tree))
|
||||
{
|
||||
// printf("(%2d ) ", *iter);
|
||||
buff[count++] = *iter;
|
||||
}
|
||||
// printf("\n");
|
||||
TEST_ASSERT_EQUAL_INT_ARRAY(rbt_expected_int_array[i], buff, count);
|
||||
}
|
||||
|
||||
#if 0
|
||||
tree->order(tree, true);
|
||||
printf("\n\nactual data = \n");
|
||||
tree->postorder(tree, tree->_root);
|
||||
printf("\n");
|
||||
|
||||
// set order
|
||||
// tree->set_order(tree, ORDER_LEFT_PRE);
|
||||
// tree->set_order(tree, ORDER_LEFT_IN);
|
||||
// tree->set_order(tree, ORDER_LEFT_POST);
|
||||
// tree->set_order(tree, ORDER_LEFT_BREADTH);
|
||||
// tree->set_order(tree, ORDER_RIGHT_PRE);
|
||||
// tree->set_order(tree, ORDER_RIGHT_IN);
|
||||
tree->set_order(tree, ORDER_RIGHT_POST);
|
||||
// tree->set_order(tree, ORDER_RIGHT_BREADTH);
|
||||
printf("\n ----- iter data -----\n");
|
||||
for (count = 0, iter = tree->begin(tree); iter != tree->end(tree); iter = tree->next(tree))
|
||||
{
|
||||
printf("(%2d ) ", *iter);
|
||||
buff[count++] = *iter;
|
||||
}
|
||||
printf("\n");
|
||||
TEST_ASSERT_EQUAL_INT_ARRAY(expected_int_array[tree->_order], buff, count);
|
||||
#endif
|
||||
|
||||
TEST_ASSERT_FALSE(tree->empty(tree));
|
||||
TEST_ASSERT_TRUE(tree->clear(tree));
|
||||
TEST_ASSERT_TRUE(tree->empty(tree));
|
||||
TEST_ASSERT_TRUE(tree->clear(tree));
|
||||
tree_free(&tree);
|
||||
TEST_ASSERT_NULL(tree);
|
||||
}
|
||||
|
||||
static void test_rbtree_insert(void)
|
||||
{
|
||||
uint32_t i = 0;
|
||||
// int data[] = { 2,1,3,4};
|
||||
// int data[] = { 1,2,3,4,5,6};
|
||||
// int data[] = { 5,2,3,1,7,8,6 };
|
||||
int data[15] = { 5, 2, 3, 1, 7, 8, 6, 4, 9, 10, 12, 11, 15, 14, 13, };
|
||||
int buff[32];
|
||||
int temp = 0;
|
||||
uint32_t len = sizeof(data) / sizeof(data[0]);
|
||||
|
||||
int * iter = NULL;
|
||||
int count = 0;
|
||||
|
||||
tree_t tree = tree_new();
|
||||
TEST_ASSERT_NOT_NULL(tree);
|
||||
|
||||
tree_rb_init(tree, sizeof(int));
|
||||
tree->print_obj = print_num;
|
||||
tree->compare = compare_num;
|
||||
|
||||
for (i = 0; i < len; i++)
|
||||
{
|
||||
temp = data[i];
|
||||
TEST_ASSERT_TRUE(tree->insert(tree, &temp));
|
||||
|
||||
for (count = 0, iter = tree->begin(tree); iter != tree->end(tree); iter = tree->next(tree))
|
||||
{
|
||||
buff[count++] = *iter;
|
||||
}
|
||||
TEST_ASSERT_EQUAL_INT_ARRAY(rbt_expected_int_array_orderpre_insert[i], buff, count);
|
||||
}
|
||||
|
||||
for(i = 1; i < 9; i++)
|
||||
{
|
||||
tree->set_order(tree, i); //ORDER_LEFT_IN
|
||||
// printf("\n ----- iter test -----\n");
|
||||
for (count = 0, iter = tree->begin(tree); iter != tree->end(tree); iter = tree->next(tree))
|
||||
{
|
||||
// printf("(%2d ) ", *iter);
|
||||
buff[count++] = *iter;
|
||||
}
|
||||
// printf("\n");
|
||||
TEST_ASSERT_EQUAL_INT_ARRAY(rbt_expected_int_array[i], buff, count);
|
||||
}
|
||||
|
||||
tree_free(&tree);
|
||||
TEST_ASSERT_NULL(tree);
|
||||
}
|
||||
|
||||
static void test_rbtree_delete(void)
|
||||
{
|
||||
uint32_t i = 0;
|
||||
int data[15] = { 5, 2, 3, 1, 7, 8, 6, 4, 9, 10, 12, 11, 15, 14, 13, };
|
||||
int buff[32];
|
||||
int temp = 0;
|
||||
uint32_t len = sizeof(data) / sizeof(data[0]);
|
||||
|
||||
int * iter = NULL;
|
||||
int count = 0;
|
||||
|
||||
tree_t tree = tree_new();
|
||||
TEST_ASSERT_NOT_NULL(tree);
|
||||
|
||||
tree_rb_init(tree, sizeof(int));
|
||||
tree->print_obj = print_num;
|
||||
tree->compare = compare_num;
|
||||
|
||||
for (i = 0; i < len; i++)
|
||||
{
|
||||
temp = data[i];
|
||||
TEST_ASSERT_TRUE(tree->insert(tree, &temp));
|
||||
}
|
||||
|
||||
for (i = 0; i < len; i++)
|
||||
{
|
||||
for (count = 0, iter = tree->begin(tree); iter != tree->end(tree); iter = tree->next(tree))
|
||||
{
|
||||
buff[count++] = *iter;
|
||||
// printf("(%2d ) ", *iter);
|
||||
}
|
||||
// printf("\n");
|
||||
TEST_ASSERT_EQUAL_INT_ARRAY(rbt_expected_int_array_orderpre_delete[i], buff, count);
|
||||
|
||||
temp = data[i];
|
||||
// delete
|
||||
TEST_ASSERT_TRUE(tree->delete(tree, &temp));
|
||||
}
|
||||
//
|
||||
TEST_ASSERT_FALSE(tree->delete(tree, &temp));
|
||||
|
||||
tree_free(&tree);
|
||||
TEST_ASSERT_NULL(tree);
|
||||
}
|
||||
|
||||
|
||||
void test_tree(void)
|
||||
{
|
||||
RUN_TEST(test_tree_iter);
|
||||
|
||||
RUN_TEST(test_avltree_iter);
|
||||
RUN_TEST(test_avltree_insert);
|
||||
RUN_TEST(test_avltree_delete);
|
||||
|
||||
RUN_TEST(test_rbtree_iter);
|
||||
RUN_TEST(test_rbtree_insert);
|
||||
RUN_TEST(test_rbtree_delete);
|
||||
|
||||
// RUN_TEST(test_avltree_num);
|
||||
// RUN_TEST(test_rbtree_num);
|
||||
// RUN_TEST(test_rbtree_struct);
|
||||
|
Loading…
Reference in New Issue
Block a user