26#include "ui/UIHelper.h"
27#include "network/Uri.h"
28#include "base/ccUtils.h"
31using namespace cocos2d::network;
33#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
34#if defined (__arm64__)
37#elif defined (__ARM_NEON__)
42#elif (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
43#if defined (__arm64__) || defined (__aarch64__)
46#elif defined (__ARM_NEON__)
59#if (defined INCLUDE_NEON64) || (defined INCLUDE_NEON32)
60#define UNIT_TEST_FOR_OPTIMIZED_MATH_UTIL
63#define EXPECT_EQ(a, b) assert((a) == (b))
64#define EXPECT_NE(a, b) assert((a) != (b))
65#define EXPECT_TRUE(a) assert(a)
66#define EXPECT_FALSE(a) assert(!(a))
80#ifdef UNIT_TEST_FOR_OPTIMIZED_MATH_UTIL
97 CCASSERT(vec.empty(),
"vec should be empty.");
98 CCASSERT(vec.capacity() == 0,
"vec.capacity should be 0.");
99 CCASSERT(vec.size() == 0,
"vec.size should be 0.");
100 CCASSERT(vec.max_size() > 0,
"vec.max_size should > 0.");
102 auto node1 = Node::create();
105 CCASSERT(node1->getReferenceCount() == 2,
"node1->getReferenceCount should be 2.");
107 auto node2 = Node::create();
110 CCASSERT(vec.getIndex(node1) == 0,
"node1 should at index 0 in vec.");
111 CCASSERT(vec.getIndex(node2) == 1,
"node2 should at index 1 in vec.");
113 auto node3 = Node::create();
115 vec.insert(1, node3);
116 CCASSERT(vec.at(0)->getTag() == 1,
"The element at 0, tag should be 1.");
117 CCASSERT(vec.at(1)->getTag() == 3,
"The element at 1, tag should be 3.");
118 CCASSERT(vec.at(2)->getTag() == 2,
"The element at 2, tag should be 2.");
121 Vector<Node*> vec2(vec);
122 CCASSERT(vec2.size() == vec.size(),
"vec2 and vec should have equal size.");
123 ssize_t size = vec.size();
124 for (ssize_t i = 0; i < size; ++i)
126 CCASSERT(vec2.at(i) == vec.at(i),
"The element at the same index in vec2 and vec2 should be equal.");
127 CCASSERT(vec.at(i)->getReferenceCount() == 3,
"The reference count of element in vec is 3. ");
128 CCASSERT(vec2.at(i)->getReferenceCount() == 3,
"The reference count of element in vec2 is 3. ");
134 CCASSERT(vec3.size() == vec2.size(),
"vec3 and vec2 should have equal size.");
136 for (ssize_t i = 0; i < size; ++i)
138 CCASSERT(vec3.at(i) == vec2.at(i),
"The element at the same index in vec3 and vec2 should be equal.");
139 CCASSERT(vec3.at(i)->getReferenceCount() == 4,
"The reference count of element in vec3 is 4. ");
140 CCASSERT(vec2.at(i)->getReferenceCount() == 4,
"The reference count of element in vec2 is 4. ");
141 CCASSERT(vec.at(i)->getReferenceCount() == 4,
"The reference count of element in vec is 4. ");
146 auto createVector = [](){
149 for (
int i = 0; i < 20; i++)
151 ret.pushBack(Node::create());
155 for (
auto& child : ret)
163 Vector<Node*> vec4(createVector());
164 for (
const auto& child : vec4)
166 CC_UNUSED_PARAM(child);
167 CCASSERT(child->getReferenceCount() == 2,
"child's reference count should be 2.");
171 Vector<Node*> vec5(10);
172 CCASSERT(vec5.capacity() == 10,
"vec5's capacity should be 10.");
174 CCASSERT(vec5.capacity() == 20,
"vec5's capacity should be 20.");
176 CCASSERT(vec5.size() == 0,
"vec5's size should be 0.");
177 CCASSERT(vec5.empty(),
"vec5 is empty now.");
179 auto toRemovedNode = Node::create();
180 vec5.pushBack(toRemovedNode);
181 CCASSERT(toRemovedNode->getReferenceCount() == 2,
"toRemovedNode's reference count is 2.");
184 vec5 = createVector();
185 CCASSERT(toRemovedNode->getReferenceCount() == 1,
"toRemovedNode's reference count is 1.");
186 CCASSERT(vec5.size() == 20,
"size should be 20");
188 for (
const auto& child : vec5)
190 CC_UNUSED_PARAM(child);
191 CCASSERT(child->getReferenceCount() == 2,
"child's reference count is 2.");
195 CCASSERT(vec.find(node3) == (vec.begin() + 1),
"node3 is the 2nd element in vec.");
196 CCASSERT(std::find(std::begin(vec), std::end(vec), node2) == (vec.begin() + 2),
"node2 is the 3rd element in vec.");
198 CCASSERT(vec.front()->getTag() == 1,
"vec's front element's tag is 1.");
199 CCASSERT(vec.back()->getTag() == 2,
"vec's back element's tag is 2.");
201 CCASSERT(vec.getRandomObject(),
"vec getRandomObject should return true.");
202 CCASSERT(!vec.contains(Node::create()),
"vec doesn't contain a empty Node instance.");
203 CCASSERT(vec.contains(node1),
"vec contains node1.");
204 CCASSERT(vec.contains(node2),
"vec contains node2.");
205 CCASSERT(vec.contains(node3),
"vec contains node3.");
206 CCASSERT(vec.equals(vec2),
"vec is equal to vec2.");
207 CCASSERT(vec.equals(vec3),
"vec is equal to vec3.");
210 vec5.insert(2, node1);
211 CCASSERT(vec5.at(2)->getTag() == 1,
"vec5's 3rd element's tag is 1.");
212 CCASSERT(vec5.size() == 21,
"vec5's size is 21.");
213 vec5.back()->setTag(100);
215 CCASSERT(vec5.size() == 20,
"vec5's size is 20.");
216 CCASSERT(vec5.back()->getTag() != 100,
"the back element of vec5's tag is 100.");
219 Vector<Node*> vec6 = createVector();
220 Vector<Node*> vec7 = vec6;
222 CCASSERT(vec6.size() == 20,
"vec6's size is 20.");
223 vec6.erase(vec6.begin() + 1);
224 CCASSERT(vec6.size() == 19,
"vec6's size is 19.");
225 CCASSERT((*(vec6.begin() + 1))->getTag() == 1002,
"The 2rd element in vec6's tag is 1002.");
226 vec6.erase(vec6.begin() + 2, vec6.begin() + 10);
227 CCASSERT(vec6.size() == 11,
"vec6's size is 11.");
228 CCASSERT(vec6.at(0)->getTag() == 1000,
"vec6's first element's tag is 1000.");
229 CCASSERT(vec6.at(1)->getTag() == 1002,
"vec6's second element's tag is 1002.");
230 CCASSERT(vec6.at(2)->getTag() == 1011,
"vec6's third element's tag is 1011.");
231 CCASSERT(vec6.at(3)->getTag() == 1012,
"vec6's fouth element's tag is 1012.");
233 CCASSERT(vec6.at(3)->getTag() == 1013,
"vec6's 4th element's tag is 1013.");
234 vec6.eraseObject(vec6.at(2));
235 CCASSERT(vec6.at(2)->getTag() == 1013,
"vec6's 3rd element's tag is 1013.");
238 auto objA = Node::create();
239 auto objB = Node::create();
240 auto objC = Node::create();
242 Vector<Node*> array1;
243 Vector<Node*> array2;
246 array1.pushBack(objA);
247 array1.pushBack(objA);
248 array1.pushBack(objA);
250 array2.pushBack(objA);
251 array2.pushBack(objB);
252 array2.pushBack(objC);
254 for (
auto obj : array1) {
255 array2.eraseObject(obj);
257 CCASSERT(objA->getReferenceCount() == 4,
"objA's reference count is 4.");
259 CCASSERT(objA->getReferenceCount() == 1,
"objA's reference count is 1.");
262 Vector<Node*> array1;
264 array1.pushBack(objA);
265 array1.pushBack(objA);
266 array1.pushBack(objA);
267 CCASSERT(objA->getReferenceCount() == 4,
"objA's reference count is 4.");
268 array1.eraseObject(objA,
true);
269 CCASSERT(objA->getReferenceCount() == 1,
"objA's reference count is 1.");
271 array1.pushBack(objA);
272 array1.pushBack(objA);
273 array1.pushBack(objA);
275 array1.eraseObject(objA,
false);
276 CCASSERT(objA->getReferenceCount() == 3,
"objA's reference count is 3.");
280 CCASSERT(vec7.size() == 20,
"vec7's size is 20.");
281 for (
const auto& child : vec7)
283 CC_UNUSED_PARAM(child);
284 CCASSERT(child->getReferenceCount() == 2,
"child's reference count is 2.");
288 Vector<Node*> vecForSort = createVector();
289 std::sort(vecForSort.begin(), vecForSort.end(), [](Node* a, Node* b){
290 return a->getTag() >= b->getTag();
293 for (
int i = 0; i < 20; ++i)
295 CCASSERT(vecForSort.at(i)->getTag() - 1000 == (19 - i),
"vecForSort's element's tag is invalid.");
299 vecForSort.reverse();
300 for (
int i = 0; i < 20; ++i)
302 CCASSERT(vecForSort.at(i)->getTag() - 1000 == i,
"vecForSort's element's tag is invalid.");
306 Vector<Node*> vecForSwap = createVector();
307 vecForSwap.swap(2, 4);
308 CCASSERT(vecForSwap.at(2)->getTag() == 1004,
"vecForSwap's 3nd element's tag is 1004.");
309 CCASSERT(vecForSwap.at(4)->getTag() == 1002,
"vecForSwap's 5rd element's tag is 1002.");
310 vecForSwap.swap(vecForSwap.at(2), vecForSwap.at(4));
311 CCASSERT(vecForSwap.at(2)->getTag() == 1002,
"vecForSwap's 3rd element's tag is 1002.");
312 CCASSERT(vecForSwap.at(4)->getTag() == 1004,
"vecForSwap's 5rd element's tag is 1004.");
315 Vector<Node*> vecForShrink = createVector();
316 vecForShrink.reserve(100);
317 CCASSERT(vecForShrink.capacity() == 100,
"vecForShrink's capacity is 100.");
318 vecForShrink.pushBack(Node::create());
319 vecForShrink.shrinkToFit();
320 CCASSERT(vecForShrink.capacity() == 21,
"vecForShrink's capacity is 21.");
324 std::srand((
unsigned)time(
nullptr));
325 Vector<Node*> vecForRandom = createVector();
326 log(
"<--- begin ---->");
327 for (
int i = 0; i < vecForRandom.size(); ++i)
329 log(
"Vector: random object tag = %d", vecForRandom.getRandomObject()->getTag());
331 log(
"<---- end ---->");
334 Vector<Node*> vecSelfAssign = createVector();
335 vecSelfAssign = vecSelfAssign;
336 CCASSERT(vecSelfAssign.size() == 20,
"vecSelfAssign's size is 20.");
338 for (
const auto& child : vecSelfAssign)
340 CC_UNUSED_PARAM(child);
341 CCASSERT(child->getReferenceCount() == 2,
"child's reference count is 2.");
344 vecSelfAssign = std::move(vecSelfAssign);
345 CCASSERT(vecSelfAssign.size() == 20,
"vecSelfAssign's size is 20.");
347 for (
const auto& child : vecSelfAssign)
349 CC_UNUSED_PARAM(child);
350 CCASSERT(child->getReferenceCount() == 2,
"child's reference count is 2.");
354 Vector<Node*> vecConstAt = createVector();
360 log(
"vec[8] = %d", vec.at(8)->getTag());
365 return "Vector<T>, should not crash";
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.");
564 log(
"[%s]=(tag)%d",
"0", map.at(
"0")->getTag());
565 log(
"[%s]=(tag)%d",
"1", map.find(
"1")->second->getTag());
570 return "Map<K, V>, should not crash";
580 CCASSERT(v1.getType() == Value::Type::NONE,
"v1's value type should be VALUE::Type::NONE.");
581 CCASSERT(v1.isNull(),
"v1 is null.");
584 CCASSERT(v2.getType() == Value::Type::INTEGER,
"v2's value type should be VALUE::Type::INTEGER.");
585 CCASSERT(!v2.isNull(),
"v2 is not null.");
588 CCASSERT(v3.getType() == Value::Type::FLOAT,
"v3's value type should be VALUE::Type::FLOAT.");
589 CCASSERT(!v3.isNull(),
"v3 is not null.");
592 CCASSERT(v4.getType() == Value::Type::DOUBLE,
"v4's value type should be VALUE::Type::DOUBLE.");
593 CCASSERT(!v4.isNull(),
"v4 is not null.");
595 unsigned char byte = 50;
597 CCASSERT(v5.getType() == Value::Type::BYTE,
"v5's value type should be Value::Type::BTYE.");
598 CCASSERT(!v5.isNull(),
"v5 is not null.");
601 CCASSERT(v6.getType() == Value::Type::BOOLEAN,
"v6's value type is Value::Type::BOOLEAN.");
602 CCASSERT(!v6.isNull(),
"v6 is not null.");
605 CCASSERT(v7.getType() == Value::Type::STRING,
"v7's value type is Value::type::STRING.");
606 CCASSERT(!v7.isNull(),
"v7 is not null.");
608 Value v8(std::string(
"string2"));
609 CCASSERT(v8.getType() == Value::Type::STRING,
"v8's value type is Value::Type::STRING.");
610 CCASSERT(!v8.isNull(),
"v8 is not null.");
612 auto createValueVector = [&](){
621 Value v9(createValueVector());
622 CCASSERT(v9.getType() == Value::Type::VECTOR,
"v9's value type is Value::Type::VECTOR.");
623 CCASSERT(!v9.isNull(),
"v9 is not null.");
625 auto createValueMap = [&](){
633 Value v10(createValueMap());
634 CCASSERT(v10.getType() == Value::Type::MAP,
"v10's value type is Value::Type::MAP.");
635 CCASSERT(!v10.isNull(),
"v10 is not null.");
637 auto createValueMapIntKey = [&](){
645 Value v11(createValueMapIntKey());
646 CCASSERT(v11.getType() == Value::Type::INT_KEY_MAP,
"v11's value type is Value::Type::INT_KEY_MAP.");
647 CCASSERT(!v11.isNull(),
"v11 is not null.");
652 return "Value Test, should not crash";
662#define TEST_CODE_NUM 11
730 bool isSuccess =
false;
732 std::string originalUTF8 = (
const char*)
__utf8Code;
737 isSuccess = StringUtils::UTF16ToUTF8(originalUTF16, utf8Str);
741 isSuccess = memcmp(utf8Str.data(), originalUTF8.data(), originalUTF8.length()+1)==0;
744 CCASSERT(isSuccess,
"StringUtils::UTF16ToUTF8 failed");
747 std::u16string utf16Str;
748 isSuccess = StringUtils::UTF8ToUTF16(originalUTF8, utf16Str);
752 isSuccess = memcmp(utf16Str.data(), originalUTF16.data(), originalUTF16.length()+1)==0;
755 CCASSERT(isSuccess && (utf16Str.length() ==
TEST_CODE_NUM),
"StringUtils::UTF8ToUTF16 failed");
758 auto vec1 = StringUtils::getChar16VectorFromUTF16String(originalUTF16);
760 CCASSERT(vec1.size() == originalUTF16.length(),
"StringUtils::getChar16VectorFromUTF16String failed");
763 std::vector<char16_t> vec2( vec1 );
764 vec2.push_back(0x2009);
765 vec2.push_back(0x2009);
766 vec2.push_back(0x2009);
767 vec2.push_back(0x2009);
769 std::vector<char16_t> vec3( vec2 );
770 StringUtils::trimUTF16Vector(vec2);
772 CCASSERT(vec1.size() == vec2.size(),
"StringUtils::trimUTF16Vector failed");
774 for (
size_t i = 0; i < vec2.size(); i++ )
776 CCASSERT(vec1.at(i) == vec2.at(i),
"StringUtils::trimUTF16Vector failed");
780 CCASSERT(StringUtils::getCharacterCountInUTF8String(originalUTF8) ==
TEST_CODE_NUM,
"StringUtils::getCharacterCountInUTF8String failed");
783 CCASSERT(StringUtils::getIndexOfLastNotChar16(vec3, 0x2009) == (vec1.size()-1),
"StringUtils::getIndexOfLastNotChar16 failed");
786 CCASSERT(originalUTF16.length() ==
TEST_CODE_NUM,
"The length of the original utf16 string isn't equal to TEST_CODE_NUM");
790 for(
size_t i = 0; i < whiteCodeNum; i++ )
792 CCASSERT(StringUtils::isUnicodeSpace(
WHITE_SPACE_CODE[i]),
"StringUtils::isUnicodeSpace failed");
795 CCASSERT(!StringUtils::isUnicodeSpace(0xFFFF),
"StringUtils::isUnicodeSpace failed");
797 CCASSERT(!StringUtils::isCJKUnicode(0xFFFF) && StringUtils::isCJKUnicode(0x3100),
"StringUtils::isCJKUnicode failed");
804 for (
int i = 0; i < 10000; ++i)
812 return "UTF8 <-> UTF16 Conversion Test, no crash";
821 using cocos2d::ui::Helper;
824 std::string source =
"abcdefghij";
825 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 0, 2) ==
"ab");
826 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 2, 2) ==
"cd");
827 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 4, 2) ==
"ef");
831 std::string source =
"";
834 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 0, 0) ==
"");
835 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 0, 1) ==
"");
838 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 1, 0) ==
"");
839 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 1, 1) ==
"");
843 std::string source =
"abc";
846 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 0, 0) ==
"");
847 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 1, 0) ==
"");
848 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 2, 0) ==
"");
849 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 3, 0) ==
"");
850 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 0, 3) ==
"abc");
851 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 0, 4) ==
"abc");
852 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 1, 2) ==
"bc");
853 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 1, 3) ==
"bc");
854 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 2, 1) ==
"c");
855 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 2, 2) ==
"c");
856 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 3, 1) ==
"");
857 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 3, 2) ==
"");
860 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 4, 0) ==
"");
861 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 4, 1) ==
"");
865 std::string source =
"这里是中文测试例";
868 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 0, 0) ==
"");
869 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 1, 0) ==
"");
870 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 7, 0) ==
"");
871 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 8, 0) ==
"");
872 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 8, 1) ==
"");
873 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 0, 1) ==
"\xe8\xbf\x99");
874 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 0, 4) ==
"\xe8\xbf\x99\xe9\x87\x8c\xe6\x98\xaf\xe4\xb8\xad");
875 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 0, 8) ==
"\xe8\xbf\x99\xe9\x87\x8c\xe6\x98\xaf\xe4\xb8\xad\xe6\x96\x87\xe6\xb5\x8b\xe8\xaf\x95\xe4\xbe\x8b");
876 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 0, 100) ==
"\xe8\xbf\x99\xe9\x87\x8c\xe6\x98\xaf\xe4\xb8\xad\xe6\x96\x87\xe6\xb5\x8b\xe8\xaf\x95\xe4\xbe\x8b");
877 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 2, 5) ==
"\xe6\x98\xaf\xe4\xb8\xad\xe6\x96\x87\xe6\xb5\x8b\xe8\xaf\x95");
878 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 6, 2) ==
"\xe8\xaf\x95\xe4\xbe\x8b");
879 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 6, 100) ==
"\xe8\xaf\x95\xe4\xbe\x8b");
882 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 9, 0) ==
"");
883 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 9, 1) ==
"");
887 std::string source =
"\xC0\xAF";
890 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 0, 0) ==
"");
891 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 0, 1) ==
"");
892 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 1, 0) ==
"");
893 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 1, 1) ==
"");
894 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 0, 2) ==
"");
898 std::string source =
"\xE0\x80\xAF";
901 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 0, 0) ==
"");
902 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 0, 1) ==
"");
903 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 1, 0) ==
"");
904 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 1, 1) ==
"");
905 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 0, 3) ==
"");
909 std::string source =
"\xF0\x80\x80\xAF";
912 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 0, 0) ==
"");
913 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 0, 1) ==
"");
914 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 1, 0) ==
"");
915 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 1, 1) ==
"");
916 CC_ASSERT(Helper::getSubStringOfUTF8String(source, 0, 4) ==
"");
922 return "ui::Helper::getSubStringOfUTF8String Test";
930 using cocos2d::utils::parseIntegerList;
932 std::vector<int> res1{};
935 std::vector<int> res2{1};
938 std::vector<int> res3{1, 2};
939 EXPECT_EQ(res3, parseIntegerList(
"1 2"));
941 std::vector<int> res4{2, 4, 3, 1, 4, 2, 0, 4, 1, 0, 4, 5};
942 EXPECT_EQ(res4, parseIntegerList(
"2 4 3 1 4 2 0 4 1 0 4 5"));
944 std::vector<int> res5{73, 48, 57, 117, 27, 117, 29, 77, 14, 62, 26, 7, 55, 2};
945 EXPECT_EQ(res5, parseIntegerList(
"73 48 57 117 27 117 29 77 14 62 26 7 55 2"));
951 return "utils::parseIntegerList Test";
960 std::string s(
"http://www.facebook.com/hello/world?query#fragment");
961 Uri u = Uri::parse(s);
965 EXPECT_EQ(
"www.facebook.com", u.getHost());
967 EXPECT_EQ(
"www.facebook.com", u.getAuthority());
975 std::string s(
"http://www.facebook.com:8080/hello/world?query#fragment");
976 Uri u = Uri::parse(s);
980 EXPECT_EQ(
"www.facebook.com", u.getHost());
982 EXPECT_EQ(
"www.facebook.com:8080", u.getAuthority());
990 std::string s(
"http://127.0.0.1:8080/hello/world?query#fragment");
991 Uri u = Uri::parse(s);
997 EXPECT_EQ(
"127.0.0.1:8080", u.getAuthority());
1005 std::string s(
"http://[::1]:8080/hello/world?query#fragment");
1006 Uri u = Uri::parse(s);
1013 EXPECT_EQ(
"[::1]:8080", u.getAuthority());
1021 std::string s(
"http://[2401:db00:20:7004:face:0:29:0]:8080/hello/world?query");
1022 Uri u = Uri::parse(s);
1026 EXPECT_EQ(
"[2401:db00:20:7004:face:0:29:0]", u.getHost());
1027 EXPECT_EQ(
"2401:db00:20:7004:face:0:29:0", u.getHostName());
1029 EXPECT_EQ(
"[2401:db00:20:7004:face:0:29:0]:8080", u.getAuthority());
1037 std::string s(
"http://[2401:db00:20:7004:face:0:29:0]/hello/world?query");
1038 Uri u = Uri::parse(s);
1042 EXPECT_EQ(
"[2401:db00:20:7004:face:0:29:0]", u.getHost());
1043 EXPECT_EQ(
"2401:db00:20:7004:face:0:29:0", u.getHostName());
1045 EXPECT_EQ(
"[2401:db00:20:7004:face:0:29:0]", u.getAuthority());
1053 std::string s(
"http://user:pass@host.com/");
1054 Uri u = Uri::parse(s);
1060 EXPECT_EQ(
"user:pass@host.com", u.getAuthority());
1068 std::string s(
"http://user@host.com/");
1069 Uri u = Uri::parse(s);
1075 EXPECT_EQ(
"user@host.com", u.getAuthority());
1083 std::string s(
"http://user:@host.com/");
1084 Uri u = Uri::parse(s);
1090 EXPECT_EQ(
"user@host.com", u.getAuthority());
1094 EXPECT_EQ(
"http://user@host.com/", u.toString());
1098 std::string s(
"http://:pass@host.com/");
1099 Uri u = Uri::parse(s);
1105 EXPECT_EQ(
":pass@host.com", u.getAuthority());
1113 std::string s(
"http://@host.com/");
1114 Uri u = Uri::parse(s);
1120 EXPECT_EQ(
"host.com", u.getAuthority());
1124 EXPECT_EQ(
"http://host.com/", u.toString());
1128 std::string s(
"http://:@host.com/");
1129 Uri u = Uri::parse(s);
1135 EXPECT_EQ(
"host.com", u.getAuthority());
1139 EXPECT_EQ(
"http://host.com/", u.toString());
1143 std::string s(
"file:///etc/motd");
1144 Uri u = Uri::parse(s);
1158 std::string s(
"file://etc/motd");
1159 Uri u = Uri::parse(s);
1174 std::string s(
"http://localhost?&key1=foo&key2=&key3&=bar&=bar=&");
1175 Uri u = Uri::parse(s);
1176 auto paramsList = u.getQueryParams();
1177 std::map<std::string, std::string> params;
1178 for (
auto& param : paramsList) {
1179 params[param.first] = param.second;
1183 EXPECT_NE(params.end(), params.find(
"key2"));
1185 EXPECT_NE(params.end(), params.find(
"key3"));
1191 std::string s(
"http://localhost?&&&&&&&&&&&&&&&");
1192 Uri u = Uri::parse(s);
1193 auto params = u.getQueryParams();
1199 std::string s(
"http://localhost?&=invalid_key&key2&key3=foo");
1200 Uri u = Uri::parse(s);
1201 auto paramsList = u.getQueryParams();
1202 std::map<std::string, std::string> params;
1203 for (
auto& param : paramsList) {
1204 params[param.first] = param.second;
1207 EXPECT_NE(params.end(), params.find(
"key2"));
1214 std::string s(
"http://localhost?&key1=====&&=key2&key3=");
1215 Uri u = Uri::parse(s);
1216 auto paramsList = u.getQueryParams();
1217 std::map<std::string, std::string> params;
1218 for (
auto& param : paramsList) {
1219 params[param.first] = param.second;
1222 EXPECT_NE(params.end(), params.find(
"key3"));
1228 std::string s(
"ws://localhost:90?key1=foo=bar&key2=foobar&");
1229 Uri u = Uri::parse(s);
1230 auto paramsList = u.getQueryParams();
1231 std::map<std::string, std::string> params;
1232 for (
auto& param : paramsList) {
1233 params[param.first] = param.second;
1245 EXPECT_EQ(
"localhost", v.getHostName());
1249 EXPECT_EQ(
"key1=foo=bar&key2=foobar&", v.getQuery());
1260 EXPECT_EQ(
"localhost", v.getHostName());
1264 EXPECT_EQ(
"key1=foo=bar&key2=foobar&", v.getQuery());
1282 Uri v = std::move(u);
1287 EXPECT_EQ(
"localhost", v.getHostName());
1291 EXPECT_EQ(
"key1=foo=bar&key2=foobar&", v.getQuery());
1303 EXPECT_EQ(
"localhost", v.getHostName());
1307 EXPECT_EQ(
"key1=foo=bar&key2=foobar&", v.getQuery());
1313 std::string s(
"2http://www.facebook.com");
1315 Uri u = Uri::parse(s);
1320 std::string s(
"www[facebook]com");
1322 Uri u = Uri::parse(
"http://" + s);
1327 std::string s(
"http://[::1:8080/hello/world?query#fragment");
1328 Uri u = Uri::parse(s);
1333 std::string s(
"http://::1]:8080/hello/world?query#fragment");
1335 Uri u = Uri::parse(s);
1340 std::string s(
"http://::1:8080/hello/world?query#fragment");
1341 Uri u = Uri::parse(s);
1346 std::string s(
"http://2401:db00:20:7004:face:0:29:0/hello/world?query");
1347 Uri u = Uri::parse(s);
1352 Uri http = Uri::parse(
"http://google.com");
1353 Uri https = Uri::parse(
"https://www.google.com:90");
1354 Uri query = Uri::parse(
"http://google.com:8080/foo/bar?foo=bar");
1355 Uri localhost = Uri::parse(
"http://localhost:8080");
1356 Uri ipv6 = Uri::parse(
"https://[2001:0db8:85a3:0042:1000:8a2e:0370:7334]");
1357 Uri ipv6short = Uri::parse(
"http://[2001:db8:85a3:42:1000:8a2e:370:7334]");
1358 Uri ipv6port = Uri::parse(
"http://[2001:db8:85a3:42:1000:8a2e:370:7334]:90");
1359 Uri ipv6abbrev = Uri::parse(
"http://[2001::7334:a:90]");
1360 Uri ipv6http = Uri::parse(
"http://[2001::7334:a]:90");
1361 Uri ipv6query = Uri::parse(
"http://[2001::7334:a]:90/foo/bar?foo=bar");
1365 EXPECT_EQ(http.getHost(),
"google.com");
1368 EXPECT_EQ(https.getHost(),
"www.google.com");
1370 EXPECT_EQ(query.getPathEtc(),
"/foo/bar?foo=bar");
1371 EXPECT_EQ(localhost.getScheme(),
"http");
1372 EXPECT_EQ(localhost.getHost(),
"localhost");
1375 EXPECT_EQ(ipv6.getHostName(),
"2001:0db8:85a3:0042:1000:8a2e:0370:7334");
1377 EXPECT_EQ(ipv6short.getScheme(),
"http");
1378 EXPECT_EQ(ipv6short.getHostName(),
"2001:db8:85a3:42:1000:8a2e:370:7334");
1380 EXPECT_EQ(ipv6port.getScheme(),
"http");
1381 EXPECT_EQ(ipv6port.getHostName(),
"2001:db8:85a3:42:1000:8a2e:370:7334");
1383 EXPECT_EQ(ipv6abbrev.getScheme(),
"http");
1384 EXPECT_EQ(ipv6abbrev.getHostName(),
"2001::7334:a:90");
1386 EXPECT_EQ(ipv6http.getScheme(),
"http");
1388 EXPECT_EQ(ipv6http.getHostName(),
"2001::7334:a");
1389 EXPECT_EQ(ipv6query.getScheme(),
"http");
1391 EXPECT_EQ(ipv6query.getHostName(),
"2001::7334:a");
1392 EXPECT_EQ(ipv6query.getPathEtc(),
"/foo/bar?foo=bar");
1396 Uri u0 = Uri::parse(
"http://localhost:84/foo.html?&q=123");
1397 Uri u1 = Uri::parse(
"https://localhost:82/foo.html?&q=1");
1398 Uri u2 = Uri::parse(
"ws://localhost/foo");
1399 Uri u3 = Uri::parse(
"localhost/foo");
1400 Uri u4 = Uri::parse(
"localhost:8080");
1401 Uri u5 = Uri::parse(
"bb://localhost?&foo=12:4&ccc=13");
1402 Uri u6 = Uri::parse(
"cc://localhost:91?&foo=321&bbb=1");
1408 EXPECT_EQ(u0.getPathEtc(),
"/foo.html?&q=123");
1413 EXPECT_EQ(u1.getPathEtc(),
"/foo.html?&q=1");
1435 EXPECT_EQ(u5.getPathEtc(),
"?&foo=12:4&ccc=13");
1436 EXPECT_EQ(u5.getQuery(),
"&foo=12:4&ccc=13");
1442 EXPECT_EQ(u6.getPathEtc(),
"?&foo=321&bbb=1");
1443 EXPECT_EQ(u6.getQuery(),
"&foo=321&bbb=1");
1450 return "Uri::parse Test";
1457#ifdef INCLUDE_NEON32
1458#include "math/MathUtilNeon.inl"
1461#ifdef INCLUDE_NEON64
1462#include "math/MathUtilNeon64.inl"
1469#include "math/MathUtil.inl"
1474using namespace UnitTest::cocos2d;
1478 log(
"-------------checking %s ----------------------------", description);
1480 for (
int i = 0; i < size; ++i)
1482 bool r = fabs(a1[i] - a2[i]) < 0.00001f;
1485 log(
"Correct: a1[%d]=%f, a2[%d]=%f", i, a1[i], i, a2[i]);
1489 log(
"Wrong: a1[%d]=%f, a2[%d]=%f", i, a1[i], i, a2[i]);
1491 CCASSERT(r,
"The optimized instruction is implemented in a wrong way, please check it!");
1499 const int MAT4_SIZE = 16;
1500 const int VEC4_SIZE = 4;
1502 const float inMat41[MAT4_SIZE] = {
1503 0.234023f, 2.472349f, 1.984244f, 2.23348f,
1504 0.634124f, 0.234975f, 6.384572f, 0.82368f,
1505 0.738028f, 1.845237f, 1.934721f, 1.62343f,
1506 0.339023f, 3.472452f, 1.324714f, 4.23852f,
1509 const float inMat42[MAT4_SIZE] = {
1510 1.640232f, 4.472349f, 0.983244f, 1.23343f,
1511 2.834124f, 8.234975f, 0.082572f, 3.82464f,
1512 3.238028f, 2.845237f, 0.331721f, 4.62544f,
1513 4.539023f, 9.472452f, 3.520714f, 2.23252f,
1516 const float scalar = 1.323298f;
1517 const float x = 0.432234f;
1518 const float y = 1.333229f;
1519 const float z = 2.535292f;
1520 const float w = 4.632234f;
1522 const float inVec4[VEC4_SIZE] = {2.323478f, 0.238482f, 4.223783f, 7.238238f};
1523 const float inVec42[VEC4_SIZE] = {0.322374f, 8.258883f, 3.293683f, 2.838337f};
1525 float outMat4Opt[MAT4_SIZE] = {0};
1526 float outMat4C[MAT4_SIZE] = {0};
1527 float outVec4Opt[VEC4_SIZE] = {0};
1528 float outVec4C[VEC4_SIZE] = {0};
1531 MathUtilC::addMatrix(inMat41, scalar, outMat4C);
1533#ifdef INCLUDE_NEON32
1534 MathUtilNeon::addMatrix(inMat41, scalar, outMat4Opt);
1537#ifdef INCLUDE_NEON64
1538 MathUtilNeon64::addMatrix(inMat41, scalar, outMat4Opt);
1545 __checkMathUtilResult(
"inline static void addMatrix(const float* m, float scalar, float* dst);", outMat4C, outMat4Opt, MAT4_SIZE);
1547 memset(outMat4C, 0,
sizeof(outMat4C));
1548 memset(outMat4Opt, 0,
sizeof(outMat4Opt));
1551 MathUtilC::addMatrix(inMat41, inMat42, outMat4C);
1553#ifdef INCLUDE_NEON32
1554 MathUtilNeon::addMatrix(inMat41, inMat42, outMat4Opt);
1557#ifdef INCLUDE_NEON64
1558 MathUtilNeon64::addMatrix(inMat41, inMat42, outMat4Opt);
1565 __checkMathUtilResult(
"inline static void addMatrix(const float* m1, const float* m2, float* dst);", outMat4C, outMat4Opt, MAT4_SIZE);
1567 memset(outMat4C, 0,
sizeof(outMat4C));
1568 memset(outMat4Opt, 0,
sizeof(outMat4Opt));
1571 MathUtilC::subtractMatrix(inMat41, inMat42, outMat4C);
1573#ifdef INCLUDE_NEON32
1574 MathUtilNeon::subtractMatrix(inMat41, inMat42, outMat4Opt);
1577#ifdef INCLUDE_NEON64
1578 MathUtilNeon64::subtractMatrix(inMat41, inMat42, outMat4Opt);
1585 __checkMathUtilResult(
"inline static void subtractMatrix(const float* m1, const float* m2, float* dst);", outMat4C, outMat4Opt, MAT4_SIZE);
1587 memset(outMat4C, 0,
sizeof(outMat4C));
1588 memset(outMat4Opt, 0,
sizeof(outMat4Opt));
1591 MathUtilC::multiplyMatrix(inMat41, scalar, outMat4C);
1593#ifdef INCLUDE_NEON32
1594 MathUtilNeon::multiplyMatrix(inMat41, scalar, outMat4Opt);
1597#ifdef INCLUDE_NEON64
1598 MathUtilNeon64::multiplyMatrix(inMat41, scalar, outMat4Opt);
1605 __checkMathUtilResult(
"inline static void multiplyMatrix(const float* m, float scalar, float* dst);", outMat4C, outMat4Opt, MAT4_SIZE);
1607 memset(outMat4C, 0,
sizeof(outMat4C));
1608 memset(outMat4Opt, 0,
sizeof(outMat4Opt));
1611 MathUtilC::multiplyMatrix(inMat41, inMat42, outMat4C);
1613#ifdef INCLUDE_NEON32
1614 MathUtilNeon::multiplyMatrix(inMat41, inMat42, outMat4Opt);
1617#ifdef INCLUDE_NEON64
1618 MathUtilNeon64::multiplyMatrix(inMat41, inMat42, outMat4Opt);
1625 __checkMathUtilResult(
"inline static void multiplyMatrix(const float* m1, const float* m2, float* dst);", outMat4C, outMat4Opt, MAT4_SIZE);
1627 memset(outMat4C, 0,
sizeof(outMat4C));
1628 memset(outMat4Opt, 0,
sizeof(outMat4Opt));
1631 MathUtilC::negateMatrix(inMat41, outMat4C);
1633#ifdef INCLUDE_NEON32
1634 MathUtilNeon::negateMatrix(inMat41, outMat4Opt);
1637#ifdef INCLUDE_NEON64
1638 MathUtilNeon64::negateMatrix(inMat41, outMat4Opt);
1645 __checkMathUtilResult(
"inline static void negateMatrix(const float* m, float* dst);", outMat4C, outMat4Opt, MAT4_SIZE);
1647 memset(outMat4C, 0,
sizeof(outMat4C));
1648 memset(outMat4Opt, 0,
sizeof(outMat4Opt));
1651 MathUtilC::transposeMatrix(inMat41, outMat4C);
1653#ifdef INCLUDE_NEON32
1654 MathUtilNeon::transposeMatrix(inMat41, outMat4Opt);
1657#ifdef INCLUDE_NEON64
1658 MathUtilNeon64::transposeMatrix(inMat41, outMat4Opt);
1665 __checkMathUtilResult(
"inline static void transposeMatrix(const float* m, float* dst);", outMat4C, outMat4Opt, MAT4_SIZE);
1667 memset(outMat4C, 0,
sizeof(outMat4C));
1668 memset(outMat4Opt, 0,
sizeof(outMat4Opt));
1671 MathUtilC::transformVec4(inMat41, x, y, z, w, outVec4C);
1673#ifdef INCLUDE_NEON32
1674 MathUtilNeon::transformVec4(inMat41, x, y, z, w, outVec4Opt);
1677#ifdef INCLUDE_NEON64
1678 MathUtilNeon64::transformVec4(inMat41, x, y, z, w, outVec4Opt);
1685 __checkMathUtilResult(
"inline static void transformVec4(const float* m, float x, float y, float z, float w, float* dst);", outVec4C, outVec4Opt, VEC4_SIZE);
1687 memset(outVec4C, 0,
sizeof(outVec4C));
1688 memset(outVec4Opt, 0,
sizeof(outVec4Opt));
1691 MathUtilC::transformVec4(inMat41, inVec4, outVec4C);
1693#ifdef INCLUDE_NEON32
1694 MathUtilNeon::transformVec4(inMat41, inVec4, outVec4Opt);
1697#ifdef INCLUDE_NEON64
1698 MathUtilNeon64::transformVec4(inMat41, inVec4, outVec4Opt);
1705 __checkMathUtilResult(
"inline static void transformVec4(const float* m, const float* v, float* dst);", outVec4C, outVec4Opt, VEC4_SIZE);
1707 memset(outVec4C, 0,
sizeof(outVec4C));
1708 memset(outVec4Opt, 0,
sizeof(outVec4Opt));
1711 MathUtilC::crossVec3(inVec4, inVec42, outVec4C);
1713#ifdef INCLUDE_NEON32
1714 MathUtilNeon::crossVec3(inVec4, inVec42, outVec4Opt);
1717#ifdef INCLUDE_NEON64
1718 MathUtilNeon64::crossVec3(inVec4, inVec42, outVec4Opt);
1725 __checkMathUtilResult(
"inline static void crossVec3(const float* v1, const float* v2, float* dst);", outVec4C, outVec4Opt, VEC4_SIZE);
1727 memset(outVec4C, 0,
sizeof(outVec4C));
1728 memset(outVec4Opt, 0,
sizeof(outVec4Opt));
1733 return "MathUtilTest";
1743 ResizableBufferAdapter<Data> buffer(&data);
1745 FileUtils::getInstance()->getContents(
"effect1.wav", &buffer);
1748 FileUtils::getInstance()->getContents(
"effect2.ogg", &buffer);
1751 FileUtils::getInstance()->getContents(
"effect1.wav", &buffer);
1757 return "ResiziableBufferAdapter<Data> Test";
#define ADD_TEST_CASE(__className__)
static void __checkMathUtilResult(const char *description, const float *a1, const float *a2, int size)
static void doUTFConversion()
static const unsigned char __utf8Code[]
static const char16_t WHITE_SPACE_CODE[]
static const char16_t __utf16Code[]
virtual std::string subtitle() const override
virtual void onEnter() override
virtual void onEnter() override
virtual std::string subtitle() const override
virtual std::string subtitle() const override
virtual void onEnter() override
virtual std::string subtitle() const override
virtual void onEnter() override
virtual void onEnter() override
virtual std::string subtitle() const override
void constFunc(const cocos2d::Map< std::string, cocos2d::Node * > &map) const
void constFunc(const cocos2d::Vector< Node * > &vec) const
virtual void onEnter() override
virtual std::string subtitle() const override
virtual void onEnter() override
virtual std::string subtitle() const override
virtual void onEnter() override
virtual std::string subtitle() const override
virtual void onEnter() override
virtual std::string title() const override
virtual std::string subtitle() const override
virtual void onEnter() override
void constFunc(const cocos2d::Value &value) const