int TestValueInitOptimization() { int nErrorCount = 0; const int ELEM_COUNT = 100; { eastl::vector<T> v1; eastl::vector<ValueInitOf<T>> v2; v1.resize(ELEM_COUNT); v2.resize(ELEM_COUNT); for (int i = 0; i < ELEM_COUNT; i++) { EATEST_VERIFY(v1[i] == v2[i].get()); } } { eastl::vector<T> v1(ELEM_COUNT); eastl::vector<ValueInitOf<T>> v2(ELEM_COUNT); for (int i = 0; i < ELEM_COUNT; i++) { EATEST_VERIFY(v1[i] == v2[i].get()); } } EATEST_VERIFY(nErrorCount == 0); return nErrorCount; }
int TestListMap() { EASTLTest_Printf("TestListMap\n"); int nErrorCount = 0; { typedef eastl::list_map<uint32_t, uint64_t> TestMapType; typedef eastl::pair<uint32_t, uint64_t> ValueType; // We currently can't use TestMapType::value_type because its 'first' is const. TestMapType testMap; TestMapType::iterator iter; TestMapType::const_iterator c_iter; TestMapType::reverse_iterator rIter; TestMapType::const_reverse_iterator c_rIter; TestMapType::iterator tempIter; EATEST_VERIFY(testMap.empty()); EATEST_VERIFY(testMap.validate()); testMap.push_front(ValueType(3, 1003)); EATEST_VERIFY(testMap.validate()); testMap.push_back(ValueType(4, 1004)); EATEST_VERIFY(testMap.validate()); testMap.push_back(ValueType(2, 1002)); EATEST_VERIFY(testMap.validate()); testMap.push_front(ValueType(6, 1006)); EATEST_VERIFY(testMap.validate()); EATEST_VERIFY(!testMap.empty()); EATEST_VERIFY(testMap.size() == 4); EATEST_VERIFY(testMap.find(3) != testMap.end()); EATEST_VERIFY(testMap.find(5) == testMap.end()); EATEST_VERIFY((VerifyListMapSequence<uint32_t, uint64_t>("list_map::push_back", testMap, UINT32_MAX, 0, 6, 1006, 3, 1003, 4, 1004, 2, 1002, UINT32_MAX, 0))); iter = testMap.find(3); EATEST_VERIFY((iter->first == 3) && ((++iter)->first == 4) && ((++iter)->first == 2)); rIter = testMap.rbegin(); EATEST_VERIFY((rIter->first == 2) && ((++rIter)->first == 4) && ((++rIter)->first == 3) && ((++rIter)->first == 6)); TestMapType::const_reference rFront = testMap.front(); EATEST_VERIFY(rFront.first == 6); TestMapType::reference rBack = testMap.back(); EATEST_VERIFY(rBack.first == 2); testMap.clear(); EATEST_VERIFY(testMap.empty()); EATEST_VERIFY(testMap.validate()); iter = testMap.begin(); EATEST_VERIFY(iter == testMap.end()); testMap.push_back(ValueType(10, 1010)); EATEST_VERIFY(testMap.validate()); testMap.push_front(ValueType(8, 1008)); EATEST_VERIFY(testMap.validate()); testMap.push_back(7, 1007); EATEST_VERIFY(testMap.validate()); testMap.push_front(9, 1009); EATEST_VERIFY(testMap.validate()); testMap.push_back(11, 1011LL); EATEST_VERIFY(testMap.validate()); EATEST_VERIFY((VerifyListMapSequence<uint32_t, uint64_t>("list_map::push_back", testMap, UINT32_MAX, 0, 9, 1009, 8, 1008, 10, 1010, 7, 1007, 11, 1011, UINT32_MAX, 0))); testMap.pop_front(); EATEST_VERIFY(testMap.validate()); EATEST_VERIFY((VerifyListMapSequence<uint32_t, uint64_t>("list_map::push_back", testMap, UINT32_MAX, 0, 8, 1008, 10, 1010, 7, 1007, 11, 1011, UINT32_MAX, 0))); rIter = testMap.rbegin(); EATEST_VERIFY((rIter->first == 11 && ((++rIter)->first == 7) && ((++rIter)->first == 10) && ((++rIter)->first == 8))); testMap.pop_back(); EATEST_VERIFY(testMap.validate()); EATEST_VERIFY((VerifyListMapSequence<uint32_t, uint64_t>("list_map::push_back", testMap, UINT32_MAX, 0, 8, 1008, 10, 1010, 7, 1007, UINT32_MAX, 0))); rIter = testMap.rbegin(); EATEST_VERIFY(((rIter)->first == 7) && ((++rIter)->first == 10) && ((++rIter)->first == 8)); tempIter = testMap.find(10); EATEST_VERIFY(tempIter != testMap.end()); testMap.erase(10); EATEST_VERIFY(testMap.validate()); EATEST_VERIFY((VerifyListMapSequence<uint32_t, uint64_t>("list_map::push_back", testMap, UINT32_MAX, 0, 8, 1008, 7, 1007, UINT32_MAX, 0))); EATEST_VERIFY(testMap.validate_iterator(testMap.find(8)) == (eastl::isf_valid | eastl::isf_current | eastl::isf_can_dereference)); EATEST_VERIFY(testMap.validate_iterator(testMap.find(30)) == (eastl::isf_valid | eastl::isf_current)); EATEST_VERIFY(testMap.validate_iterator(tempIter) == eastl::isf_none); EATEST_VERIFY(testMap.validate()); testMap.erase(20); // erasing an index not in use should still be safe EATEST_VERIFY(testMap.validate()); EATEST_VERIFY((VerifyListMapSequence<uint32_t, uint64_t>("list_map::push_back", testMap, UINT32_MAX, 0, 8, 1008, 7, 1007, UINT32_MAX, 0))); EATEST_VERIFY(testMap.count(7) == 1); EATEST_VERIFY(testMap.count(10) == 0); EATEST_VERIFY(testMap.validate()); testMap.erase(testMap.find(8)); EATEST_VERIFY(testMap.validate()); EATEST_VERIFY((VerifyListMapSequence<uint32_t, uint64_t>("list_map::push_back", testMap, UINT32_MAX, 0, 7, 1007, UINT32_MAX, 0))); testMap.erase(testMap.rbegin()); EATEST_VERIFY(testMap.empty()); EATEST_VERIFY(testMap.validate()); } { typedef eastl::list_map<eastl::string, uint32_t> TestStringMapType; TestStringMapType testStringMap; TestStringMapType::iterator strIter; testStringMap.push_back(eastl::string("hello"), 750); EATEST_VERIFY(testStringMap.size() == 1); strIter = testStringMap.find_as("hello", eastl::less_2<eastl::string, const char*>()); EATEST_VERIFY(strIter != testStringMap.end()); EATEST_VERIFY(strIter->first == "hello"); EATEST_VERIFY(strIter->second == 750); strIter = testStringMap.find_as("fake_string", eastl::less_2<eastl::string, const char*>()); EATEST_VERIFY(strIter == testStringMap.end()); EATEST_VERIFY(testStringMap.validate()); } return nErrorCount; }