Rev 2416 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 2416 | Rev 2421 | ||
|---|---|---|---|
| Line 55... | Line 55... | ||
| 55 | 55 | ||
| 56 | static int exttree_test_height(extavltree_node_t *node,bool timeout); |
56 | static int exttree_test_height(extavltree_node_t *node,bool timeout); |
| 57 | static extavltree_node_t *exttree_test_parents(extavltree_node_t *node); |
57 | static extavltree_node_t *exttree_test_parents(extavltree_node_t *node); |
| 58 | static void print_exttree_structure_flat (extavltree_node_t *node, int level); |
58 | static void print_exttree_structure_flat (extavltree_node_t *node, int level); |
| 59 | static bool exttree_test_link(int node_count); |
59 | static bool exttree_test_link(int node_count); |
| 60 | static void print_exttree_link(int node_count); |
60 | static void print_exttree_link(void); |
| 61 | static extavltree_node_t *alloc_extavltree_node(void); |
61 | static extavltree_node_t *alloc_extavltree_node(void); |
| 62 | 62 | ||
| 63 | 63 | ||
| 64 | 64 | ||
| 65 | //vraci hloubku stromu |
65 | //vraci hloubku stromu |
| Line 122... | Line 122... | ||
| 122 | if ((node->next != &(exttree.head)) && (node->key > node->next->key)) { |
122 | if ((node->next != &(exttree.head)) && (node->key > node->next->key)) { |
| 123 | printf("\nList is not sorted (forward direction) at key: %d\n",node->key); |
123 | printf("\nList is not sorted (forward direction) at key: %d\n",node->key); |
| 124 | test_link = false; |
124 | test_link = false; |
| 125 | } |
125 | } |
| 126 | } |
126 | } |
| 127 | if (node_count && i != node_count) { |
127 | if (i != node_count) { |
| 128 | printf("\nBad node count!!! Counted: %d, right number: %d", i, node_count); |
128 | printf("\nBad node count!!! Counted: %d, right number: %d", i, node_count); |
| 129 | test_link = false; |
129 | test_link = false; |
| 130 | } |
130 | } |
| 131 | for (i = 0,node = exttree.head.prev; node != &(exttree.head); i++,node = node->prev) { |
131 | for (i = 0,node = exttree.head.prev; node != &(exttree.head); i++,node = node->prev) { |
| 132 | if ((node->prev != &(exttree.head)) && (node->key < node->prev->key)) { |
132 | if ((node->prev != &(exttree.head)) && (node->key < node->prev->key)) { |
| 133 | printf("\nList is not sorted (backward direction) at key: %d\n",node->key); |
133 | printf("\nList is not sorted (backward direction) at key: %d\n",node->key); |
| 134 | test_link = false; |
134 | test_link = false; |
| 135 | } |
135 | } |
| 136 | } |
136 | } |
| 137 | if (node_count && i != node_count) { |
137 | if (i != node_count) { |
| 138 | printf("\nBad node count!!! Counted: %d, right number: %d", i, node_count); |
138 | printf("\nBad node count!!! Counted: %d, right number: %d", i, node_count); |
| 139 | test_link = false; |
139 | test_link = false; |
| 140 | } |
140 | } |
| 141 | return test_link; |
141 | return test_link; |
| 142 | } |
142 | } |
| Line 178... | Line 178... | ||
| 178 | } |
178 | } |
| 179 | 179 | ||
| 180 | /** Prints list of nodes |
180 | /** Prints list of nodes |
| 181 | * |
181 | * |
| 182 | */ |
182 | */ |
| 183 | static void print_exttree_link(int node_count) |
183 | static void print_exttree_link(void) |
| 184 | { |
184 | { |
| 185 | extavltree_node_t *node; |
185 | extavltree_node_t *node; |
| 186 | printf("\n"); |
186 | printf("\n"); |
| 187 | for (node = exttree.head.next; node != &(exttree.head); node = node->next) { |
187 | for (node = exttree.head.next; node != &(exttree.head); node = node->next) { |
| 188 | printf(" %d,",node->key); |
188 | printf(" %d,",node->key); |
| Line 258... | Line 258... | ||
| 258 | /* |
258 | /* |
| 259 | * Initialize tree before using. |
259 | * Initialize tree before using. |
| 260 | */ |
260 | */ |
| 261 | extavltree_create(tree); |
261 | extavltree_create(tree); |
| 262 | 262 | ||
| 263 | if (!quiet) printf("\n\nInserting %d nodes ...\n", node_count); |
263 | if (!quiet) printf("\nInserting %d nodes ...\n", node_count); |
| 264 | 264 | ||
| 265 | for (i = 0; i < node_count; i++) { |
265 | for (i = 0; i < node_count; i++) { |
| 266 | newnode = alloc_extavltree_node(); |
266 | newnode = alloc_extavltree_node(); |
| 267 | //if (!quiet) printf("[[[%d]]]\n",newnode->key); |
267 | //if (!quiet) printf("[[[%d]]]\n",newnode->key); |
| 268 | 268 | ||
| 269 | extavltree_insert(tree, newnode); |
269 | extavltree_insert(tree, newnode); |
| 270 | if (!quiet) { |
270 | if (!quiet) { |
| 271 | if (!exttree_test_link(i+1)) { |
271 | if (!exttree_test_link(i+1)) { |
| 272 | print_exttree_link(i+1); |
272 | print_exttree_link(); |
| 273 | printf("\n"); |
273 | printf("\n"); |
| 274 | } |
274 | } |
| 275 | exttree_test_parents(tree->root); |
275 | exttree_test_parents(tree->root); |
| 276 | exttree_test_height(tree->root,1); |
276 | exttree_test_height(tree->root,1); |
| 277 | } |
277 | } |
| Line 308... | Line 308... | ||
| 308 | //aktualni pocet tiku: |
308 | //aktualni pocet tiku: |
| 309 | if (!quiet) printf("Deleting tree...\n"); |
309 | if (!quiet) printf("Deleting tree...\n"); |
| 310 | 310 | ||
| 311 | switch(node_position) { |
311 | switch(node_position) { |
| 312 | case 0: //mazani vzdy korene |
312 | case 0: //mazani vzdy korene |
| 313 | if (!quiet) printf("\n\nDelete root nodes\n"); |
313 | if (!quiet) printf("\nDelete root nodes\n"); |
| 314 | i = node_count; |
314 | i = node_count - 1; |
| 315 | while(tree->root != NULL) { |
315 | while(tree->root != NULL) { |
| 316 | delnode = tree->root; |
316 | delnode = tree->root; |
| 317 | extavltree_delete(tree,delnode); |
317 | extavltree_delete(tree,delnode); |
| 318 | if (!quiet) { |
318 | if (!quiet) { |
| 319 | if (!exttree_test_link(i)) { |
319 | if (!exttree_test_link(i)) { |
| 320 | print_exttree_link(i); |
320 | print_exttree_link(); |
| 321 | printf("\n"); |
321 | printf("\n"); |
| 322 | } |
322 | } |
| 323 | exttree_test_parents(tree->root); |
323 | exttree_test_parents(tree->root); |
| 324 | exttree_test_height(tree->root,1); |
324 | exttree_test_height(tree->root,1); |
| 325 | } |
325 | } |
| 326 | i--; |
326 | i--; |
| 327 | } |
327 | } |
| 328 | 328 | ||
| 329 | break; |
329 | break; |
| 330 | case 1: |
330 | case 1: |
| 331 | if (!quiet) printf("\n\nDelete nodes according to their time of origin\n"); |
331 | if (!quiet) printf("\nDelete nodes according to their time of origin\n"); |
| 332 | for (i = 0; i < node_count; i++) { |
332 | for (i = 0; i < node_count; i++) { |
| 333 | extavltree_delete(tree,&(extavltree_nodes[i])); |
333 | extavltree_delete(tree,&(extavltree_nodes[i])); |
| 334 | if (!quiet) { |
334 | if (!quiet) { |
| 335 | if (!exttree_test_link(i+1)) { |
335 | if (!exttree_test_link(node_count-i-1)) { |
| 336 | print_exttree_link(i+1); |
336 | print_exttree_link(); |
| 337 | printf("\n"); |
337 | printf("\n"); |
| 338 | } |
338 | } |
| 339 | exttree_test_parents(tree->root); |
339 | exttree_test_parents(tree->root); |
| 340 | exttree_test_height(tree->root,1); |
340 | exttree_test_height(tree->root,1); |
| 341 | } |
341 | } |
| Line 347... | Line 347... | ||
| 347 | if (!quiet) printf("Deletion was finished\n"); |
347 | if (!quiet) printf("Deletion was finished\n"); |
| 348 | } |
348 | } |
| 349 | 349 | ||
| 350 | static void timeout_exttree(extavltree_t *tree, int node_count, bool quiet) |
350 | static void timeout_exttree(extavltree_t *tree, int node_count, bool quiet) |
| 351 | { |
351 | { |
| 352 | int i = node_count; |
352 | int i = node_count - 1; |
| 353 | 353 | ||
| 354 | if (!quiet) printf("Timeout tree ...\n"); |
354 | if (!quiet) printf("\nTimeout tree ...\n"); |
| 355 | 355 | ||
| 356 | while(tree->head.next != &(tree->head)) { |
356 | while(tree->head.next != &(tree->head)) { |
| 357 | extavltree_delete_min(tree); |
357 | extavltree_delete_min(tree); |
| 358 | if (!quiet) { |
358 | if (!quiet) { |
| 359 | if (!exttree_test_link(i)) { |
359 | if (!exttree_test_link(i)) { |
| 360 | print_exttree_link(i); |
360 | print_exttree_link(); |
| 361 | printf("\n"); |
361 | printf("\n"); |
| 362 | } |
362 | } |
| 363 | exttree_test_parents(tree->root); |
363 | exttree_test_parents(tree->root); |
| 364 | exttree_test_height(tree->root,1); |
364 | exttree_test_height(tree->root,1); |
| 365 | } |
365 | } |
| 366 | i--; |
366 | i--; |
| 367 | } |
367 | } |
| 368 | 368 | ||
| 369 | if (!quiet && (i != 0)) printf("Bad node count. Some nodes have been lost!"); |
369 | if (!quiet && (i != -1)) printf("Bad node count. Some nodes have been lost!\n"); |
| 370 | 370 | ||
| 371 | if (!quiet) printf("Timeout tree finished\n"); |
371 | if (!quiet) printf("Timeout tree finished\n"); |
| 372 | } |
372 | } |
| 373 | 373 | ||
| 374 | /* |
374 | /* |