Changeset 639117f in rtems
- Timestamp:
- 07/22/14 12:50:07 (9 years ago)
- Branches:
- 4.11, 5, master
- Children:
- 4cd55724
- Parents:
- 9113798c
- git-author:
- Sebastian Huber <sebastian.huber@…> (07/22/14 12:50:07)
- git-committer:
- Sebastian Huber <sebastian.huber@…> (07/26/14 10:01:25)
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
cpukit/score/include/rtems/score/rbtree.h
r9113798c r639117f 220 220 221 221 /** 222 * @brief Insert @a the_node on the Red-Black Tree @a the_rbtree. 223 * 224 * This routine inserts @a the_node on the Red-Black Tree @a the_rbtree. 222 * @brief Inserts the node into the red-black tree. 223 * 224 * In case the node is already a node of a tree, then this function yields 225 * unpredictable results. 225 226 * 226 227 * @param[in] the_rbtree The red-black tree control. … … 228 229 * @param[in] compare The node compare function. 229 230 * @param[in] is_unique If true, then reject nodes with a duplicate key, else 230 * otherwise.231 * insert nodes in FIFO order in case the key value is equal to existing nodes. 231 232 * 232 233 * @retval NULL Successfully inserted. … … 488 489 489 490 /** 490 * @brief Gets a node with an extremal key value .491 * @brief Gets a node with an extremal key value from the red-black tree. 491 492 * 492 493 * This function extracts a node with the minimum or maximum key value from 493 494 * tree and returns a pointer to that node if it exists. In case multiple 494 * nodes with an extremal key value exist, then they are extracted in FIFO 495 * order. 495 * nodes with a minimum key value exist, then they are extracted in FIFO order. 496 * In case multiple nodes with a maximum key value exist, then they are 497 * extracted in LIFO order. 496 498 * 497 499 * @param[in] the_rbtree The red-black tree control. … … 500 502 * 501 503 * @retval NULL The tree is empty. 502 * @retval extremal_node A node with theminimal or maximal key value on the504 * @retval extremal_node A node with a minimal or maximal key value on the 503 505 * tree. 504 506 */ -
cpukit/score/src/rbtreeinsert.c
r9113798c r639117f 97 97 98 98 if ( 99 ( !dir&& _RBTree_Is_lesser( compare_result ) )100 || ( dir && _RBTree_Is_greater( compare_result ) )99 ( dir == RBT_LEFT && _RBTree_Is_lesser( compare_result ) ) 100 || ( dir == RBT_RIGHT && !_RBTree_Is_lesser( compare_result ) ) 101 101 ) { 102 102 the_rbtree->first[ dir ] = the_node; -
testsuites/sptests/sprbtree01/init.c
r9113798c r639117f 20 20 rtems_task Init(rtems_task_argument argument); 21 21 22 int numbers[20] = { 23 52, 99, 0, 85, 43, 44, 10, 60, 50, 19, 8, 68, 48, 57, 17, 67, 90, 12, 77, 71}; 24 25 int numbers_sorted[20] = { 26 0, 8, 10, 12, 17, 19, 43, 44, 48, 50, 52, 57, 60, 67, 68, 71, 77, 85, 90, 99}; 22 static const int numbers[20] = { 23 52, 99, 0, 85, 43, 44, 10, 60, 50, 19, 8, 68, 48, 57, 17, 67, 90, 12, 77, 71 24 }; 25 26 static const int numbers_sorted[20] = { 27 0, 8, 10, 12, 17, 19, 43, 44, 48, 50, 52, 57, 60, 67, 68, 71, 77, 85, 90, 99 28 }; 27 29 28 30 typedef struct { … … 122 124 } 123 125 124 125 126 rtems_task Init( 127 rtems_task_argument ignored 128 ) 126 static test_node some_nodes[] = { 127 { .key = 1 }, 128 { .key = 1 }, 129 { .key = 1 }, 130 { .key = 2 }, 131 { .key = 2 }, 132 { .key = 2 } 133 }; 134 135 static void min_max_insert( 136 rtems_rbtree_control *tree, 137 rtems_rbtree_node *node, 138 rtems_rbtree_node *min, 139 rtems_rbtree_node *max 140 ) 141 { 142 rb_insert_multi( tree, node ); 143 rtems_test_assert( rb_assert( tree->root ) != -1 ); 144 rtems_test_assert( tree->first[ 0 ] == min ); 145 rtems_test_assert( tree->first[ 1 ] == max ); 146 } 147 148 static void min_max_extract( 149 rtems_rbtree_control *tree, 150 rtems_rbtree_node *node, 151 rtems_rbtree_node *min, 152 rtems_rbtree_node *max 153 ) 154 { 155 rtems_rbtree_extract( tree, node ); 156 rtems_test_assert( rb_assert( tree->root ) != -1 ); 157 rtems_test_assert( tree->first[ 0 ] == min ); 158 rtems_test_assert( tree->first[ 1 ] == max ); 159 } 160 161 static void test_rbtree_min_max(void) 162 { 163 rtems_rbtree_control tree; 164 rtems_rbtree_node *node; 165 rtems_rbtree_node *min; 166 rtems_rbtree_node *max; 167 168 puts( "INIT - Verify min/max node updates" ); 169 170 rtems_rbtree_initialize_empty( &tree ); 171 rtems_test_assert( rb_assert( tree.root ) == 1 ); 172 173 node = &some_nodes[ 0 ].Node; 174 min = node; 175 max = node; 176 min_max_insert( &tree, node, min, max ); 177 178 node = &some_nodes[ 1 ].Node; 179 max = node; 180 min_max_insert( &tree, node, min, max ); 181 182 node = &some_nodes[ 2 ].Node; 183 max = node; 184 min_max_insert( &tree, node, min, max ); 185 186 node = &some_nodes[ 3 ].Node; 187 max = node; 188 min_max_insert( &tree, node, min, max ); 189 190 node = &some_nodes[ 4 ].Node; 191 max = node; 192 min_max_insert( &tree, node, min, max ); 193 194 node = &some_nodes[ 5 ].Node; 195 max = node; 196 min_max_insert( &tree, node, min, max ); 197 198 node = &some_nodes[ 1 ].Node; 199 min_max_extract( &tree, node, min, max ); 200 201 node = &some_nodes[ 4 ].Node; 202 min_max_extract( &tree, node, min, max ); 203 204 node = &some_nodes[ 0 ].Node; 205 min = &some_nodes[ 2 ].Node; 206 min_max_extract( &tree, node, min, max ); 207 208 node = &some_nodes[ 5 ].Node; 209 max = &some_nodes[ 3 ].Node; 210 min_max_extract( &tree, node, min, max ); 211 212 node = &some_nodes[ 2 ].Node; 213 min = &some_nodes[ 3 ].Node; 214 min_max_extract( &tree, node, min, max ); 215 216 node = &some_nodes[ 3 ].Node; 217 min = NULL; 218 max = NULL; 219 min_max_extract( &tree, node, min, max ); 220 rtems_test_assert( rtems_rbtree_is_empty( &tree ) ); 221 } 222 223 rtems_task Init( rtems_task_argument ignored ) 129 224 { 130 225 rtems_rbtree_control rbtree1; … … 683 778 } 684 779 780 test_rbtree_min_max(); 781 685 782 TEST_END(); 686 783 rtems_test_exit(0); -
testsuites/sptests/sprbtree01/sprbtree01.scn
r9113798c r639117f 1 *** TEST OF RTEMS RBTREE API***1 *** BEGIN OF TEST SPRBTREE 1 *** 2 2 Init - Initialize rbtree empty 3 3 INIT - Verify rtems_rbtree_insert with two nodes … … 32 32 INIT - Verify rtems_rbtree_find in a duplicate tree 33 33 INIT - Removing 100 nodes 34 *** END OF RTEMS RBTREE API TEST *** 34 INIT - Verify min/max node updates 35 *** END OF TEST SPRBTREE 1 ***
Note: See TracChangeset
for help on using the changeset viewer.