forked from vieter-v/libvieter
				
			test(tree): add random insert test
							parent
							
								
									a6ed89d8cd
								
							
						
					
					
						commit
						d9402ced54
					
				| 
						 | 
					@ -0,0 +1,59 @@
 | 
				
			||||||
 | 
					#include "acutest.h"
 | 
				
			||||||
 | 
					#include "vieter_tree_internal.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define TEST_SIZE(tree, size) \
 | 
				
			||||||
 | 
					    TEST_CHECK(vieter_tree_size(tree) == size); \
 | 
				
			||||||
 | 
					    TEST_MSG("Size: %zu", vieter_tree_size(tree))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int uint64_t_compare(const void *a, const void *b) {
 | 
				
			||||||
 | 
					    if ((*(uint64_t *)a) < (*(uint64_t *)b)) {
 | 
				
			||||||
 | 
					        return -1;
 | 
				
			||||||
 | 
					    } else if ((*(uint64_t *)a) > (*(uint64_t *)b)) {
 | 
				
			||||||
 | 
					        return 1;
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        return 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void test_insert_random() {
 | 
				
			||||||
 | 
					    const uint64_t n = 1000;
 | 
				
			||||||
 | 
					    srand(0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    vieter_tree *tree = vieter_tree_init();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    uint64_t *numbers = malloc(n * sizeof(uint64_t));
 | 
				
			||||||
 | 
					    uint64_t num;
 | 
				
			||||||
 | 
					    void *out = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (uint64_t i = 0; i < n; i++) {
 | 
				
			||||||
 | 
					        num = rand();
 | 
				
			||||||
 | 
					        vieter_tree_insert(tree, num, (void *)num);
 | 
				
			||||||
 | 
					        TEST_SIZE(tree, i + 1);
 | 
				
			||||||
 | 
					        TEST_CHECK(vieter_tree_validate(tree));
 | 
				
			||||||
 | 
					        TEST_CHECK(vieter_tree_search(&out, tree, num) == vieter_tree_ok);
 | 
				
			||||||
 | 
					        TEST_CHECK(out == (void *)num);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        out = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        numbers[i] = num;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    qsort(numbers, n, sizeof(uint64_t), uint64_t_compare);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    vieter_tree_iterator *iter = vieter_tree_iterator_from(tree);
 | 
				
			||||||
 | 
					    out = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (uint64_t i = 0; i < n; i++) {
 | 
				
			||||||
 | 
					        TEST_CHECK(vieter_tree_iterator_next(&out, iter) == vieter_tree_ok);
 | 
				
			||||||
 | 
					        TEST_CHECK(out == (void *)numbers[i]);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    free(numbers);
 | 
				
			||||||
 | 
					    vieter_tree_iterator_free(&iter);
 | 
				
			||||||
 | 
					    vieter_tree_free(tree);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TEST_LIST = {
 | 
				
			||||||
 | 
					    {"tree insert random", test_insert_random},
 | 
				
			||||||
 | 
					    {NULL, NULL}
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
		Loading…
	
		Reference in New Issue