score: Add _RBTree_Initialize_one()

This commit is contained in:
Sebastian Huber
2016-09-06 10:52:19 +02:00
parent 796f12a85a
commit 83b0229071
3 changed files with 46 additions and 0 deletions
+20
View File
@@ -387,6 +387,26 @@ RTEMS_INLINE_ROUTINE void _RBTree_Initialize_empty(
RB_INIT( the_rbtree );
}
/**
* @brief Initializes this red-black tree to contain exactly the specified
* node.
*
* @param[in] the_rbtree The red-black tree control.
* @param[in] the_node The one and only node.
*/
RTEMS_INLINE_ROUTINE void _RBTree_Initialize_one(
RBTree_Control *the_rbtree,
RBTree_Node *the_node
)
{
_Assert( _RBTree_Is_node_off_tree( the_node ) );
RB_ROOT( the_rbtree ) = the_node;
RB_PARENT( the_node, Node ) = NULL;
RB_LEFT( the_node, Node ) = NULL;
RB_RIGHT( the_node, Node ) = NULL;
RB_COLOR( the_node, Node ) = RB_BLACK;
}
/**
* @brief Returns the minimum node of the red-black tree.
*
+25
View File
@@ -19,6 +19,30 @@ const char rtems_test_name[] = "SPRBTREE 1";
/* forward declarations to avoid warnings */
rtems_task Init(rtems_task_argument argument);
static void test_rbtree_init_one(void)
{
RBTree_Control tree;
RBTree_Node node;
puts( "INIT - Initialize one" );
_RBTree_Initialize_node( &node );
_RBTree_Initialize_one( &tree, &node );
rtems_test_assert( !_RBTree_Is_empty( &tree ) );
rtems_test_assert( _RBTree_Is_root( &node ) );
rtems_test_assert( !_RBTree_Is_node_off_tree( &node ) );
rtems_test_assert( _RBTree_Left( &node ) == NULL );
rtems_test_assert( _RBTree_Right( &node ) == NULL );
rtems_test_assert( _RBTree_Parent( &node ) == NULL );
rtems_test_assert( _RBTree_Successor( &node ) == NULL );
rtems_test_assert( _RBTree_Predecessor( &node ) == NULL );
rtems_test_assert( _RBTree_Minimum( &tree ) == &node );
rtems_test_assert( _RBTree_Maximum( &tree ) == &node );
_RBTree_Extract( &tree, &node );
rtems_test_assert( _RBTree_Is_empty( &tree ) );
}
static const int numbers[20] = {
52, 99, 0, 85, 43, 44, 10, 60, 50, 19, 8, 68, 48, 57, 17, 67, 90, 12, 77, 71
};
@@ -2271,6 +2295,7 @@ rtems_task Init( rtems_task_argument ignored )
rtems_test_exit(0);
}
test_rbtree_init_one();
test_rbtree_min_max();
test_rbtree_insert_inline();
test_rbtree_random_ops();
@@ -30,6 +30,7 @@ INIT - Removing 100 nodes
INIT - Verify rtems_rbtree_insert with 100 nodes value [99,0]
INIT - Verify rtems_rbtree_find in a duplicate tree
INIT - Removing 100 nodes
INIT - Initialize one
INIT - Verify min/max node updates
INIT - Verify _RBTree_Insert_inline
INIT - Random operations