void test_art_insert_verylong(void) { art_tree t; int res = art_tree_init(&t); unsigned char key1[300] = { 16, 0, 0, 0, 7, 10, 0, 0, 0, 2, 17, 10, 0, 0, 0, 120, 10, 0, 0, 0, 120, 10, 0, 0, 0, 216, 10, 0, 0, 0, 202, 10, 0, 0, 0, 194, 10, 0, 0, 0, 224, 10, 0, 0, 0, 230, 10, 0, 0, 0, 210, 10, 0, 0, 0, 206, 10, 0, 0, 0, 208, 10, 0, 0, 0, 232, 10, 0, 0, 0, 124, 10, 0, 0, 0, 124, 2, 16, 0, 0, 0, 2, 12, 185, 89, 44, 213, 251, 173, 202, 211, 95, 185, 89, 110, 118, 251, 173, 202, 199, 101, 0, 8, 18, 182, 92, 236, 147, 171, 101, 150, 195, 112, 185, 218, 108, 246, 139, 164, 234, 195, 58, 177, 0, 8, 16, 0, 0, 0, 2, 12, 185, 89, 44, 213, 251, 173, 202, 211, 95, 185, 89, 110, 118, 251, 173, 202, 199, 101, 0, 8, 18, 180, 93, 46, 151, 9, 212, 190, 95, 102, 178, 217, 44, 178, 235, 29, 190, 218, 8, 16, 0, 0, 0, 2, 12, 185, 89, 44, 213, 251, 173, 202, 211, 95, 185, 89, 110, 118, 251, 173, 202, 199, 101, 0, 8, 18, 180, 93, 46, 151, 9, 212, 190, 95, 102, 183, 219, 229, 214, 59, 125, 182, 71, 108, 180, 220, 238, 150, 91, 117, 150, 201, 84, 183, 128, 8, 16, 0, 0, 0, 2, 12, 185, 89, 44, 213, 251, 173, 202, 211, 95, 185, 89, 110, 118, 251, 173, 202, 199, 101, 0, 8, 18, 180, 93, 46, 151, 9, 212, 190, 95, 108, 176, 217, 47, 50, 219, 61, 134, 207, 97, 151, 88, 237, 246, 208, 8, 18, 255, 255, 255, 219, 191, 198, 134, 5, 223, 212, 72, 44, 208, 250, 180, 14, 1, 0, 0, 8, '\0'}; unsigned char key2[303] = { 16, 0, 0, 0, 7, 10, 0, 0, 0, 2, 17, 10, 0, 0, 0, 120, 10, 0, 0, 0, 120, 10, 0, 0, 0, 216, 10, 0, 0, 0, 202, 10, 0, 0, 0, 194, 10, 0, 0, 0, 224, 10, 0, 0, 0, 230, 10, 0, 0, 0, 210, 10, 0, 0, 0, 206, 10, 0, 0, 0, 208, 10, 0, 0, 0, 232, 10, 0, 0, 0, 124, 10, 0, 0, 0, 124, 2, 16, 0, 0, 0, 2, 12, 185, 89, 44, 213, 251, 173, 202, 211, 95, 185, 89, 110, 118, 251, 173, 202, 199, 101, 0, 8, 18, 182, 92, 236, 147, 171, 101, 150, 195, 112, 185, 218, 108, 246, 139, 164, 234, 195, 58, 177, 0, 8, 16, 0, 0, 0, 2, 12, 185, 89, 44, 213, 251, 173, 202, 211, 95, 185, 89, 110, 118, 251, 173, 202, 199, 101, 0, 8, 18, 180, 93, 46, 151, 9, 212, 190, 95, 102, 178, 217, 44, 178, 235, 29, 190, 218, 8, 16, 0, 0, 0, 2, 12, 185, 89, 44, 213, 251, 173, 202, 211, 95, 185, 89, 110, 118, 251, 173, 202, 199, 101, 0, 8, 18, 180, 93, 46, 151, 9, 212, 190, 95, 102, 183, 219, 229, 214, 59, 125, 182, 71, 108, 180, 220, 238, 150, 91, 117, 150, 201, 84, 183, 128, 8, 16, 0, 0, 0, 3, 12, 185, 89, 44, 213, 251, 133, 178, 195, 105, 183, 87, 237, 150, 155, 165, 150, 229, 97, 182, 0, 8, 18, 161, 91, 239, 50, 10, 61, 150, 223, 114, 179, 217, 64, 8, 12, 186, 219, 172, 150, 91, 53, 166, 221, 101, 178, 0, 8, 18, 255, 255, 255, 219, 191, 198, 134, 5, 208, 212, 72, 44, 208, 250, 180, 14, 1, 0, 0, 8, '\0'}; fail_unless(res == 0); fail_unless(NULL == art_insert(&t, key1, 299, (void *)key1)); fail_unless(NULL == art_insert(&t, key2, 302, (void *)key2)); art_insert(&t, key2, 302, (void *)key2); fail_unless(art_size(&t) == 2); res = art_tree_destroy(&t); fail_unless(res == 0); }
END_TEST START_TEST(test_art_insert_copy_delete) { art_tree t; int res = init_art_tree(&t); fail_unless(res == 0); int len; char buf[512]; FILE *f = fopen("tests/words.txt", "r"); uintptr_t line = 1, nlines; while (fgets(buf, sizeof buf, f)) { len = strlen(buf); buf[len-1] = '\0'; fail_unless(NULL == art_insert(&t, buf, len, (void*)line)); line++; } nlines = line - 1; // Create a new tree art_tree t2; fail_unless(art_copy(&t2, &t) == 0); // Destroy the original res = destroy_art_tree(&t); fail_unless(res == 0); // Seek back to the start fseek(f, 0, SEEK_SET); // Search for each line line = 1; while (fgets(buf, sizeof buf, f)) { len = strlen(buf); buf[len-1] = '\0'; // Search first, ensure all entries still // visible uintptr_t val = (uintptr_t)art_search(&t2, buf, len); fail_unless(line == val, "Line: %d Val: %" PRIuPTR " Str: %s\n", line, val, buf); // Delete, should get lineno back val = (uintptr_t)art_delete(&t2, buf, len); fail_unless(line == val, "Line: %d Val: %" PRIuPTR " Str: %s\n", line, val, buf); // Check the size fail_unless(art_size(&t2) == nlines - line); line++; } res = destroy_art_tree(&t2); fail_unless(res == 0); }
void test_art_insert_delete(void) { art_tree t; int res = art_tree_init(&t); int len; char buf[512]; FILE *f = fopen("thirdparty/libart/tests/words.txt", "r"); uintptr_t line = 1, nlines; fail_unless(res == 0); while (fgets(buf, sizeof buf, f)) { len = (int)strlen(buf); buf[len - 1] = '\0'; if (art_insert(&t, (unsigned char *)buf, len, (void *)line)) { fail("art_insert didn't return NULL"); } line++; } nlines = line - 1; // Seek back to the start fseek(f, 0, SEEK_SET); // Search for each line line = 1; while (fgets(buf, sizeof buf, f)) { uintptr_t val; len = (int)strlen(buf); buf[len - 1] = '\0'; // Search first, ensure all entries still // visible val = (uintptr_t)art_search(&t, (unsigned char *)buf, len); if (line != val) { fail("Line: %d Val: %" PRIuPTR " Str: %s", line, val, buf); } // Delete, should get lineno back val = (uintptr_t)art_delete(&t, (unsigned char *)buf, len); if (line != val) { fail("Line: %d Val: %" PRIuPTR " Str: %s", line, val, buf); } // Check the size if (art_size(&t) != nlines - line) { fail("bad size after delete"); } line++; } // Check the minimum and maximum fail_unless(!art_minimum(&t)); fail_unless(!art_maximum(&t)); res = art_tree_destroy(&t); fail_unless(res == 0); }
void test_art_init_and_destroy(void) { art_tree t; int res = art_tree_init(&t); fail_unless(res == 0); fail_unless(art_size(&t) == 0); res = art_tree_destroy(&t); fail_unless(res == 0); }
void test_art_prefix(void) { art_tree t; void *v; art_tree_init(&t); fail_unless(art_insert(&t, (const unsigned char*)"food", 4, "food") == NULL); fail_unless(art_insert(&t, (const unsigned char*)"foo", 3, "foo") == NULL); diag("size is now %d", art_size(&t)); fail_unless(art_size(&t) == 2); fail_unless((v = art_search(&t, (const unsigned char*)"food", 4)) != NULL); diag("food lookup yields %s", v); fail_unless(v && strcmp((char*)v, "food") == 0); art_iter(&t, dump_iter, NULL); fail_unless((v = art_search(&t, (const unsigned char*)"foo", 3)) != NULL); diag("foo lookup yields %s", v); fail_unless(v && strcmp((char*)v, "foo") == 0); art_tree_destroy(&t); }
static ERL_NIF_TERM elibart_size(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) { art_tree* t; // extract arguments atr_tree if (argc != 1) return enif_make_badarg(env); if(!enif_get_resource(env, argv[0], elibart_RESOURCE, (void**) &t)) return enif_make_badarg(env); uint64_t size = art_size(t); return enif_make_int64(env, size); }
END_TEST START_TEST(test_art_insert) { art_tree t; int res = art_tree_init(&t); fail_unless(res == 0); int len; char buf[512]; FILE *f = fopen("tests/words.txt", "r"); uintptr_t line = 1; while (fgets(buf, sizeof buf, f)) { len = strlen(buf); buf[len-1] = '\0'; fail_unless(NULL == art_insert(&t, (unsigned char*)buf, len, (void*)line)); fail_unless(art_size(&t) == line); line++; } res = art_tree_destroy(&t); fail_unless(res == 0); }
void test_art_insert(void) { art_tree t; int res = art_tree_init(&t); int len; char buf[512]; FILE *f = fopen("thirdparty/libart/tests/words.txt", "r"); uintptr_t line = 1; fail_unless(res == 0); while (fgets(buf, sizeof buf, f)) { len = (int)strlen(buf); buf[len - 1] = '\0'; if (art_insert(&t, (unsigned char *)buf, len, (void *)line)) { fail("insert should have returned NULL but did not"); } if (art_size(&t) != line) { fail("art_size didn't match current line no"); } line++; } res = art_tree_destroy(&t); fail_unless(res == 0); }