375 auto createMap = [](){
376 Map<std::string, Node*> ret;
377 for (
int i = 0; i < 20; ++i)
379 auto node = Node::create();
380 node->setTag(1000 + i);
381 ret.insert(StringUtils::toString(i), node);
388 Map<std::string, Node*> map1;
389 CCASSERT(map1.empty(),
"map1 is empty.");
390 CCASSERT(map1.size() == 0,
"map1's size is 0.");
391 CCASSERT(map1.keys().empty(),
"map1's keys are empty.");
392 CCASSERT(map1.keys(Node::create()).empty(),
"map1's keys don't contain a empty Node.");
395 Map<std::string, Node*> map2 = createMap();
396 for (
const auto& e : map2)
399 CCASSERT(e.second->getReferenceCount() == 2,
"e.second element's reference count is 2.");
403 Map<std::string, Node*> map3(map2);
404 for (
const auto& e : map3)
407 CCASSERT(e.second->getReferenceCount() == 3,
"e.second's reference count is 3.");
411 Map<std::string, Node*> map4;
412 auto unusedNode = Node::create();
413 map4.insert(
"unused",unusedNode);
415 CCASSERT(unusedNode->getReferenceCount() == 1,
"unusedNode's reference count is 1.");
416 for (
const auto& e : map4)
419 CCASSERT(e.second->getReferenceCount() == 2,
"e.second's reference count is 2.");
423 Map<std::string, Node*> map5;
425 for (
const auto& e : map5)
428 CCASSERT(e.second->getReferenceCount() == 3,
"e.second's reference count is 3.");
432 CCASSERT(map4.size() == map5.size(),
"map4's size is equal to map5.size.");
434 for (
const auto& e : map4)
437 CCASSERT(e.second == map5.find(e.first)->second,
"e.second can't be found in map5.");
441 log(
"--------------");
442 log(
"bucket_count = %d",
static_cast<int>(map4.bucketCount()));
443 log(
"size = %d",
static_cast<int>(map4.size()));
444 for (
int i = 0; i < map4.bucketCount(); ++i)
446 log(
"bucket_size(%d) = %d", i,
static_cast<int>(map4.bucketSize(i)));
448 for (
const auto& e : map4)
450 log(
"bucket(\"%s\"), bucket index = %d", e.first.c_str(),
static_cast<int>(map4.bucket(e.first)));
453 log(
"----- all keys---------");
456 auto keys = map4.keys();
457 for (
const auto& key : keys)
459 log(
"key = %s", key.c_str());
462 auto node10Key = map4.at(
"10");
463 map4.insert(
"100", node10Key);
464 map4.insert(
"101", node10Key);
465 map4.insert(
"102", node10Key);
467 log(
"------ keys for object --------");
468 auto keysForObject = map4.keys(node10Key);
469 for (
const auto& key : keysForObject)
471 log(
"key = %s", key.c_str());
473 log(
"--------------");
479 auto nodeToFind = map4.find(
"10");
480 CC_UNUSED_PARAM(nodeToFind);
481 CCASSERT(nodeToFind->second->getTag() == 1010,
"nodeToFind's tag value is 1010.");
484 Map<std::string, Node*> map6;
485 auto node1 = Node::create();
487 auto node2 = Node::create();
489 auto node3 = Node::create();
491 map6.insert(
"insert01", node1);
492 map6.insert(
"insert02", node2);
493 map6.insert(
"insert03", node3);
495 CCASSERT(node1->getReferenceCount() == 2,
"node1's reference count is 2.");
496 CCASSERT(node2->getReferenceCount() == 2,
"node2's reference count is 2.");
497 CCASSERT(node3->getReferenceCount() == 2,
"node3's reference count is 2.");
498 CCASSERT(map6.at(
"insert01") == node1,
"The element at insert01 is equal to node1.");
499 CCASSERT(map6.at(
"insert02") == node2,
"The element at insert02 is equal to node2.");
500 CCASSERT(map6.at(
"insert03") == node3,
"The element at insert03 is equal to node3.");
503 Map<std::string, Node*> mapForErase = createMap();
504 mapForErase.erase(mapForErase.find(
"9"));
505 CCASSERT(mapForErase.find(
"9") == mapForErase.end(),
"9 is already removed.");
506 CCASSERT(mapForErase.size() == 19,
"mapForErase's size is 19.");
508 mapForErase.erase(
"7");
509 CCASSERT(mapForErase.find(
"7") == mapForErase.end(),
"7 is already removed.");
510 CCASSERT(mapForErase.size() == 18,
"mapForErase's size is 18.");
512 std::vector<std::string> itemsToRemove;
513 itemsToRemove.push_back(
"2");
514 itemsToRemove.push_back(
"3");
515 itemsToRemove.push_back(
"4");
516 mapForErase.erase(itemsToRemove);
517 CCASSERT(mapForErase.size() == 15,
"mapForErase's size is 15.");
520 Map<std::string, Node*> mapForClear = createMap();
521 auto mapForClearCopy = mapForClear;
524 for (
const auto& e : mapForClearCopy)
527 CCASSERT(e.second->getReferenceCount() == 2,
"e.second's reference count is 2.");
532 std::srand((
unsigned)time(
nullptr));
533 Map<std::string, Node*> mapForRandom = createMap();
534 log(
"<--- begin ---->");
535 for (
int i = 0; i < mapForRandom.size(); ++i)
537 log(
"Map: random object tag = %d", mapForRandom.getRandomObject()->getTag());
539 log(
"<---- end ---->");
542 Map<std::string, Node*> mapForSelfAssign = createMap();
543 mapForSelfAssign = mapForSelfAssign;
544 CCASSERT(mapForSelfAssign.size() == 20,
"mapForSelfAssign's size is 20.");
546 for (
const auto& e : mapForSelfAssign)
549 CCASSERT(e.second->getReferenceCount() == 2,
"e.second's reference count is 2.");
552 mapForSelfAssign = std::move(mapForSelfAssign);
553 CCASSERT(mapForSelfAssign.size() == 20,
"mapForSelfAssign's size is 20.");
555 for (
const auto& e : mapForSelfAssign)
558 CCASSERT(e.second->getReferenceCount() == 2,
"e.second's reference's count is 2.");
void constFunc(const cocos2d::Map< std::string, cocos2d::Node * > &map) const
virtual void onEnter() override