예제 #1
0
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;
}
예제 #2
0
파일: trie.c 프로젝트: NachE/glusterCopy
void
trie_destroy_bynode (trienode_t *node)
{
        trie_destroy (node->trie);
}
예제 #3
0
파일: trie.c 프로젝트: pombredanne/ppm-2
void Trie_dealloc(Trie* self)
{
    trie_destroy(self->trie);
    self->ob_type->tp_free((PyObject*)self);
}