XBT_LOG_NEW_DEFAULT_SUBCATEGORY(xbt_cfg, xbt, "configuration support");
+xbt_cfg_t simgrid_config = NULL;
+
/* xbt_cfgelm_t: the typedef corresponding to a config variable.
Both data and DTD are mixed, but fixing it now would prevent me to ever defend my thesis. */
void xbt_cfg_register(xbt_cfg_t * cfg, const char *name, const char *desc, e_xbt_cfgelm_type_t type, int min,
int max, xbt_cfg_cb_t cb_set)
{
- xbt_cfgelm_t res;
-
if (*cfg == NULL)
*cfg = xbt_cfg_new();
xbt_assert(type >= xbt_cfgelm_int && type <= xbt_cfgelm_boolean,
"type of %s not valid (%d should be between %d and %d)",
name, (int)type, xbt_cfgelm_int, xbt_cfgelm_boolean);
- res = xbt_dict_get_or_null((xbt_dict_t) * cfg, name);
+
+ xbt_cfgelm_t res = xbt_dict_get_or_null((xbt_dict_t) * cfg, name);
xbt_assert(NULL == res, "Refusing to register the config element '%s' twice.", name);
res = xbt_new(s_xbt_cfgelm_t, 1);
xbt_dict_set((xbt_dict_t) * cfg, name, res, NULL);
}
-void xbt_cfg_register_alias(xbt_cfg_t * cfg, const char *newname, const char *oldname)
+void xbt_cfg_register_double(const char *name, const char *desc, double default_value,xbt_cfg_cb_t cb_set){
+ xbt_cfg_register(&simgrid_config,name,desc,xbt_cfgelm_double,1,1,cb_set);
+ xbt_cfg_setdefault_double(name, default_value);
+}
+void xbt_cfg_register_int(const char *name, const char *desc, int default_value,xbt_cfg_cb_t cb_set){
+ xbt_cfg_register(&simgrid_config,name,desc,xbt_cfgelm_int,1,1,cb_set);
+ xbt_cfg_setdefault_int(name, default_value);
+}
+void xbt_cfg_register_string(const char *name, const char *desc, const char *default_value, xbt_cfg_cb_t cb_set){
+ xbt_cfg_register(&simgrid_config,name,desc,xbt_cfgelm_string,1,1,cb_set);
+ xbt_cfg_setdefault_string(name, default_value);
+}
+void xbt_cfg_register_boolean(const char *name, const char *desc, const char*default_value,xbt_cfg_cb_t cb_set){
+ xbt_cfg_register(&simgrid_config,name,desc,xbt_cfgelm_boolean,1,1,cb_set);
+ xbt_cfg_setdefault_boolean(name, default_value);
+}
+
+void xbt_cfg_register_alias(const char *newname, const char *oldname)
{
- if (*cfg == NULL)
- *cfg = xbt_cfg_new();
+ if (simgrid_config == NULL)
+ simgrid_config = xbt_cfg_new();
- xbt_cfgelm_t res = xbt_dict_get_or_null((xbt_dict_t) * cfg, oldname);
+ xbt_cfgelm_t res = xbt_dict_get_or_null(simgrid_config, oldname);
xbt_assert(NULL == res, "Refusing to register the option '%s' twice.", oldname);
- res = xbt_dict_get_or_null((xbt_dict_t) * cfg, newname);
+ res = xbt_dict_get_or_null(simgrid_config, newname);
xbt_assert(res, "Cannot define an alias to the non-existing option '%s'.", newname);
res = xbt_new0(s_xbt_cfgelm_t, 1);
- XBT_DEBUG("Register cfg alias %s -> %s in set %p)",oldname,newname, *cfg);
+ XBT_DEBUG("Register cfg alias %s -> %s)",oldname,newname);
res->desc = bprintf("Deprecated alias for %s",newname);
res->type = xbt_cfgelm_alias;
res->isdefault = 1;
res->content = (xbt_dynar_t)newname;
- xbt_dict_set((xbt_dict_t) * cfg, oldname, res, NULL);
-}
-
-/** @brief Unregister an element from a config set.
- *
- * @param cfg the config set
- * @param name the name of the element to be freed
- *
- * Note that it removes both the description and the actual content.
- * Throws not_found when no such element exists.
- */
-void xbt_cfg_unregister(xbt_cfg_t cfg, const char *name)
-{
- XBT_DEBUG("Unregister elm '%s' from set %p", name, cfg);
- xbt_dict_remove((xbt_dict_t) cfg, name);
+ xbt_dict_set(simgrid_config, oldname, res, NULL);
}
/**
}
/** @brief Check that each variable have the right amount of values */
-void xbt_cfg_check(xbt_cfg_t cfg)
+void xbt_cfg_check(void)
{
xbt_dict_cursor_t cursor;
xbt_cfgelm_t variable;
char *name;
- int size;
-
- xbt_assert(cfg, "NULL config set.");
- XBT_DEBUG("Check cfg set %p", cfg);
- xbt_dict_foreach((xbt_dict_t) cfg, cursor, name, variable) {
+ xbt_dict_foreach((xbt_dict_t) simgrid_config, cursor, name, variable) {
if (variable->type == xbt_cfgelm_alias)
continue;
- size = xbt_dynar_length(variable->content);
+ int size = xbt_dynar_length(variable->content);
if (variable->min > size) {
xbt_dict_cursor_free(&cursor);
THROWF(mismatch_error, 0, "Config elem %s needs at least %d %s, but there is only %d values.",
switch (type) {
case xbt_cfgelm_string:
str = va_arg(pa, char *);
- xbt_cfg_set_string(cfg, name, str);
+ xbt_cfg_set_string(name, str);
break;
case xbt_cfgelm_int:
i = va_arg(pa, int);
- xbt_cfg_set_int(cfg, name, i);
+ xbt_cfg_set_int(name, i);
break;
case xbt_cfgelm_double:
d = va_arg(pa, double);
- xbt_cfg_set_double(cfg, name, d);
+ xbt_cfg_set_double(name, d);
break;
case xbt_cfgelm_boolean:
str = va_arg(pa, char *);
- xbt_cfg_set_boolean(cfg, name, str);
+ xbt_cfg_set_boolean(name, str);
break;
default:
xbt_die("Config element variable %s not valid (type=%d)", name, (int)type);
/** @brief Add values parsed from a string into a config set
*
- * @param cfg config set to fill
* @param options a string containing the content to add to the config set. This is a '\\t',' ' or '\\n' or ','
* separated list of variables. Each individual variable is like "[name]:[value]" where [name] is the name of an
* already registered variable, and [value] conforms to the data type under which this variable was registered.
*
* @todo This is a crude manual parser, it should be a proper lexer.
*/
-void xbt_cfg_set_parse(xbt_cfg_t cfg, const char *options) {
- char *optionlist_cpy;
- char *option, *name, *val;
- int len;
-
- XBT_IN();
+void xbt_cfg_set_parse(const char *options)
+{
if (!options || !strlen(options)) { /* nothing to do */
return;
}
- optionlist_cpy = xbt_strdup(options);
+ char *optionlist_cpy = xbt_strdup(options);
XBT_DEBUG("List to parse and set:'%s'", options);
- option = optionlist_cpy;
+ char *option = optionlist_cpy;
while (1) { /* breaks in the code */
if (!option)
break;
- name = option;
- len = strlen(name);
+ char *name = option;
+ int len = strlen(name);
XBT_DEBUG("Still to parse and set: '%s'. len=%d; option-name=%ld", name, len, (long) (option - name));
/* Pass the value */
if (!strlen(name))
break;
- val = strchr(name, ':');
- if (!val) {
- /* don't free(optionlist_cpy) here, 'name' points inside it */
- xbt_die("Option '%s' badly formatted. Should be of the form 'name:value'", name);
- }
+ char *val = strchr(name, ':');
+ xbt_assert(val, "Option '%s' badly formatted. Should be of the form 'name:value'", name);
+ /* don't free(optionlist_cpy) if the assert fails, 'name' points inside it */
*(val++) = '\0';
if (strncmp(name, "contexts/", strlen("contexts/")) && strncmp(name, "path", strlen("path")))
XBT_INFO("Configuration change: Set '%s' to '%s'", name, val);
TRY {
- xbt_cfg_set_as_string(cfg,name,val);
+ xbt_cfg_set_as_string(name,val);
} CATCH_ANONYMOUS {
free(optionlist_cpy);
RETHROW;
/** @brief Set the value of a variable, using the string representation of that value
*
- * @param cfg config set to modify
* @param key name of the variable to modify
* @param value string representation of the value to set
*
* @return the first char after the parsed value in val
*/
-void *xbt_cfg_set_as_string(xbt_cfg_t cfg, const char *key, const char *value) {
+void *xbt_cfg_set_as_string(const char *key, const char *value) {
xbt_ex_t e;
char *ret;
TRY {
while (variable == NULL) {
- variable = xbt_dict_get((xbt_dict_t) cfg, key);
+ variable = xbt_dict_get((xbt_dict_t) simgrid_config, key);
if (variable->type == xbt_cfgelm_alias) {
const char *newname = (const char*)variable->content;
XBT_INFO("Note: configuration '%s' is deprecated. Please use '%s' instead.", key, newname);
switch (variable->type) {
case xbt_cfgelm_string:
- xbt_cfg_set_string(cfg, key, value); /* throws */
+ xbt_cfg_set_string(key, value); /* throws */
break;
case xbt_cfgelm_int:
i = strtol(value, &ret, 0);
if (ret == value) {
xbt_die("Value of option %s not valid. Should be an integer", key);
}
- xbt_cfg_set_int(cfg, key, i); /* throws */
+ xbt_cfg_set_int(key, i); /* throws */
break;
case xbt_cfgelm_double:
d = strtod(value, &ret);
if (ret == value) {
xbt_die("Value of option %s not valid. Should be a double", key);
}
- xbt_cfg_set_double(cfg, key, d); /* throws */
+ xbt_cfg_set_double(key, d); /* throws */
break;
case xbt_cfgelm_boolean:
- xbt_cfg_set_boolean(cfg, key, value); /* throws */
+ xbt_cfg_set_boolean(key, value); /* throws */
ret = (char *)value + strlen(value);
break;
default:
* This is useful to change the default value of a variable while allowing
* users to override it with command line arguments
*/
-void xbt_cfg_setdefault_int(xbt_cfg_t cfg, const char *name, int val)
+void xbt_cfg_setdefault_int(const char *name, int val)
{
- xbt_cfgelm_t variable = xbt_cfgelm_get(cfg, name, xbt_cfgelm_int);
+ xbt_cfgelm_t variable = xbt_cfgelm_get(simgrid_config, name, xbt_cfgelm_int);
if (variable->isdefault){
- xbt_cfg_set_int(cfg, name, val);
+ xbt_cfg_set_int(name, val);
variable->isdefault = 1;
} else
XBT_DEBUG("Do not override configuration variable '%s' with value '%d' because it was already set.", name, val);
* This is useful to change the default value of a variable while allowing
* users to override it with command line arguments
*/
-void xbt_cfg_setdefault_double(xbt_cfg_t cfg, const char *name, double val)
+void xbt_cfg_setdefault_double(const char *name, double val)
{
- xbt_cfgelm_t variable = xbt_cfgelm_get(cfg, name, xbt_cfgelm_double);
+ xbt_cfgelm_t variable = xbt_cfgelm_get(simgrid_config, name, xbt_cfgelm_double);
if (variable->isdefault) {
- xbt_cfg_set_double(cfg, name, val);
+ xbt_cfg_set_double(name, val);
variable->isdefault = 1;
} else
XBT_DEBUG("Do not override configuration variable '%s' with value '%f' because it was already set.", name, val);
* This is useful to change the default value of a variable while allowing
* users to override it with command line arguments
*/
-void xbt_cfg_setdefault_string(xbt_cfg_t cfg, const char *name, const char *val)
+void xbt_cfg_setdefault_string(const char *name, const char *val)
{
- xbt_cfgelm_t variable = xbt_cfgelm_get(cfg, name, xbt_cfgelm_string);
+ xbt_cfgelm_t variable = xbt_cfgelm_get(simgrid_config, name, xbt_cfgelm_string);
if (variable->isdefault){
- xbt_cfg_set_string(cfg, name, val);
+ xbt_cfg_set_string(name, val);
variable->isdefault = 1;
} else
XBT_DEBUG("Do not override configuration variable '%s' with value '%s' because it was already set.", name, val);
* This is useful to change the default value of a variable while allowing
* users to override it with command line arguments
*/
-void xbt_cfg_setdefault_boolean(xbt_cfg_t cfg, const char *name, const char *val)
+void xbt_cfg_setdefault_boolean(const char *name, const char *val)
{
- xbt_cfgelm_t variable = xbt_cfgelm_get(cfg, name, xbt_cfgelm_boolean);
+ xbt_cfgelm_t variable = xbt_cfgelm_get(simgrid_config, name, xbt_cfgelm_boolean);
if (variable->isdefault){
- xbt_cfg_set_boolean(cfg, name, val);
+ xbt_cfg_set_boolean(name, val);
variable->isdefault = 1;
}
else
* @param name the name of the variable
* @param val the value of the variable
*/
-void xbt_cfg_set_int(xbt_cfg_t cfg, const char *name, int val)
+void xbt_cfg_set_int(const char *name, int val)
{
- XBT_VERB("Configuration setting: %s=%d", name, val);
- xbt_cfgelm_t variable = xbt_cfgelm_get(cfg, name, xbt_cfgelm_int);
+ xbt_cfgelm_t variable = xbt_cfgelm_get(simgrid_config, name, xbt_cfgelm_int);
if (variable->max == 1) {
xbt_dynar_set(variable->content, 0, &val);
* @param name the name of the variable
* @param val the doule to set
*/
-void xbt_cfg_set_double(xbt_cfg_t cfg, const char *name, double val)
+void xbt_cfg_set_double(const char *name, double val)
{
- XBT_VERB("Configuration setting: %s=%f", name, val);
- xbt_cfgelm_t variable = xbt_cfgelm_get(cfg, name, xbt_cfgelm_double);
+ xbt_cfgelm_t variable = xbt_cfgelm_get(simgrid_config, name, xbt_cfgelm_double);
if (variable->max == 1) {
xbt_dynar_set(variable->content, 0, &val);
* @param val the value to be added
*
*/
-void xbt_cfg_set_string(xbt_cfg_t cfg, const char *name, const char *val)
+void xbt_cfg_set_string(const char *name, const char *val)
{
char *newval = xbt_strdup(val);
-
- XBT_VERB("Configuration setting: %s=%s", name, val);
- xbt_cfgelm_t variable = xbt_cfgelm_get(cfg, name, xbt_cfgelm_string);
-
- XBT_DEBUG("Variable: %d to %d %s (=%d) @%p",
- variable->min, variable->max, xbt_cfgelm_type_name[variable->type], (int)variable->type, variable);
+ xbt_cfgelm_t variable = xbt_cfgelm_get(simgrid_config, name, xbt_cfgelm_string);
if (variable->max == 1) {
if (!xbt_dynar_is_empty(variable->content)) {
/** @brief Set or add a boolean value to \a name within \a cfg
*
- * @param cfg the config set
* @param name the name of the variable
* @param val the value of the variable
*/
-void xbt_cfg_set_boolean(xbt_cfg_t cfg, const char *name, const char *val)
+void xbt_cfg_set_boolean(const char *name, const char *val)
{
int i, bval;
-
- XBT_VERB("Configuration setting: %s=%s", name, val);
- xbt_cfgelm_t variable = xbt_cfgelm_get(cfg, name, xbt_cfgelm_boolean);
+ xbt_cfgelm_t variable = xbt_cfgelm_get(simgrid_config, name, xbt_cfgelm_boolean);
for (i = 0; xbt_cfgelm_boolean_values[i].true_val != NULL; i++) {
if (strcmp(val, xbt_cfgelm_boolean_values[i].true_val) == 0){
variable->isdefault = 0;
}
-/* ---- [ Removing ] ---- */
-/** @brief Remove the provided \e val integer value from a variable
- *
- * @param cfg the config set
- * @param name the name of the variable
- * @param val the value to be removed
- */
-void xbt_cfg_rm_int(xbt_cfg_t cfg, const char *name, int val)
-{
- unsigned int cpt;
- int seen;
-
- xbt_cfgelm_t variable = xbt_cfgelm_get(cfg, name, xbt_cfgelm_int);
-
- if (xbt_dynar_length(variable->content) == variable->min)
- THROWF(mismatch_error, 0,
- "Cannot remove value %d from the config element %s since it's already at its minimal size (=%d)",
- val, name, variable->min);
-
- xbt_dynar_foreach(variable->content, cpt, seen) {
- if (seen == val) {
- xbt_dynar_cursor_rm(variable->content, &cpt);
- return;
- }
- }
- THROWF(not_found_error, 0, "Can't remove the value %d of config element %s: value not found.", val, name);
-}
-
-/** @brief Remove the provided \e val double value from a variable
- *
- * @param cfg the config set
- * @param name the name of the variable
- * @param val the value to be removed
- */
-void xbt_cfg_rm_double(xbt_cfg_t cfg, const char *name, double val)
-{
- unsigned int cpt;
- double seen;
-
- xbt_cfgelm_t variable = xbt_cfgelm_get(cfg, name, xbt_cfgelm_double);
-
- if (xbt_dynar_length(variable->content) == variable->min)
- THROWF(mismatch_error, 0,
- "Cannot remove value %f from the config element %s since it's already at its minimal size (=%d)",
- val, name, variable->min);
-
- xbt_dynar_foreach(variable->content, cpt, seen) {
- if (seen == val) {
- xbt_dynar_cursor_rm(variable->content, &cpt);
- return;
- }
- }
-
- THROWF(not_found_error, 0,"Can't remove the value %f of config element %s: value not found.", val, name);
-}
-
-/** @brief Remove the provided \e val string value from a variable
- *
- * @param cfg the config set
- * @param name the name of the variable
- * @param val the value of the string which will be removed
- */
-void xbt_cfg_rm_string(xbt_cfg_t cfg, const char *name, const char *val)
-{
- unsigned int cpt;
- char *seen;
- xbt_cfgelm_t variable = xbt_cfgelm_get(cfg, name, xbt_cfgelm_string);
-
- if (xbt_dynar_length(variable->content) == variable->min)
- THROWF(mismatch_error, 0,
- "Cannot remove value %s from the config element %s since it's already at its minimal size (=%d)",
- name, val, variable->min);
-
- xbt_dynar_foreach(variable->content, cpt, seen) {
- if (!strcpy(seen, val)) {
- xbt_dynar_cursor_rm(variable->content, &cpt);
- return;
- }
- }
-
- THROWF(not_found_error, 0, "Can't remove the value %s of config element %s: value not found.", val, name);
-}
-
-/** @brief Remove the provided \e val boolean value from a variable
- *
- * @param cfg the config set
- * @param name the name of the variable
- * @param val the value to be removed
- */
-void xbt_cfg_rm_boolean(xbt_cfg_t cfg, const char *name, int val)
-{
- unsigned int cpt;
- int seen;
- xbt_cfgelm_t variable = xbt_cfgelm_get(cfg, name, xbt_cfgelm_boolean);
-
- if (xbt_dynar_length(variable->content) == variable->min)
- THROWF(mismatch_error, 0,
- "Cannot remove value %d from the config element %s since it's already at its minimal size (=%d)",
- val, name, variable->min);
-
- xbt_dynar_foreach(variable->content, cpt, seen) {
- if (seen == val) {
- xbt_dynar_cursor_rm(variable->content, &cpt);
- return;
- }
- }
-
- THROWF(not_found_error, 0, "Can't remove the value %d of config element %s: value not found.", val, name);
-}
-
-/** @brief Remove the \e pos th value from the provided variable */
-void xbt_cfg_rm_at(xbt_cfg_t cfg, const char *name, int pos)
-{
- xbt_cfgelm_t variable = xbt_cfgelm_get(cfg, name, xbt_cfgelm_any);
-
- if (xbt_dynar_length(variable->content) == variable->min)
- THROWF(mismatch_error, 0,
- "Cannot remove %dth value from the config element %s since it's already at its minimal size (=%d)",
- pos, name, variable->min);
-
- xbt_dynar_remove_at(variable->content, pos, NULL);
-}
-
-/** @brief Remove all the values from a variable
- *
- * @param cfg the config set
- * @param name the name of the variable
- */
-void xbt_cfg_empty(xbt_cfg_t cfg, const char *name)
-{
- xbt_cfgelm_t variable = NULL;
- xbt_ex_t e;
-
- TRY {
- variable = xbt_dict_get((xbt_dict_t) cfg, name);
- } CATCH(e) {
- if (e.category != not_found_error)
- RETHROW;
-
- xbt_ex_free(e);
- THROWF(not_found_error, 0, "Can't empty '%s' since this option does not exist", name);
- }
-
- if (variable)
- xbt_dynar_reset(variable->content);
-}
/* Say if the value is the default value */
-int xbt_cfg_is_default_value(xbt_cfg_t cfg, const char *name)
+int xbt_cfg_is_default_value(const char *name)
{
- xbt_cfgelm_t variable = xbt_cfgelm_get(cfg, name, xbt_cfgelm_any);
+ xbt_cfgelm_t variable = xbt_cfgelm_get(simgrid_config, name, xbt_cfgelm_any);
return variable->isdefault;
}
/*----[ Getting ]---------------------------------------------------------*/
/** @brief Retrieve an integer value of a variable (get a warning if not uniq)
*
- * @param cfg the config set
* @param name the name of the variable
*
* Returns the first value from the config set under the given name.
* If there is more than one value, it will issue a warning. Consider using xbt_cfg_get_dynar() instead.
*/
-int xbt_cfg_get_int(xbt_cfg_t cfg, const char *name)
+int xbt_cfg_get_int(const char *name)
{
- xbt_cfgelm_t variable = xbt_cfgelm_get(cfg, name, xbt_cfgelm_int);
+ xbt_cfgelm_t variable = xbt_cfgelm_get(simgrid_config, name, xbt_cfgelm_int);
if (xbt_dynar_length(variable->content) > 1) {
XBT_WARN("You asked for the first value of the config element '%s', but there is %lu values",
* Returns the first value from the config set under the given name.
* If there is more than one value, it will issue a warning. Consider using xbt_cfg_get_dynar() instead.
*/
-double xbt_cfg_get_double(xbt_cfg_t cfg, const char *name)
+double xbt_cfg_get_double(const char *name)
{
- xbt_cfgelm_t variable = xbt_cfgelm_get(cfg, name, xbt_cfgelm_double);
+ xbt_cfgelm_t variable = xbt_cfgelm_get(simgrid_config, name, xbt_cfgelm_double);
if (xbt_dynar_length(variable->content) > 1) {
XBT_WARN ("You asked for the first value of the config element '%s', but there is %lu values\n",
*
* \warning the returned value is the actual content of the config set
*/
-char *xbt_cfg_get_string(xbt_cfg_t cfg, const char *name)
+char *xbt_cfg_get_string(const char *name)
{
- xbt_cfgelm_t variable = xbt_cfgelm_get(cfg, name, xbt_cfgelm_string);
+ xbt_cfgelm_t variable = xbt_cfgelm_get(simgrid_config, name, xbt_cfgelm_string);
if (xbt_dynar_length(variable->content) > 1) {
XBT_WARN("You asked for the first value of the config element '%s', but there is %lu values\n",
* Returns the first value from the config set under the given name.
* If there is more than one value, it will issue a warning. Consider using xbt_cfg_get_dynar() instead.
*/
-int xbt_cfg_get_boolean(xbt_cfg_t cfg, const char *name)
+int xbt_cfg_get_boolean(const char *name)
{
- xbt_cfgelm_t variable = xbt_cfgelm_get(cfg, name, xbt_cfgelm_boolean);
+ xbt_cfgelm_t variable = xbt_cfgelm_get(simgrid_config, name, xbt_cfgelm_boolean);
if (xbt_dynar_length(variable->content) > 1) {
XBT_WARN("You asked for the first value of the config element '%s', but there is %lu values",
*
* \warning the returned value is the actual content of the config set
*/
-xbt_dynar_t xbt_cfg_get_dynar(xbt_cfg_t cfg, const char *name)
+xbt_dynar_t xbt_cfg_get_dynar(const char *name)
{
xbt_cfgelm_t variable = NULL;
xbt_ex_t e;
TRY {
- variable = xbt_dict_get((xbt_dict_t) cfg, name);
+ variable = xbt_dict_get((xbt_dict_t) simgrid_config, name);
} CATCH(e) {
if (e.category == not_found_error) {
xbt_ex_free(e);
return set;
} /* end_of_make_set */
+extern xbt_cfg_t simgrid_config;
+
XBT_TEST_UNIT("memuse", test_config_memuse, "Alloc and free a config set")
{
- xbt_cfg_t set = make_set();
+ simgrid_config = make_set();
xbt_test_add("Alloc and free a config set");
- xbt_cfg_set_parse(set, "peername:veloce user:mquinson\nuser:oaumage\tuser:alegrand");
- xbt_cfg_free(&set);
- xbt_cfg_free(&set);
+ xbt_cfg_set_parse("peername:veloce user:mquinson\nuser:oaumage\tuser:alegrand");
+ xbt_cfg_free(&simgrid_config);
}
XBT_TEST_UNIT("validation", test_config_validation, "Validation tests")
{
- xbt_cfg_t set = set = make_set();
xbt_ex_t e;
+ simgrid_config = make_set();
xbt_test_add("Having too few elements for speed");
- xbt_cfg_set_parse(set, "peername:veloce user:mquinson\nuser:oaumage\tuser:alegrand");
+ xbt_cfg_set_parse("peername:veloce user:mquinson\nuser:oaumage\tuser:alegrand");
TRY {
- xbt_cfg_check(set);
+ xbt_cfg_check();
} CATCH(e) {
if (e.category != mismatch_error || strncmp(e.msg, "Config elem speed needs", strlen("Config elem speed needs")))
xbt_test_fail("Got an exception. msg=%s", e.msg);
xbt_ex_free(e);
}
- xbt_cfg_free(&set);
- xbt_cfg_free(&set);
xbt_test_add("Having too much values of 'speed'");
- set = make_set();
- xbt_cfg_set_parse(set, "peername:toto:42 user:alegrand");
+ xbt_cfg_set_parse("peername:toto:42 user:alegrand");
TRY {
- xbt_cfg_set_parse(set, "speed:42 speed:24 speed:34");
+ xbt_cfg_set_parse("speed:42 speed:24 speed:34");
} CATCH(e) {
if (e.category != mismatch_error ||
strncmp(e.msg, "Cannot add value 34 to the config elem speed", strlen("Config elem speed needs")))
xbt_test_fail("Got an exception. msg=%s", e.msg);
xbt_ex_free(e);
}
- xbt_cfg_check(set);
- xbt_cfg_free(&set);
- xbt_cfg_free(&set);
+ xbt_cfg_check();
+ xbt_cfg_free(&simgrid_config);
}
XBT_TEST_UNIT("use", test_config_use, "Data retrieving tests")
{
+ simgrid_config = make_set();
xbt_test_add("Get a single value");
{
/* get_single_value */
int ival;
- xbt_cfg_t myset = make_set();
- xbt_cfg_set_parse(myset, "peername:toto:42 speed:42");
- ival = xbt_cfg_get_int(myset, "speed");
+ xbt_cfg_set_parse("peername:toto:42 speed:42");
+ ival = xbt_cfg_get_int("speed");
if (ival != 42)
xbt_test_fail("Speed value = %d, I expected 42", ival);
- xbt_cfg_free(&myset);
}
xbt_test_add("Get multiple values");
{
/* get_multiple_value */
xbt_dynar_t dyn;
- xbt_cfg_t myset = make_set();
- xbt_cfg_set_parse(myset, "peername:veloce user:foo\nuser:bar\tuser:toto");
- xbt_cfg_set_parse(myset, "speed:42");
- xbt_cfg_check(myset);
- dyn = xbt_cfg_get_dynar(myset, "user");
+ xbt_cfg_set_parse("peername:veloce user:foo\nuser:bar\tuser:toto");
+ xbt_cfg_set_parse("speed:42");
+ xbt_cfg_check();
+ dyn = xbt_cfg_get_dynar("user");
if (xbt_dynar_length(dyn) != 3)
xbt_test_fail("Dynar length = %lu, I expected 3", xbt_dynar_length(dyn));
if (strcmp(xbt_dynar_get_as(dyn, 2, char *), "toto"))
xbt_test_fail("Dynar[2] = %s, I expected toto", xbt_dynar_get_as(dyn, 2, char *));
- xbt_cfg_free(&myset);
}
xbt_test_add("Access to a non-existant entry");
{
- /* non-existant_entry */
- xbt_cfg_t myset = make_set();
xbt_ex_t e;
TRY {
- xbt_cfg_set_parse(myset, "color:blue");
+ xbt_cfg_set_parse("color:blue");
} CATCH(e) {
if (e.category != not_found_error)
xbt_test_exception(e);
xbt_ex_free(e);
}
- xbt_cfg_free(&myset);
}
+ xbt_cfg_free(&simgrid_config);
}
#endif /* SIMGRID_TEST */