OSDN Git Service

07d6a1f53c9ed124a5c3c985b470736b3426017e
[putex/putex.git] / src / texsourc / libavl / libavl / unitTests / avl_test05.c
1 /*
2  *   Libavl is a library to manage AVL structure to store and organize
3  *   everykind of data. You just need to implement function to compare,
4  *   to desallocate and to print your structure.
5  *
6  *       DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 
7  *                   Version 2, December 2004 
8  *
9  *   Copyright (C) 2013 Adrien Oliva <adrien.oliva@yapbreak.fr>
10  *
11  *   Everyone is permitted to copy and distribute verbatim or modified 
12  *   copies of this license document, and changing it is allowed as long 
13  *   as the name is changed. 
14  *
15  *           DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 
16  *   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 
17  *
18  *   0. You just DO WHAT THE FUCK YOU WANT TO.
19  */
20
21 #include <stdio.h>
22 #include <stdlib.h>
23 #include <time.h>
24
25 #include "../syslog.h"
26 #include "../avl.h"
27
28 static int data_cmp(void *a, void *b)
29 {
30     int aa = *((int *) a);
31     int bb = *((int *) b);
32
33     return aa - bb;
34 }
35
36 static void data_print(void *d)
37 {
38     printf("%p|%d", d, *((int *) d));
39 }
40
41 static void data_delete(void *d)
42 {
43     free(d);
44 }
45
46 #define MAX_ELEMENT 10000
47
48 char *delete_tests()
49 {
50     tree *first = NULL;
51     int data[MAX_ELEMENT];
52     unsigned int result;
53     unsigned int element_in_tree = 0;
54     int i = 0;
55
56     unsigned long rand_seed = (unsigned long) time(NULL);
57     ILOG("Random seed: %lu", rand_seed);
58     srand(rand_seed);
59
60     for (i = 0; i < MAX_ELEMENT; i++) {
61         data[i] = rand();
62     }
63
64
65     verif_tree(first);
66
67     // Try to allocate a new tree.
68     first = init_dictionnary(data_cmp, data_print, data_delete, NULL);
69     if (first == NULL) {
70         ELOG("Init dictionnary error");
71         return "Init dictionnary error";
72     }
73
74     // Add data
75     verif_tree(first);
76     for (i = 0; i < MAX_ELEMENT; i++) {
77         if (!is_present(first, &(data[i]))) {
78             element_in_tree++;
79         }
80         result = insert_elmt(first, &(data[i]), sizeof(int));
81         if (result != element_in_tree) {
82             ELOG("Wrong result of inserted element");
83             return "Wrong result of inserted element";
84         }
85         verif_tree(first);
86     }
87
88     // Delete data
89     for (i = 0; i < MAX_ELEMENT; i++) {
90         delete_node(first, &(data[i]));
91         if (is_present(first, &(data[i]))) {
92             ELOG("Data not deleted");
93             return "Data not deleted";
94         }
95         verif_tree(first);
96     }
97
98
99     // Try to delete it
100     delete_tree(first);
101
102
103
104     return NULL;
105 }