Exemple #1
0
void test_contains_key_multiple() {
	hash_map_put(map, "key", "value");
	hash_map_put(map, "key2", "value2");

	TEST_ASSERT_TRUE(hash_map_contains_key(map, "key"));
	TEST_ASSERT_TRUE(hash_map_contains_key(map, "key2"));
}
Exemple #2
0
void test_collision() {
	// these two would collide and chaining should come into play
	hash_map_put(map, "1234567890", "9090");
	hash_map_put(map, "1234567809", "0909");

	TEST_ASSERT_EQUAL_STRING("9090", hash_map_get(map, "1234567890"));
	TEST_ASSERT_EQUAL_STRING("0909", hash_map_get(map, "1234567809"));
}
Exemple #3
0
void test_put_get() {
	hash_map_put(map, "key", "value");
	TEST_ASSERT_EQUAL_STRING("value", (char *) hash_map_get(map, "key"));

	hash_map_put(map, "key", "value2");
	TEST_ASSERT_EQUAL_STRING("value2", (char *) hash_map_get(map, "key"));

	hash_map_put(map, "key2", "value3");
	TEST_ASSERT_EQUAL_STRING("value3", (char *) hash_map_get(map, "key2"));
}
Exemple #4
0
char* dns_map_put_token(dns_map* map, const char* domain, char* token, int flag_update) {
    char* old_token = hash_map_put(map->domain_to_token, domain, strlen(domain), token);

    if (flag_update)
        write_domain_token_entry(map->h_domain2token, domain, token);

    // TODO: implement this as a dynamic list
    hash_map_put(map->tokens, (void*) token, strlen(token), (void*) 1);

    return old_token;
}
Exemple #5
0
uint8_t* dns_map_put_ipv4(dns_map* map, const char* token, uint8_t* ip, int flag_update) {
    uint8_t* old_ip = hash_map_put(map->token_to_ip, token, strlen(token), ip);

    if (flag_update)
        write_token_ip_entry(map->h_token2ip, token, ip);

    // TODO: implement this as a dynamic list
    hash_map_put(map->tokens, (void*) token, strlen(token), (void*) 1);

    return old_ip;
}
Exemple #6
0
void test_put_remove() {
	hash_map_put(map, "abcd", "the alphabet");
	hash_map_put(map, "1234", "some numbers");

	hash_map_remove(map, "abcd");
	hash_map_remove(map, "1234");

	TEST_ASSERT_NULL(hash_map_get(map, "abcd"));
	TEST_ASSERT_NULL(hash_map_get(map, "1234"));

	hash_map_put(map, "abcd", "try it again");
	TEST_ASSERT_EQUAL_STRING("try it again", hash_map_get(map, "abcd"));
}
Exemple #7
0
void test_clear() {
	hash_map_put(map, "key", "value");
	hash_map_put(map, "key2", "value2");
	hash_map_put(map, "key3", "value3");

	hash_map_clear(map);

	TEST_ASSERT_EQUAL_UINT(0, hash_map_size(map));

	TEST_ASSERT_NULL(hash_map_get(map, "key"));
	TEST_ASSERT_NULL(hash_map_get(map, "key2"));
	TEST_ASSERT_NULL(hash_map_get(map, "key3"));
}
Exemple #8
0
struct vm_object *vm_string_intern(struct vm_object *string)
{
	struct vm_reference *intern;
	struct vm_object *result;

	pthread_mutex_lock(&literals_mutex);

	if (hash_map_get(literals, string, (void **) &intern) == 0) {
		pthread_mutex_unlock(&literals_mutex);
		result = vm_reference_get(intern);
		return result;
	}

	result = string;
	intern = vm_reference_alloc(result, VM_REFERENCE_STRONG);
	if (!intern) {
		result = throw_oom_error();
		goto out;
	}

	if (hash_map_put(literals, string, intern))
		result = throw_oom_error();

 out:
	pthread_mutex_unlock(&literals_mutex);
	return result;
}
Exemple #9
0
struct vm_object *vm_string_intern(struct vm_object *string)
{
	struct vm_object *intern;

	pthread_rwlock_rdlock(&literals_rwlock);

	if (hash_map_get(literals, string, (void **) &intern) == 0) {
		pthread_rwlock_unlock(&literals_rwlock);
		return intern;
	}

	pthread_rwlock_unlock(&literals_rwlock);
	pthread_rwlock_wrlock(&literals_rwlock);

	/*
	 * XXX: we should notify GC that we store a reference to
	 * string here (both as a key and a value). It should be
	 * marked as a weak reference.
	 */
	intern = string;
	if (hash_map_put(literals, string, intern))
		intern = throw_oom_error();

	pthread_rwlock_unlock(&literals_rwlock);

	return intern;
}
Exemple #10
0
void test_size() {
	TEST_ASSERT_EQUAL_UINT(0, hash_map_size(map));

	hash_map_put(map, "key", "value");
	TEST_ASSERT_EQUAL_UINT(1, hash_map_size(map));

	hash_map_put(map, "key2", "value");
	TEST_ASSERT_EQUAL_UINT(2, hash_map_size(map));

	// if the same key was updated, size should not change
	hash_map_put(map, "key", "value2");
	TEST_ASSERT_EQUAL_UINT(2, hash_map_size(map));

	// if hashs collide, size should still work
	hash_map_put(map, "1234567890", "9090");
	hash_map_put(map, "1234567809", "0909");
	TEST_ASSERT_EQUAL_UINT(4, hash_map_size(map));

	hash_map_remove(map, "key");
	hash_map_remove(map, "key2");
	hash_map_remove(map, "1234567890");
	hash_map_remove(map, "1234567809");
	TEST_ASSERT_EQUAL_UINT(0, hash_map_size(map));
}
Exemple #11
0
void test_keys() {
	char *keys[] = { "key", "keys2", "1234567890", "1234567809" };
	char *values[] = { "value", "value2", "9090", "0909" };

	linked_list *keys_list = hash_map_keys(map);
	TEST_ASSERT_EQUAL_UINT(0, linked_list_size(keys_list));

	for (int i = 0; i < sizeof(keys) / sizeof(*keys); i++) {
		hash_map_put(map, keys[i], values[i]);
	}

	keys_list = hash_map_keys(map);
	TEST_ASSERT_EQUAL_UINT(4, linked_list_size(keys_list));

	linked_list_node *node = linked_list_head(keys_list);
	for (int i = 0; i < sizeof(keys) / sizeof(*keys); i++) {
		TEST_ASSERT_EQUAL_STRING(keys[i], node->data);
		node = node->next;
	}
}
Exemple #12
0
void test_contains_key_null_key() {
	hash_map_put(map, "null key", NULL);
	TEST_ASSERT_TRUE(hash_map_contains_key(map, "null key"));
}