source: rtems/testsuites/sptests/sprbtree01/init.c @ 3c8eda7

4.115
Last change on this file since 3c8eda7 was 3c8eda7, checked in by Joel Sherrill <joel.sherrill@…>, on 05/12/12 at 16:01:26

sptests - Eliminate missing prototype warnings

  • Property mode set to 100644
File size: 19.4 KB
Line 
1/*
2 * Copyright (c) 2010 Gedare Bloom.
3 *
4 *  The license and distribution terms for this file may be
5 *  found in the file LICENSE in this distribution or at
6 *  http://www.rtems.com/license/LICENSE.
7 */
8
9#ifdef HAVE_CONFIG_H
10#include "config.h"
11#endif
12
13#include <tmacros.h>
14#include <rtems/rbtree.h>
15
16/* forward declarations to avoid warnings */
17rtems_task Init(rtems_task_argument argument);
18
19int numbers[20] = {
2052, 99, 0, 85, 43, 44, 10, 60, 50, 19, 8, 68, 48, 57, 17, 67, 90, 12, 77, 71};
21
22int numbers_sorted[20] = {
23  0, 8, 10, 12, 17, 19, 43, 44, 48, 50, 52, 57, 60, 67, 68, 71, 77, 85, 90, 99};
24
25typedef struct {
26  int              id;
27  int              key;
28  rtems_rbtree_node Node;
29} test_node;
30
31static int test_compare_function (
32  const rtems_rbtree_node *n1,
33  const rtems_rbtree_node *n2
34)
35{
36  int key1 = rtems_rbtree_container_of( n1, test_node, Node )->key;
37  int key2 = rtems_rbtree_container_of( n2, test_node, Node )->key;
38
39  return key1 - key2;
40}
41
42/*
43 * recursively checks tree. if the tree is built properly it should only
44 * be a depth of 7 function calls for 100 entries in the tree.
45 */
46static int rb_assert ( rtems_rbtree_node *root )
47{
48  int lh, rh;
49
50  if ( root == NULL )
51    return 1;
52  else {
53    rtems_rbtree_node *ln = rtems_rbtree_left(root);
54    rtems_rbtree_node *rn = rtems_rbtree_right(root);
55
56    /* Consecutive red links */
57    if ( root->color == RBT_RED ) {
58      if ((ln && ln->color == RBT_RED)  || (rn && rn->color == RBT_RED)) {
59        puts ( "Red violation" );
60        return -1;
61      }
62    }
63
64      lh = rb_assert ( ln );
65      rh = rb_assert ( rn );
66
67    /* Invalid binary search tree */
68    if ( ( ln != NULL && test_compare_function(ln, root) > 0 )
69        || ( rn != NULL && test_compare_function(rn, root) < 0 ) )
70    {
71      puts ( "Binary tree violation" );
72      return -1;
73    }
74
75    /* Black height mismatch */
76    if ( lh != -1 && rh != -1 && lh != rh ) {
77      puts ( "Black violation" );
78      return -1;
79    }
80
81    /* Only count black links */
82    if ( lh != -1 && rh != -1 )
83      return ( root->color == RBT_RED ) ? lh : lh + 1;
84    else
85      return -1;
86  }
87}
88
89
90
91rtems_task Init(
92    rtems_task_argument ignored
93    )
94{
95  rtems_rbtree_control  rbtree1;
96  rtems_rbtree_node    *p;
97  test_node            node1, node2;
98  test_node            node_array[100];
99  test_node            search_node;
100  int                  id;
101  int i;
102
103  puts( "\n\n*** TEST OF RTEMS RBTREE API ***" );
104
105  puts( "Init - Initialize rbtree empty" );
106  rtems_rbtree_initialize_empty( &rbtree1, &test_compare_function, true );
107
108  if ( !rtems_rbtree_is_unique( &rbtree1 ) )
109    puts( "INIT - FAILED IS UNIQUE CHECK" );
110  if ( rtems_rbtree_is_unique( NULL ) )
111    puts( "INIT - FAILED IS UNIQUE CHECK" );
112
113  /* verify that the rbtree insert work */
114  puts( "INIT - Verify rtems_rbtree_insert with two nodes" );
115  node1.id = 1;
116  node1.key = 1;
117  node2.id = 2;
118  node2.key = 2;
119  rtems_rbtree_insert( &rbtree1, &node1.Node );
120  rtems_rbtree_insert( &rbtree1, &node2.Node );
121
122  p = rtems_rbtree_insert( &rbtree1, NULL );
123  if (p != (void *)(-1))
124    puts( "INIT - FAILED NULL NODE INSERT" );
125
126  _RBTree_Rotate(NULL, RBT_LEFT);
127  i = (node1.Node.parent == &node2.Node);
128  _RBTree_Rotate( &node1.Node,
129                  !node1.Node.child[RBT_LEFT] ? RBT_RIGHT : RBT_LEFT
130                );
131  if ( (node1.Node.parent == &node2.Node) != i )
132    puts( "INIT - FAILED FALSE ROTATION" );
133
134  if (!rb_assert(rbtree1.root) )
135    puts( "INIT - FAILED TREE CHECK" );
136
137  for ( p = rtems_rbtree_get_min(&rbtree1), id = 1 ; p ;
138      p = rtems_rbtree_get_min(&rbtree1) , id++ ) {
139    test_node *t = rtems_rbtree_container_of(p,test_node,Node);
140    if ( id > 2 ) {
141      puts( "INIT - TOO MANY NODES ON RBTREE" );
142      rtems_test_exit(0);
143    }
144    if ( t->id != id ) {
145      puts( "INIT - ERROR ON RBTREE ID MISMATCH" );
146      rtems_test_exit(0);
147    }
148
149    if (!rb_assert(rbtree1.root) )
150      puts( "INIT - FAILED TREE CHECK" );
151  }
152  if (id < 2) {
153    puts("INIT - NOT ENOUGH NODES ON RBTREE");
154    rtems_test_exit(0);
155  }
156
157  puts("INIT - Verify rtems_rbtree_insert with the same value twice");
158  node2.key = node1.key;
159  rtems_rbtree_insert(&rbtree1, &node1.Node);
160  p = rtems_rbtree_insert(&rbtree1, &node2.Node);
161
162  if (p != &node1.Node)
163    puts( "INIT - FAILED DUPLICATE INSERT" );
164
165  for ( p = rtems_rbtree_get_min(&rbtree1), id = 1 ; p ;
166      p = rtems_rbtree_get_min(&rbtree1) , id++ ) {
167    test_node *t = rtems_rbtree_container_of(p,test_node,Node);
168    if ( id > 1 ) {
169      puts( "INIT - TOO MANY NODES ON RBTREE" );
170      rtems_test_exit(0);
171    }
172    if ( t->id != id ) {
173      puts( "INIT - ERROR ON RBTREE ID MISMATCH" );
174      rtems_test_exit(0);
175    }
176
177    if (!rb_assert(rbtree1.root) )
178      puts( "INIT - FAILED TREE CHECK" );
179  }
180  if (id < 1) {
181    puts("INIT - NOT ENOUGH NODES ON RBTREE");
182    rtems_test_exit(0);
183  }
184  node2.key = 2;
185
186  /* verify that the rbtree is empty */
187  puts( "INIT - Verify rtems_rbtree_is_empty" );
188  if(!rtems_rbtree_is_empty(&rbtree1)) {
189    puts( "INIT - TREE NOT EMPTY" );
190    rtems_test_exit(0);
191  }
192
193  puts( "INIT - Verify rtems_XXX on an empty tree" );
194  if(rtems_rbtree_get_min(&rbtree1)) {
195    puts("INIT - get_min on empty returned non-NULL");
196    rtems_test_exit(0);
197  }
198  if(rtems_rbtree_get_max(&rbtree1)) {
199    puts("INIT - get_max on empty returned non-NULL");
200    rtems_test_exit(0);
201  }
202  if(rtems_rbtree_peek_min(&rbtree1)) {
203    puts("INIT - peek_min on empty returned non-NULL");
204    rtems_test_exit(0);
205  }
206  if(rtems_rbtree_peek_max(&rbtree1)) {
207    puts("INIT - peek_max on empty returned non-NULL");
208    rtems_test_exit(0);
209  }
210
211
212  /* verify that the rbtree insert works after a tree is emptied */
213  puts( "INIT - Verify rtems_rbtree_insert after empty tree" );
214  node1.id = 2;
215  node1.key = 2;
216  node2.id = 1;
217  node2.key = 1;
218  rtems_rbtree_insert( &rbtree1, &node1.Node );
219  rtems_rbtree_insert( &rbtree1, &node2.Node );
220
221  puts( "INIT - Verify rtems_rbtree_peek_max/min, rtems_rbtree_extract" );
222  test_node *t1 = rtems_rbtree_container_of(rtems_rbtree_peek_max(&rbtree1),
223         test_node,Node);
224  test_node *t2 = rtems_rbtree_container_of(rtems_rbtree_peek_min(&rbtree1),
225         test_node,Node);
226  if (t1->key - t2->key != 1) {
227    puts( "INIT - Peek Min - Max failed" );
228    rtems_test_exit(0);
229  }
230  p = rtems_rbtree_peek_max(&rbtree1);
231  rtems_rbtree_extract(&rbtree1, p);
232  t1 = rtems_rbtree_container_of(p,test_node,Node);
233  if (t1->key != 2) {
234    puts( "INIT - rtems_rbtree_extract failed");
235    rtems_test_exit(0);
236  }
237  rtems_rbtree_insert(&rbtree1, p);
238
239  for ( p = rtems_rbtree_get_min(&rbtree1), id = 1 ; p ;
240      p = rtems_rbtree_get_min(&rbtree1) , id++ ) {
241    test_node *t = rtems_rbtree_container_of(p,test_node,Node);
242    if ( id > 2 ) {
243      puts( "INIT - TOO MANY NODES ON RBTREE" );
244      rtems_test_exit(0);
245    }
246    if ( t->id != id ) {
247      puts( "INIT - ERROR ON RBTREE ID MISMATCH" );
248      rtems_test_exit(0);
249    }
250  }
251 
252  puts( "INIT - Verify rtems_rbtree_insert with 100 nodes value [0,99]" );
253  for (i = 0; i < 100; i++) {
254    node_array[i].id = i;
255    node_array[i].key = i;
256    rtems_rbtree_insert( &rbtree1, &node_array[i].Node );
257
258    if (!rb_assert(rbtree1.root) )
259      puts( "INIT - FAILED TREE CHECK" );
260  }
261
262  puts( "INIT - Removing 100 nodes" );
263
264  for ( p = rtems_rbtree_get_min(&rbtree1), id = 0 ; p ;
265      p = rtems_rbtree_get_min(&rbtree1) , id++ ) {
266    test_node *t = rtems_rbtree_container_of(p,test_node,Node);
267    if ( id > 99 ) {
268      puts( "INIT - TOO MANY NODES ON RBTREE" );
269      rtems_test_exit(0);
270    }
271    if ( t->id != id ) {
272      puts( "INIT - ERROR ON RBTREE ID MISMATCH" );
273      rtems_test_exit(0);
274    }
275
276    if (!rb_assert(rbtree1.root) )
277      puts( "INIT - FAILED TREE CHECK" );
278  }
279 
280  if(!rtems_rbtree_is_empty(&rbtree1)) {
281    puts( "INIT - TREE NOT EMPTY" );
282    rtems_test_exit(0);
283  }
284
285  puts( "INIT - Verify rtems_rbtree_insert with 100 nodes value [99,0]" );
286  for (i = 0; i < 100; i++) {
287    node_array[i].id = 99-i;
288    node_array[i].key = 99-i;
289    rtems_rbtree_insert( &rbtree1, &node_array[i].Node );
290
291    if (!rb_assert(rbtree1.root) )
292      puts( "INIT - FAILED TREE CHECK" );
293  }
294
295  puts( "INIT - Removing 100 nodes" );
296
297  for ( p = rtems_rbtree_get_min(&rbtree1), id = 0 ; p ;
298      p = rtems_rbtree_get_min(&rbtree1) , id++ ) {
299    test_node *t = rtems_rbtree_container_of(p,test_node,Node);
300    if ( id > 99 ) {
301      puts( "INIT - TOO MANY NODES ON RBTREE" );
302      rtems_test_exit(0);
303    }
304    if ( t->id != id ) {
305      puts( "INIT - ERROR ON RBTREE ID MISMATCH" );
306      rtems_test_exit(0);
307    }
308
309    if (!rb_assert(rbtree1.root) )
310      puts( "INIT - FAILED TREE CHECK" );
311  }
312
313  if(!rtems_rbtree_is_empty(&rbtree1)) {
314    puts( "INIT - TREE NOT EMPTY" );
315    rtems_test_exit(0);
316  }
317
318  /* testing rbtree_extract by adding 100 nodes then removing the 20 with
319   * keys specified by the numbers array, then removing the rest */
320  puts( "INIT - Verify rtems_rbtree_extract with 100 nodes value [0,99]" );
321  for (i = 0; i < 100; i++) {
322    node_array[i].id = i;
323    node_array[i].key = i;
324    rtems_rbtree_insert( &rbtree1, &node_array[i].Node );
325
326    if (!rb_assert(rbtree1.root) )
327      puts( "INIT - FAILED TREE CHECK" );
328  }
329
330  puts( "INIT - Extracting 20 random nodes" );
331
332  for (i = 0; i < 20; i++) {
333    id = numbers[i];
334    rtems_rbtree_extract( &rbtree1, &node_array[id].Node );
335    if (!rb_assert(rbtree1.root) )
336      puts( "INIT - FAILED TREE CHECK" );
337  }
338
339  puts( "INIT - Removing 80 nodes" );
340
341  for ( p = rtems_rbtree_get_min(&rbtree1), id = 0, i = 0 ; p ;
342      p = rtems_rbtree_get_min(&rbtree1) , id++ ) {
343    test_node *t = rtems_rbtree_container_of(p, test_node, Node);
344
345    while ( id == numbers_sorted[i] ) {
346      /* skip if expected minimum (id) is in the set of extracted numbers */
347      id++;
348      i++;
349    }
350
351    if ( id > 99 ) {
352      puts( "INIT - TOO MANY NODES ON RBTREE" );
353      rtems_test_exit(0);
354    }
355
356    if ( t->id != id ) {
357      puts( "INIT - ERROR ON RBTREE ID MISMATCH" );
358      rtems_test_exit(0);
359    }
360
361    if (!rb_assert(rbtree1.root) )
362      puts( "INIT - FAILED TREE CHECK" );
363  }
364
365  if(!rtems_rbtree_is_empty(&rbtree1)) {
366    puts( "INIT - TREE NOT EMPTY" );
367    rtems_test_exit(0);
368  }
369
370  /* Additional rtems_rbtree_extract test which removes a node
371   * with two children while target node has a left child only. */
372  for ( i = 0; i < 7; i++ ) {
373    node_array[i].id = i;
374    node_array[i].key = i;
375  }
376  rtems_rbtree_insert( &rbtree1, &node_array[3].Node );
377  rtems_rbtree_insert( &rbtree1, &node_array[1].Node );
378  rtems_rbtree_insert( &rbtree1, &node_array[5].Node );
379  rtems_rbtree_insert( &rbtree1, &node_array[0].Node );
380  rtems_rbtree_insert( &rbtree1, &node_array[2].Node );
381  rtems_rbtree_insert( &rbtree1, &node_array[4].Node );
382  rtems_rbtree_insert( &rbtree1, &node_array[6].Node );
383  rtems_rbtree_extract( &rbtree1, &node_array[2].Node );
384  /* node_array[1] has now only a left child. */
385  if ( !node_array[1].Node.child[RBT_LEFT] ||
386        node_array[1].Node.child[RBT_RIGHT] )
387     puts( "INIT - LEFT CHILD ONLY NOT FOUND" );
388  rtems_rbtree_extract( &rbtree1, &node_array[3].Node );
389  while( (p = rtems_rbtree_get_max(&rbtree1)) );
390
391  puts( "INIT - Verify rtems_rbtree_get_max with 100 nodes value [99,0]" );
392  for (i = 0; i < 100; i++) {
393    node_array[i].id = 99-i;
394    node_array[i].key = 99-i;
395    rtems_rbtree_insert( &rbtree1, &node_array[i].Node );
396
397    if (!rb_assert(rbtree1.root) )
398      puts( "INIT - FAILED TREE CHECK" );
399  }
400
401  puts( "INIT - Removing 100 nodes" );
402
403  for ( p = rtems_rbtree_get_max(&rbtree1), id = 0 ; p ;
404      p = rtems_rbtree_get_max(&rbtree1) , id++ ) {
405    test_node *t = rtems_rbtree_container_of(p,test_node,Node);
406    if ( id > 99 ) {
407      puts( "INIT - TOO MANY NODES ON RBTREE" );
408      rtems_test_exit(0);
409    }
410    if ( t->id != 99-id ) {
411      puts( "INIT - ERROR ON RBTREE ID MISMATCH" );
412      rtems_test_exit(0);
413    }
414
415    if (!rb_assert(rbtree1.root) )
416      puts( "INIT - FAILED TREE CHECK" );
417  }
418
419  if(!rtems_rbtree_is_empty(&rbtree1)) {
420    puts( "INIT - TREE NOT EMPTY" );
421    rtems_test_exit(0);
422  }
423
424  puts( "INIT - Verify rtems_rbtree_get_max with 100 nodes value [0,99]" );
425  for (i = 0; i < 100; i++) {
426    node_array[i].id = i;
427    node_array[i].key = i;
428    rtems_rbtree_insert( &rbtree1, &node_array[i].Node );
429
430    if (!rb_assert(rbtree1.root) )
431      puts( "INIT - FAILED TREE CHECK" );
432  }
433
434  puts( "INIT - Verify rtems_rbtree_find" );
435  search_node.key = 30;
436  p = rtems_rbtree_find(&rbtree1, &search_node.Node);
437  if(rtems_rbtree_container_of(p,test_node,Node)->id != 30) {
438    puts ("INIT - ERROR ON RBTREE ID MISMATCH");
439    rtems_test_exit(0);
440  }
441
442  puts( "INIT - Verify rtems_rbtree_predecessor/successor");
443  p = rtems_rbtree_predecessor(p);
444  if(p && rtems_rbtree_container_of(p,test_node,Node)->id != 29) {
445    puts ("INIT - ERROR ON RBTREE ID MISMATCH");
446    rtems_test_exit(0);
447  }
448  p = rtems_rbtree_find(&rbtree1, &search_node.Node);
449  p = rtems_rbtree_successor(p);
450  if(p && rtems_rbtree_container_of(p,test_node,Node)->id != 31) {
451    puts ("INIT - ERROR ON RBTREE ID MISMATCH");
452    rtems_test_exit(0);
453  }
454
455  p = rtems_rbtree_find(&rbtree1, &search_node.Node);
456  puts( "INIT - Verify rtems_rbtree_find_header" );
457  if (rtems_rbtree_find_header(p) != &rbtree1) {
458    puts ("INIT - ERROR ON RBTREE HEADER MISMATCH");
459    rtems_test_exit(0);
460  }
461
462  if ( _RBTree_Sibling( NULL ) != NULL )
463    puts ( "INIT - ERROR ON RBTREE NULL SIBLING MISMATCH" );
464  if ( _RBTree_Sibling( rbtree1.root ) != NULL )
465    puts ( "INIT - ERROR ON RBTREE NULL SIBLING MISMATCH" );
466  if ( _RBTree_Grandparent( NULL ) != NULL )
467    puts ( "INIT - ERROR ON RBTREE NULL GRANDPARENT MISMATCH" );
468  if ( _RBTree_Is_red( NULL ) != 0 )
469    puts ( "INIT - ERROR ON RBTREE NULL IS RED MISMATCH" );
470  if ( _RBTree_Is_red( rbtree1.root ) != 0 )
471    puts ( "INIT - ERROR ON RBTREE NULL IS RED MISMATCH" );
472
473  puts( "INIT - Removing 100 nodes" );
474
475  for ( p = rtems_rbtree_get_max(&rbtree1), id = 99 ; p ;
476      p = rtems_rbtree_get_max(&rbtree1) , id-- ) {
477    test_node *t = rtems_rbtree_container_of(p,test_node,Node);
478    if ( id < 0 ) {
479      puts( "INIT - TOO MANY NODES ON RBTREE" );
480      rtems_test_exit(0);
481    }
482    if ( t->id != id ) {
483      puts( "INIT - ERROR ON RBTREE ID MISMATCH" );
484      rtems_test_exit(0);
485    }
486
487    if (!rb_assert(rbtree1.root) )
488      puts( "INIT - FAILED TREE CHECK" );
489  }
490
491  if(!rtems_rbtree_is_empty(&rbtree1)) {
492    puts( "INIT - TREE NOT EMPTY" );
493    rtems_test_exit(0);
494  }
495
496  if (rtems_rbtree_find_header(&node_array[0].Node) != NULL) {
497    puts ("INIT - ERROR ON RBTREE HEADER MISMATCH");
498    rtems_test_exit(0);
499  }
500  if (rtems_rbtree_find_header(NULL) != NULL) {
501    puts ("INIT - ERROR ON RBTREE HEADER MISMATCH");
502    rtems_test_exit(0);
503  }
504
505  puts("INIT - Insert 20 random numbers");
506  for (i = 0; i < 20; i++) {
507    node_array[i].id = numbers[i];
508    node_array[i].key = numbers[i];
509    rtems_rbtree_insert( &rbtree1, &node_array[i].Node );
510
511    if (!rb_assert(rbtree1.root) )
512      puts( "INIT - FAILED TREE CHECK" );
513  }
514
515  puts( "INIT - Removing 20 nodes" );
516
517  for ( p = rtems_rbtree_get_min(&rbtree1), id = 0 ; p ;
518      p = rtems_rbtree_get_min(&rbtree1) , id++ ) {
519    test_node *t = rtems_rbtree_container_of(p,test_node,Node);
520    if ( id > 19 ) {
521      puts( "INIT - TOO MANY NODES ON RBTREE" );
522      rtems_test_exit(0);
523    }
524    if ( t->id != numbers_sorted[id] ) {
525      puts( "INIT - ERROR ON RBTREE ID MISMATCH" );
526      rtems_test_exit(0);
527    }
528
529    if (!rb_assert(rbtree1.root) )
530      puts( "INIT - FAILED TREE CHECK" );
531  }
532
533  if(!rtems_rbtree_is_empty(&rbtree1)) {
534    puts( "INIT - TREE NOT EMPTY" );
535    rtems_test_exit(0);
536  }
537
538  puts( "INIT - Verify rtems_rbtree_initialize with 100 nodes value [0,99]" );
539  for (i = 0; i < 100; i++) {
540    node_array[i].id = i;
541    node_array[i].key = i;
542  }
543  rtems_rbtree_initialize( &rbtree1, &test_compare_function,
544                           &node_array[0].Node, 100,
545                           sizeof(test_node), true );
546
547  puts( "INIT - Removing 100 nodes" );
548
549  for ( p = rtems_rbtree_get_min(&rbtree1), id = 0 ; p ;
550      p = rtems_rbtree_get_min(&rbtree1) , id++ ) {
551    test_node *t = rtems_rbtree_container_of(p,test_node,Node);
552    if ( id > 99 ) {
553      puts( "INIT - TOO MANY NODES ON RBTREE" );
554      rtems_test_exit(0);
555    }
556
557    if ( t->id != id ) {
558      puts( "INIT - ERROR ON RBTREE ID MISMATCH" );
559      rtems_test_exit(0);
560    }
561
562    if (!rb_assert(rbtree1.root) )
563      puts( "INIT - FAILED TREE CHECK" );
564  }
565
566  if(!rtems_rbtree_is_empty(&rbtree1)) {
567    puts( "INIT - TREE NOT EMPTY" );
568    rtems_test_exit(0);
569  }
570
571  /* Initialize the tree for duplicate keys */
572  puts( "Init - Initialize duplicate rbtree empty" );
573  rtems_rbtree_initialize_empty( &rbtree1, &test_compare_function, false );
574
575  if ( rtems_rbtree_is_unique( &rbtree1 ) )
576    puts( "INIT - FAILED IS UNIQUE CHECK" );
577  if ( rtems_rbtree_is_unique( NULL ) )
578    puts( "INIT - FAILED IS UNIQUE CHECK" );
579
580  puts( "INIT - Verify rtems_rbtree_insert with 100 nodes value [0,99]" );
581  for (i = 0; i < 100; i++) {
582    node_array[i].id = i;
583    node_array[i].key = i%5;
584    rtems_rbtree_insert( &rbtree1, &node_array[i].Node );
585
586    if (!rb_assert(rbtree1.root) )
587      puts( "INIT - FAILED TREE CHECK" );
588  }
589
590  puts( "INIT - Verify rtems_rbtree_find in a duplicate tree" );
591  search_node.key = 2;
592  p = rtems_rbtree_find(&rbtree1, &search_node.Node);
593  if(rtems_rbtree_container_of(p,test_node,Node)->id != 2) {
594    puts ("INIT - ERROR ON RBTREE ID MISMATCH");
595    rtems_test_exit(0);
596  }
597
598  puts( "INIT - Removing 100 nodes" );
599
600  for ( p = rtems_rbtree_get_min(&rbtree1), id = 0 ; p ;
601      p = rtems_rbtree_get_min(&rbtree1) , id++ ) {
602    test_node *t = rtems_rbtree_container_of(p,test_node,Node);
603    if ( id > 99 ) {
604      puts( "INIT - TOO MANY NODES ON RBTREE" );
605      rtems_test_exit(0);
606    }
607    if ( t->id != ( ((id*5)%100) + (id/20) ) ) {
608      puts( "INIT - ERROR ON RBTREE ID MISMATCH" );
609      rtems_test_exit(0);
610    }
611
612    if (!rb_assert(rbtree1.root) )
613      puts( "INIT - FAILED TREE CHECK" );
614  }
615
616  if(!rtems_rbtree_is_empty(&rbtree1)) {
617    puts( "INIT - TREE NOT EMPTY" );
618    rtems_test_exit(0);
619  }
620
621  puts( "INIT - Verify rtems_rbtree_insert with 100 nodes value [99,0]" );
622  for (i = 0; i < 100; i++) {
623    node_array[i].id = 99-i;
624    node_array[i].key = (99-i)%5;
625    rtems_rbtree_insert( &rbtree1, &node_array[i].Node );
626
627    if (!rb_assert(rbtree1.root) )
628      puts( "INIT - FAILED TREE CHECK" );
629  }
630
631  puts( "INIT - Verify rtems_rbtree_find in a duplicate tree" );
632  search_node.key = 2;
633  p = rtems_rbtree_find(&rbtree1, &search_node.Node);
634  if(rtems_rbtree_container_of(p,test_node,Node)->id != 97) {
635    puts ("INIT - ERROR ON RBTREE ID MISMATCH");
636    rtems_test_exit(0);
637  }
638
639  puts( "INIT - Removing 100 nodes" );
640
641  for ( p = rtems_rbtree_get_min(&rbtree1), id = 0 ; p ;
642      p = rtems_rbtree_get_min(&rbtree1) , id++ ) {
643    test_node *t = rtems_rbtree_container_of(p,test_node,Node);
644    if ( id > 99 ) {
645      puts( "INIT - TOO MANY NODES ON RBTREE" );
646      rtems_test_exit(0);
647    }
648    if ( t->id != ( (((99-id)*5)%100) + (id/20) ) ) {
649      puts( "INIT - ERROR ON RBTREE ID MISMATCH" );
650      rtems_test_exit(0);
651    }
652
653    if (!rb_assert(rbtree1.root) )
654      puts( "INIT - FAILED TREE CHECK" );
655  }
656
657  if(!rtems_rbtree_is_empty(&rbtree1)) {
658    puts( "INIT - TREE NOT EMPTY" );
659    rtems_test_exit(0);
660  }
661
662  puts( "*** END OF RTEMS RBTREE API TEST ***" );
663  rtems_test_exit(0);
664}
665
666/* configuration information */
667
668#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
669#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
670
671#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
672#define CONFIGURE_MAXIMUM_TASKS 1
673
674#define CONFIGURE_INIT
675#include <rtems/confdefs.h>
676
677/* global variables */
Note: See TracBrowser for help on using the repository browser.