/* dict - a generic dictionary, variation over hash table */
-/* Copyright (c) 2004-2021. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2004-2023. The SimGrid Team. All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
#include <cstdio>
#include <cstring>
-#include "catch.hpp"
+#include "src/3rd-party/catch.hpp"
#define STR(str) ((str) ? (str) : "(null)")
REQUIRE(xbt_dict_get_or_null(head, data) == nullptr);
}
-static void count(const_xbt_dict_t dict, int length)
-{
- INFO("Count elements (expecting " << length << ")");
- REQUIRE(xbt_dict_length(dict) == length); // Announced length differs
-
- xbt_dict_cursor_t cursor;
- char* key;
- void* data;
- int effective = 0;
- xbt_dict_foreach (dict, cursor, key, data)
- effective++;
-
- REQUIRE(effective == length); // Effective length differs
-}
-
static int countelems(const_xbt_dict_t head)
{
xbt_dict_cursor_t cursor;
return res;
}
+static void count(const_xbt_dict_t dict, int length)
+{
+ INFO("Count elements (expecting " << length << ")");
+ REQUIRE(xbt_dict_length(dict) == length); // Announced length differs
+ REQUIRE(countelems(dict) == length); // Effective length differs
+}
+
TEST_CASE("xbt::dict: dict data container", "dict")
{
SECTION("Basic usage: change, retrieve and traverse homogeneous dicts")
xbt_dict_t head = xbt_dict_new_homogeneous(&free);
INFO("Fill " << NB_ELM << " elements, with keys being the number of element");
for (int j = 0; j < NB_ELM; j++) {
- auto* key = static_cast<char*>(xbt_malloc(10));
+ auto* key = static_cast<char*>(xbt_malloc(12));
- snprintf(key, 10, "%d", j);
+ snprintf(key, 12, "%d", j);
xbt_dict_set(head, key, key);
}
INFO("There is " << countelems(head) << " elements");
INFO("Search my " << NB_ELM << " elements 20 times");
- auto* key = static_cast<char*>(xbt_malloc(10));
+ auto* key = static_cast<char*>(xbt_malloc(12));
for (int i = 0; i < 20; i++) {
for (int j = 0; j < NB_ELM; j++) {
- snprintf(key, 10, "%d", j);
+ snprintf(key, 12, "%d", j);
void* data = xbt_dict_get_or_null(head, key);
REQUIRE((data && not strcmp(key, (char*)data))); // with get, key != data
data = xbt_dict_get_or_null_ext(head, key, strlen(key));
xbt_free(key);
INFO("Remove my " << NB_ELM << " elements");
- key = (char*)xbt_malloc(10);
+ key = (char*)xbt_malloc(12);
for (int j = 0; j < NB_ELM; j++) {
- snprintf(key, 10, "%d", j);
+ snprintf(key, 12, "%d", j);
xbt_dict_remove_ext(head, key, strlen(key));
}
xbt_free(key);