コード例 #1
0
void test_hash_table_new_free(void)
{
	HashTable *hash_table;

	hash_table = hash_table_new(int_hash, int_equal);
	
	assert(hash_table != NULL);

	/* Add some values */

	hash_table_insert(hash_table, &value1, &value1);
	hash_table_insert(hash_table, &value2, &value2);
	hash_table_insert(hash_table, &value3, &value3);
	hash_table_insert(hash_table, &value4, &value4);

	/* Free the hash table */

	hash_table_free(hash_table);

	/* Test out of memory scenario */

	alloc_test_set_limit(0);
	hash_table = hash_table_new(int_hash, int_equal);
	assert(hash_table == NULL);
	assert(alloc_test_get_allocated() == 0);

	alloc_test_set_limit(1);
	hash_table = hash_table_new(int_hash, int_equal);
	assert(hash_table == NULL);
	assert(alloc_test_get_allocated() == 0);
}
コード例 #2
0
ファイル: test-trie.c プロジェクト: ColinCui/c-algorithms
void test_trie_insert(void)
{
	Trie *trie;
	unsigned int entries;
	size_t allocated;

	trie = generate_trie();

	/* Test insert of NULL value has no effect */

	entries = trie_num_entries(trie);
	assert(trie_insert(trie, "hello world", NULL) == 0);
	assert(trie_num_entries(trie) == entries);
	
	/* Test out of memory scenario */

	allocated = alloc_test_get_allocated();
	alloc_test_set_limit(0);
	assert(trie_insert(trie, "a", "test value") == 0);
	assert(trie_num_entries(trie) == entries);

	/* Test rollback */

	alloc_test_set_limit(5);
	assert(trie_insert(trie, "hello world", "test value") == 0);
	assert(alloc_test_get_allocated() == allocated);
	assert(trie_num_entries(trie) == entries);

	trie_free(trie);
}
コード例 #3
0
ファイル: test-set.c プロジェクト: dlove24/dl-calg
void test_set_intersection (void) {
  int numbers1[] = {1, 2, 3, 4, 5, 6, 7};
  int numbers2[] = {5, 6, 7, 8, 9, 10, 11};
  int result[] = {5, 6, 7};
  int i;
  Set* set1;
  Set* set2;
  Set* result_set;
  size_t allocated;

  /* Create the first set */

  set1 = set_new (int_hash, int_equal);

  for (i = 0; i < 7; ++i) {
    set_insert (set1, &numbers1[i]);
    }

  /* Create the second set */

  set2 = set_new (int_hash, int_equal);

  for (i = 0; i < 7; ++i) {
    set_insert (set2, &numbers2[i]);
    }

  /* Perform the intersection */

  result_set = set_intersection (set1, set2);

  assert (set_num_entries (result_set) == 3);

  for (i = 0; i < 3; ++i) {
    assert (set_query (result_set, &result[i]) != 0);
    }

  /* Test out of memory scenario */

  alloc_test_set_limit (0);
  assert (set_intersection (set1, set2) == NULL);

  /* Can allocate set, can't copy all values */

  alloc_test_set_limit (2 + 2);
  allocated = alloc_test_get_allocated();
  assert (set_intersection (set1, set2) == NULL);
  assert (alloc_test_get_allocated() == allocated);

  set_free (set1);
  set_free (set2);
  set_free (result_set);
  }
コード例 #4
0
ファイル: framework.c プロジェクト: shufengdong/c-algorithms
static void run_test(UnitTestFunction test) {
    /* Turn off any allocation limits that may have been set
     * by a previous test. */

    alloc_test_set_limit(-1);

    /* Run the test */

    test();

    /* Check that all memory was correctly freed back during
     * the test. */

    assert(alloc_test_get_allocated() == 0);
}
コード例 #5
0
ファイル: test-set.c プロジェクト: dlove24/dl-calg
void test_set_new_free (void) {
  Set* set;
  int i;
  int* value;

  set = set_new (int_hash, int_equal);

  set_register_free_function (set, free);

  assert (set != NULL);

  /* Fill the set with many values before freeing */

  for (i = 0; i < 10000; ++i) {
    value = (int*) malloc (sizeof (int));

    *value = i;

    set_insert (set, value);
    }

  /* Free the set */

  set_free (set);

  /* Test out of memory scenario */

  alloc_test_set_limit (0);
  set = set_new (int_hash, int_equal);
  assert (set == NULL);

  alloc_test_set_limit (1);
  set = set_new (int_hash, int_equal);
  assert (set == NULL);
  assert (alloc_test_get_allocated() == 0);
  }