X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/87083f8748661d07686bdffb58a0b2de99da44d7..2738598c9f876339ee6f8b3fc217984b7b837539:/src/xbt/xbt_str_test.cpp diff --git a/src/xbt/xbt_str_test.cpp b/src/xbt/xbt_str_test.cpp index d6eee1e43a..48fe51b93f 100644 --- a/src/xbt/xbt_str_test.cpp +++ b/src/xbt/xbt_str_test.cpp @@ -10,75 +10,77 @@ #include "simgrid/Exception.hpp" #include "catch.hpp" +#include +#include -#define mytest(name, input, expected) \ - INFO(name); \ - a = static_cast(xbt_dynar_to_array(xbt_str_split_quoted(input))); \ - s = xbt_str_join_array(a, "XXX"); \ - REQUIRE(not strcmp(s, expected)); \ - xbt_free(s); \ - for (int i = 0; a[i] != nullptr; i++) \ - xbt_free(a[i]); \ - xbt_free(a); +namespace { +void test_split_quoted(const std::string& name, const char* input, const std::vector& expected) +{ + INFO(name); + xbt_dynar_t a = xbt_str_split_quoted(input); + REQUIRE(xbt_dynar_length(a) == expected.size()); + unsigned i; + char* token; + xbt_dynar_foreach (a, i, token) + REQUIRE(token == expected[i]); + xbt_dynar_free(&a); +} -#define test_parse_error(function, name, variable, str) \ - do { \ - INFO(name); \ - REQUIRE_THROWS_MATCHES(variable = function(str, "Parse error"), xbt_ex, \ - Catch::Matchers::Predicate([](xbt_ex const& e) { return e.category == arg_error; }, \ - "category arg_error")); \ - } while (0) +template void test_parse_error(F function, const std::string& name, const char* str) +{ + INFO(name); + REQUIRE_THROWS_MATCHES(function(str, "Parse error"), xbt_ex, + Catch::Matchers::Predicate([](xbt_ex const& e) { return e.category == arg_error; }, + "category arg_error")); +} -#define test_parse_ok(function, name, variable, str, value) \ - do { \ - INFO(name); \ - REQUIRE_NOTHROW(variable = function(str, "Parse error")); \ - REQUIRE(variable == value); /* Fail to parse str */ \ - } while (0) +template void test_parse_ok(F function, const std::string& name, const char* str, T value) +{ + INFO(name); + T variable = static_cast(-9999); + REQUIRE_NOTHROW(variable = function(str, "Parse error")); + REQUIRE(variable == value); /* Fail to parse str */ +} +} TEST_CASE("xbt::str: String Handling", "xbt_str") { SECTION("Test the function xbt_str_split_quoted") { - char** a; - char* s; - - 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"); + test_split_quoted("Empty", "", {}); + test_split_quoted("Basic test", "toto tutu", {"toto", "tutu"}); + test_split_quoted("Useless backslashes", "\\t\\o\\t\\o \\t\\u\\t\\u", {"toto", "tutu"}); + test_split_quoted("Protected space", "toto\\ tutu", {"toto tutu"}); + test_split_quoted("Several spaces", "toto tutu", {"toto", "tutu"}); + test_split_quoted("LTriming", " toto tatu", {"toto", "tatu"}); + test_split_quoted("Triming", " toto tutu ", {"toto", "tutu"}); + test_split_quoted("Single quotes", "'toto tutu' tata", {"toto tutu", "tata"}); + test_split_quoted("Double quotes", "\"toto tutu\" tata", {"toto tutu", "tata"}); + test_split_quoted("Mixed quotes", "\"toto' 'tutu\" tata", {"toto' 'tutu", "tata"}); + test_split_quoted("Backslashed quotes", "\\'toto tutu\\' tata", {"'toto", "tutu'", "tata"}); + test_split_quoted("Backslashed quotes + quotes", "'toto \\'tutu' tata", {"toto 'tutu", "tata"}); } SECTION("Test the parsing functions") { - 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_ok(xbt_str_parse_int, "Parse int", "42", 42); + test_parse_ok(xbt_str_parse_int, "Parse 0 as an int", "0", 0); + test_parse_ok(xbt_str_parse_int, "Parse -1 as an int", "-1", -1); - test_parse_error(xbt_str_parse_int, "Parse int + noise", rint, "342 cruft"); - test_parse_error(xbt_str_parse_int, "Parse nullptr as an int", rint, nullptr); - 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"); + test_parse_error(xbt_str_parse_int, "Parse int + noise", "342 cruft"); + test_parse_error(xbt_str_parse_int, "Parse nullptr as an int", nullptr); + test_parse_error(xbt_str_parse_int, "Parse '' as an int", ""); + test_parse_error(xbt_str_parse_int, "Parse cruft as an int", "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_ok(xbt_str_parse_double, "Parse 42 as a double", "42", 42); + test_parse_ok(xbt_str_parse_double, "Parse 42.5 as a double", "42.5", 42.5); + test_parse_ok(xbt_str_parse_double, "Parse 0 as a double", "0", 0); + test_parse_ok(xbt_str_parse_double, "Parse -1 as a double", "-1", -1); - test_parse_error(xbt_str_parse_double, "Parse double + noise", rdouble, "342 cruft"); - test_parse_error(xbt_str_parse_double, "Parse nullptr as a double", rdouble, nullptr); - 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"); + test_parse_error(xbt_str_parse_double, "Parse double + noise", "342 cruft"); + test_parse_error(xbt_str_parse_double, "Parse nullptr as a double", nullptr); + test_parse_error(xbt_str_parse_double, "Parse '' as a double", ""); + test_parse_error(xbt_str_parse_double, "Parse cruft as a double", "cruft"); } }