#include "CPstrings.h" #include "crossplatform_shared_ptr.h" #include #include #include std::string strjoin(const std::vector& strings, const std::string& delim) { // Empty input vector if (strings.empty()) { return ""; } std::string output = strings[0]; for (unsigned int i = 1; i < strings.size(); i++) { output += format("%s%s", delim.c_str(), strings[i].c_str()); } return output; } std::vector strsplit(const std::string& s, char del) { std::vector v; std::string::const_iterator i1 = s.begin(), i2; while (true) { i2 = std::find(i1, s.end(), del); v.push_back(std::string(i1, i2)); if (i2 == s.end()) break; i1 = i2 + 1; } return v; } #if defined(NO_FMTLIB) std::string format(const char* fmt, ...) { const int size = 512; struct deleter { static void delarray(char* p) { delete[] p; } }; // to use delete[] shared_ptr buffer(new char[size], deleter::delarray); // I'd prefer unique_ptr, but it's only available since c++11 va_list vl; va_start(vl, fmt); int nsize = vsnprintf(buffer.get(), size, fmt, vl); if (size <= nsize) { //fail delete buffer and try again buffer.reset(new char[++nsize], deleter::delarray); //+1 for /0 nsize = vsnprintf(buffer.get(), nsize, fmt, vl); } va_end(vl); return buffer.get(); } #endif #if defined(ENABLE_CATCH) # include "crossplatform_shared_ptr.h" # include # include "CoolPropTools.h" # include "CoolProp.h" TEST_CASE("Test endswith function", "[endswith]") { REQUIRE(endswith("aaa", "-PengRobinson") == false); REQUIRE(endswith("Ethylbenzene", "-PengRobinson") == false); REQUIRE(endswith("Ethylbenzene-PengRobinson", "-PengRobinson") == true); REQUIRE(endswith("Ethylbenzene", "Ethylbenzene") == true); } #endif