+ mytest("Empty", "", "");
+ mytest("Basic test", "toto tutu", "totoXXXtutu");
+ mytest("Useless backslashes", "\\t\\o\\t\\o \\t\\u\\t\\u", "totoXXXtutu");
+ mytest("Protected space", "toto\\ tutu", "toto tutu");
+ mytest("Several spaces", "toto tutu", "totoXXXtutu");
+ mytest("LTriming", " toto tatu", "totoXXXtatu");
+ mytest("Triming", " toto tutu ", "totoXXXtutu");
+ mytest("Single quotes", "'toto tutu' tata", "toto tutuXXXtata");
+ mytest("Double quotes", "\"toto tutu\" tata", "toto tutuXXXtata");
+ mytest("Mixed quotes", "\"toto' 'tutu\" tata", "toto' 'tutuXXXtata");
+ mytest("Backslashed quotes", "\\'toto tutu\\' tata", "'totoXXXtutu'XXXtata");
+ mytest("Backslashed quotes + quotes", "'toto \\'tutu' tata", "toto 'tutuXXXtata");
+}
+
+#define mytest_str(name, input, separator, expected) \
+ xbt_test_add(name); \
+ d=xbt_str_split_str(input, separator); \
+ s=xbt_str_join(d,"XXX"); \
+ xbt_test_assert(!strcmp(s,expected),\
+ "Input (%s) leads to (%s) instead of (%s)", \
+ input,s,expected);\
+ free(s); \
+ xbt_dynar_free(&d);
+
+XBT_TEST_UNIT("xbt_str_split_str", test_split_str, "test the function xbt_str_split_str")
+{
+ xbt_dynar_t d;
+ char *s;
+
+ mytest_str("Empty string and separator", "", "", "");
+ mytest_str("Empty string", "", "##", "");
+ mytest_str("Empty separator", "toto", "", "toto");
+ mytest_str("String with no separator in it", "toto", "##", "toto");
+ mytest_str("Basic test", "toto##tutu", "##", "totoXXXtutu");
+}
+
+#define test_parse_error(function, name, variable, str) \
+ do { \
+ xbt_test_add(name); \
+ TRY { \
+ variable = function(str, "Parse error"); \
+ xbt_test_fail("The test '%s' did not detect the problem",name ); \
+ } CATCH(e) { \
+ if (e.category != arg_error) { \
+ xbt_test_exception(e); \
+ } else { \
+ xbt_ex_free(e); \
+ } \
+ } \
+ } while (0)
+#define test_parse_ok(function, name, variable, str, value) \
+ do { \
+ xbt_test_add(name); \
+ TRY { \
+ variable = function(str, "Parse error"); \
+ } CATCH(e) { \
+ xbt_test_exception(e); \
+ } \
+ xbt_test_assert(variable == value, "Fail to parse '%s'", str); \
+ } while (0)
+
+XBT_TEST_UNIT("xbt_str_parse", test_parse, "Test the parsing functions")
+{
+ xbt_ex_t e;
+ int rint = -9999;
+ test_parse_ok(xbt_str_parse_int, "Parse int", rint, "42", 42);
+ test_parse_ok(xbt_str_parse_int, "Parse 0 as an int", rint, "0", 0);
+ test_parse_ok(xbt_str_parse_int, "Parse -1 as an int", rint, "-1", -1);
+
+ test_parse_error(xbt_str_parse_int, "Parse int + noise", rint, "342 cruft");
+ test_parse_error(xbt_str_parse_int, "Parse NULL as an int", rint, NULL);
+ test_parse_error(xbt_str_parse_int, "Parse '' as an int", rint, "");
+ test_parse_error(xbt_str_parse_int, "Parse cruft as an int", rint, "cruft");
+
+ double rdouble = -9999;
+ test_parse_ok(xbt_str_parse_double, "Parse 42 as a double", rdouble, "42", 42);
+ test_parse_ok(xbt_str_parse_double, "Parse 42.5 as a double", rdouble, "42.5", 42.5);
+ test_parse_ok(xbt_str_parse_double, "Parse 0 as a double", rdouble, "0", 0);
+ test_parse_ok(xbt_str_parse_double, "Parse -1 as a double", rdouble, "-1", -1);
+
+ test_parse_error(xbt_str_parse_double, "Parse double + noise", rdouble, "342 cruft");
+ test_parse_error(xbt_str_parse_double, "Parse NULL as a double", rdouble, NULL);
+ test_parse_error(xbt_str_parse_double, "Parse '' as a double", rdouble, "");
+ test_parse_error(xbt_str_parse_double, "Parse cruft as a double", rdouble, "cruft");