Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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;
}