From d8d6256c0a71d3bcc68dbb22959340b9696015de Mon Sep 17 00:00:00 2001 From: wjf-hs Date: Mon, 2 Sep 2024 21:14:16 +0800 Subject: [PATCH] =?UTF-8?q?rbt=E6=B5=8B=E8=AF=95=E9=80=9A=E8=BF=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/unicstl.log | Bin 0 -> 59640 bytes doc/unicstl.md | 61 ------------ test/test_tree.c | 237 ++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 233 insertions(+), 65 deletions(-) create mode 100644 doc/unicstl.log delete mode 100644 doc/unicstl.md diff --git a/doc/unicstl.log b/doc/unicstl.log new file mode 100644 index 0000000000000000000000000000000000000000..992f3135b6dd43c2a4a7221d4a896c5e73e36932 GIT binary patch literal 59640 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 P_q{#*RQ_u-fbRbRhB;ia literal 0 HcmV?d00001 diff --git a/doc/unicstl.md b/doc/unicstl.md deleted file mode 100644 index c3062e7..0000000 --- a/doc/unicstl.md +++ /dev/null @@ -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 ----- -``` diff --git a/test/test_tree.c b/test/test_tree.c index fa2fb13..65c369d 100644 --- a/test/test_tree.c +++ b/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);