From: ornse01 Date: Fri, 21 Nov 2014 17:36:26 +0000 (+0000) Subject: fix bug updating first child in insertbefore. X-Git-Url: http://git.osdn.net/view?p=bbk%2Fbchanf.git;a=commitdiff_plain;h=61a54cc7594d89d6e9d55ec9358fe873de47230c fix bug updating first child in insertbefore. git-svn-id: http://svn.sourceforge.jp/svnroot/bchan/bchanf/trunk@643 20a0b8eb-f62a-4a12-8fe1-b598822500fb --- diff --git a/src/coll/test_treebase.c b/src/coll/test_treebase.c index 2eab809..25fd945 100644 --- a/src/coll/test_treebase.c +++ b/src/coll/test_treebase.c @@ -378,6 +378,75 @@ LOCAL UNITTEST_RESULT test_treebase_node_7() return ret; } +LOCAL UNITTEST_RESULT test_treebase_node_8() +{ + treebase_node_t node0, node1, node2, node3; + test_treebase_node_expected_t expected; + Bool ok; + UNITTEST_RESULT ret = UNITTEST_RESULT_PASS; + + treebase_node_initialize(&node0); + treebase_node_initialize(&node1); + treebase_node_initialize(&node2); + treebase_node_initialize(&node3); + + treebase_node_insertbefore(&node0, &node1, NULL); + treebase_node_insertbefore(&node0, &node2, &node1); + treebase_node_insertbefore(&node0, &node3, NULL); + + /**/ + expected.parent = NULL; + expected.next = NULL; + expected.prev = NULL; + expected.first = &node2; + expected.last = &node3; + expected.has_child = True; + ok = test_treebase_node_commoncheck(&node0, &expected, "node0"); + if (ok == False) { + ret = UNITTEST_RESULT_FAIL; + } + /**/ + expected.parent = &node0; + expected.next = &node3; + expected.prev = &node2; + expected.first = NULL; + expected.last = NULL; + expected.has_child = False; + ok = test_treebase_node_commoncheck(&node1, &expected, "node1"); + if (ok == False) { + ret = UNITTEST_RESULT_FAIL; + } + /**/ + expected.parent = &node0; + expected.next = &node1; + expected.prev = NULL; + expected.first = NULL; + expected.last = NULL; + expected.has_child = False; + ok = test_treebase_node_commoncheck(&node2, &expected, "node2"); + if (ok == False) { + ret = UNITTEST_RESULT_FAIL; + } + /**/ + expected.parent = &node0; + expected.next = NULL; + expected.prev = &node1; + expected.first = NULL; + expected.last = NULL; + expected.has_child = False; + ok = test_treebase_node_commoncheck(&node3, &expected, "node3"); + if (ok == False) { + ret = UNITTEST_RESULT_FAIL; + } + + treebase_node_finalize(&node3); + treebase_node_finalize(&node2); + treebase_node_finalize(&node1); + treebase_node_finalize(&node0); + + return ret; +} + /* treebase_preordertraversal_t */ typedef struct { @@ -478,5 +547,6 @@ EXPORT VOID test_treebase_main(unittest_driver_t *driver) UNITTEST_DRIVER_REGIST(driver, test_treebase_node_5); UNITTEST_DRIVER_REGIST(driver, test_treebase_node_6); UNITTEST_DRIVER_REGIST(driver, test_treebase_node_7); + UNITTEST_DRIVER_REGIST(driver, test_treebase_node_8); UNITTEST_DRIVER_REGIST(driver, test_treebase_preordertraversal_1); } diff --git a/src/coll/treebase.c b/src/coll/treebase.c index a599a06..c70e726 100644 --- a/src/coll/treebase.c +++ b/src/coll/treebase.c @@ -53,6 +53,9 @@ EXPORT W treebase_node_insertbefore(treebase_node_t *node, treebase_node_t *chil return -1; /* TODO */ } + if (node->firstchild == ref) { + node->firstchild = child; + } QueInsert(&child->sibling, &ref->sibling); child->parent = node;