int test_addAfterRemove() { //Initialize char *testData = (char *)malloc(sizeof(char) * 100); char *testKey = (char *)malloc(sizeof(char) * 100); char *testData2 = (char *)malloc(sizeof(char) * 100); char *testKey2 = (char *)malloc(sizeof(char) * 100); int testKeyLength; int addResult1, addResult2; int testResult = TEST_UNFINISHED; trie *newTrie = trie_newTrie(100, 256); trie_key *key = (trie_key *)malloc(sizeof(trie_key)); trie_key *key2 = (trie_key *)malloc(sizeof(trie_key)); trie_remove_result *result; trie_get_result *retrievalAttempt; trie_get_result *retrievalAttempt2; strcpy(testKey, ADD_NODE_TEST_KEY_1); testKeyLength = strlen(testKey) + 1; strcpy(testData, ADD_NODE_NONDUPLICATE_TEST_DATA); key->key = testKey; key->length = testKeyLength; strcpy(testKey2, ADD_NODE_TEST_KEY_1); testKeyLength = strlen(testKey) + 1; strcpy(testData2, REMOVE_NODE_SECOND_ADD_TEST_DATA); key2->key = testKey2; key2->length = testKeyLength; //Test addResult1 = trie_addNode(newTrie, testData, key); if(addResult1 == TRIE_ADD_STATUS_FALURE) { printf("test_addAfterRemove failed on initial add!\n"); testResult = TEST_FAILED; } result = trie_removeNode(newTrie, key); if(result->status != TRIE_REMOVE_STATUS_SUCCESS) { printf("test_addAfterRemove failed remove!\n"); testResult = TEST_FAILED; } retrievalAttempt = trie_getKey(newTrie, key); if(retrievalAttempt->status != TRIE_GET_STATUS_DNE) { printf("test_addAfterRemove failed by finding removed node!\n"); printf("test_addAfterRemove found data at node to be %s\n", (char *)retrievalAttempt->result); printf("test_addAfterRemove return status for getKey is %d\n", retrievalAttempt->status); testResult = TEST_FAILED; } else { testResult = TEST_SUCCESS; } addResult2 = trie_addNode(newTrie, testData2, key2); if(addResult2 == TRIE_ADD_STATUS_FALURE) { printf("test_addAfterRemove failed on second add by general failure!\n"); testResult = TEST_FAILED; } if(addResult2 == TRIE_ADD_STATUS_DUPLICATE) { printf("test_addAfterRemove failed on second add by finding a duplicate!\n"); testResult = TEST_FAILED; } retrievalAttempt2 = trie_getKey(newTrie, key2); if(retrievalAttempt2->status != TRIE_GET_STATUS_SUCCESS) { printf("test_addAfterRemove failed on getting after second add!\n"); testResult = TEST_FAILED; } if(strcmp((char *)retrievalAttempt2->result, REMOVE_NODE_SECOND_ADD_TEST_DATA) != 0) { printf("test_addAfterRemove failed because second add test data was not equal to expected value!\n"); testResult = TEST_FAILED; } if(testResult != TEST_FAILED) { testResult = TEST_SUCCESS; } //Cleanup free(retrievalAttempt); free(retrievalAttempt2); free(key->key); free(key); free(key2->key); free(key2); trie_destroy(newTrie); free(result); return testResult; }
void trie_destroy_bynode (trienode_t *node) { trie_destroy (node->trie); }
void Trie_dealloc(Trie* self) { trie_destroy(self->trie); self->ob_type->tp_free((PyObject*)self); }