/*! Returns a deep-copied clone of the QUmlOpaqueExpression. */ QModelingElement *QUmlOpaqueExpression::clone() const { QUmlOpaqueExpression *c = new QUmlOpaqueExpression; c->asQModelingObject()->setObjectName(this->asQModelingObject()->objectName()); c->asQModelingObject()->setProperty("role", this->asQModelingObject()->property("role")); foreach (QUmlComment *element, ownedComments()) c->addOwnedComment(dynamic_cast<QUmlComment *>(element->clone())); c->setName(name()); if (nameExpression()) c->setNameExpression(dynamic_cast<QUmlStringExpression *>(nameExpression()->clone())); c->setVisibility(visibility()); foreach (QString element, bodies()) c->addBody(element); foreach (QString element, languages()) c->addLanguage(element); return c; }
void test_string() { constexpr size_t NUM_STRINGS = 1024; std::vector<std::string> strings(NUM_STRINGS); std::vector<grnxx::String> refs(NUM_STRINGS); std::vector<grnxx::String> bodies(NUM_STRINGS); for (size_t i = 0; i < NUM_STRINGS; ++i) { std::stringstream stream; stream << i; strings[i] = stream.str(); refs[i] = grnxx::String(strings[i].data(), strings[i].size()); assert(refs[i].is_reference()); bodies[i].assign(refs[i]); assert(bodies[i].is_instance()); } for (size_t i = 0; i < NUM_STRINGS; ++i) { assert(bodies[i].size() == static_cast<size_t>(strings[i].size())); for (size_t j = 0; j < bodies[i].size(); ++j) { assert(bodies[i][j] == strings[i][j]); } for (size_t j = 0; j < NUM_STRINGS; ++j) { assert((bodies[i] == bodies[j]) == (strings[i] == strings[j])); assert((bodies[i] != bodies[j]) == (strings[i] != strings[j])); assert((bodies[i] < bodies[j]) == (strings[i] < strings[j])); assert((bodies[i] > bodies[j]) == (strings[i] > strings[j])); assert((bodies[i] <= bodies[j]) == (strings[i] <= strings[j])); assert((bodies[i] >= bodies[j]) == (strings[i] >= strings[j])); assert((bodies[i] == refs[j]) == (strings[i] == strings[j])); assert((bodies[i] != refs[j]) == (strings[i] != strings[j])); assert((bodies[i] < refs[j]) == (strings[i] < strings[j])); assert((bodies[i] > refs[j]) == (strings[i] > strings[j])); assert((bodies[i] <= refs[j]) == (strings[i] <= strings[j])); assert((bodies[i] >= refs[j]) == (strings[i] >= strings[j])); assert((bodies[i] == strings[j].c_str()) == (strings[i] == strings[j])); assert((bodies[i] != strings[j].c_str()) == (strings[i] != strings[j])); assert((bodies[i] < strings[j].c_str()) == (strings[i] < strings[j])); assert((bodies[i] > strings[j].c_str()) == (strings[i] > strings[j])); assert((bodies[i] <= strings[j].c_str()) == (strings[i] <= strings[j])); assert((bodies[i] >= strings[j].c_str()) == (strings[i] >= strings[j])); assert((refs[i] == bodies[j]) == (strings[i] == strings[j])); assert((refs[i] != bodies[j]) == (strings[i] != strings[j])); assert((refs[i] < bodies[j]) == (strings[i] < strings[j])); assert((refs[i] > bodies[j]) == (strings[i] > strings[j])); assert((refs[i] <= bodies[j]) == (strings[i] <= strings[j])); assert((refs[i] >= bodies[j]) == (strings[i] >= strings[j])); assert((strings[i].c_str() == bodies[j]) == (strings[i] == strings[j])); assert((strings[i].c_str() != bodies[j]) == (strings[i] != strings[j])); assert((strings[i].c_str() < bodies[j]) == (strings[i] < strings[j])); assert((strings[i].c_str() > bodies[j]) == (strings[i] > strings[j])); assert((strings[i].c_str() <= bodies[j]) == (strings[i] <= strings[j])); assert((strings[i].c_str() >= bodies[j]) == (strings[i] >= strings[j])); assert(bodies[i].starts_with(bodies[j]) == string_starts_with(strings[i], strings[j])); assert(bodies[i].starts_with(strings[j].c_str()) == string_starts_with(strings[i], strings[j])); assert(bodies[i].ends_with(bodies[j]) == string_ends_with(strings[i], strings[j])); assert(bodies[i].ends_with(strings[j].c_str()) == string_ends_with(strings[i], strings[j])); } } for (size_t i = 0; i < NUM_STRINGS; ++i) { std::stringstream stream; stream << (i / 2.0); std::string extra_string = stream.str(); strings[i].append(extra_string); bodies[i].append(extra_string.data(), extra_string.size()); assert(bodies[i] == grnxx::String(strings[i].data(), strings[i].size())); } for (size_t i = 0; i < NUM_STRINGS; ++i) { strings[i].append(strings[i]); bodies[i].append(bodies[i]); assert(std::string(bodies[i].data(), bodies[i].size()) == strings[i]); } }