[rtems commit] score: Add _RBTree_Initialize_one()
Sebastian Huber
sebh at rtems.org
Tue Sep 6 09:16:33 UTC 2016
Module: rtems
Branch: master
Commit: 83b022907173c9e1bd69874fadb5ed443400c2fa
Changeset: http://git.rtems.org/rtems/commit/?id=83b022907173c9e1bd69874fadb5ed443400c2fa
Author: Sebastian Huber <sebastian.huber at embedded-brains.de>
Date: Tue Jun 28 06:59:29 2016 +0200
score: Add _RBTree_Initialize_one()
---
cpukit/score/include/rtems/score/rbtree.h | 20 ++++++++++++++++++++
testsuites/sptests/sprbtree01/init.c | 25 +++++++++++++++++++++++++
testsuites/sptests/sprbtree01/sprbtree01.scn | 1 +
3 files changed, 46 insertions(+)
diff --git a/cpukit/score/include/rtems/score/rbtree.h b/cpukit/score/include/rtems/score/rbtree.h
index a5a6cf3..818eee4 100644
--- a/cpukit/score/include/rtems/score/rbtree.h
+++ b/cpukit/score/include/rtems/score/rbtree.h
@@ -388,6 +388,26 @@ RTEMS_INLINE_ROUTINE void _RBTree_Initialize_empty(
}
/**
+ * @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.
*
* @param[in] the_rbtree The red-black tree control.
diff --git a/testsuites/sptests/sprbtree01/init.c b/testsuites/sptests/sprbtree01/init.c
index 0543508..746b36e 100644
--- a/testsuites/sptests/sprbtree01/init.c
+++ b/testsuites/sptests/sprbtree01/init.c
@@ -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();
diff --git a/testsuites/sptests/sprbtree01/sprbtree01.scn b/testsuites/sptests/sprbtree01/sprbtree01.scn
index 9cf21f3..6b5e1d9 100644
--- a/testsuites/sptests/sprbtree01/sprbtree01.scn
+++ b/testsuites/sptests/sprbtree01/sprbtree01.scn
@@ -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
More information about the vc
mailing list