aboutsummaryrefslogtreecommitdiff
path: root/tests/irrMap.cpp
blob: 234e0e3daf93304c973ecbccbd2e99aacc2666f3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include "testUtils.h"
#include <irrlicht.h>
#include <assert.h>

using namespace irr;
using namespace core;

// map has no operator== currently so we have to check manually
// TODO: Add an operator== to core::map and the kick this function out
template <class KeyType, class ValueType>
static bool compareMaps(core::map<KeyType,ValueType> & a, core::map<KeyType,ValueType> & b)
{
	if ( a.size() != b.size() )
		return false;
	// can't test allocator because we have no access to it here
	typename core::map<KeyType, ValueType>::Iterator iterA = a.getIterator();
	typename core::map<KeyType, ValueType>::Iterator iterB = b.getIterator();
	for ( ; !iterA.atEnd(); iterA++, iterB++ )	// TODO: only iter++, no ++iter in irr::map
	{
		if ( iterA->getValue() != iterB->getValue() )
			return false;
	}
	return true;
}


static bool testSwap()
{
	bool result = true;

	core::map<int, int> map1, map2, copy1, copy2;
	for ( int i=0; i<99; ++i )
	{
		map1[i] = i;
		copy1[i] = i;	// TODO: whatever the reason - irr::map does not want operator= so we have to assign to identical values
		if ( i < 10 )	// we want also different container sizes
		{
			map2[i] = 99-i;
			copy2[i] = 99-i;	// TODO: whatever the reason - irr::map does not want operator= so we have to assign to identical values
		}
	}
	map1.swap(map2);

	result &= compareMaps(map1, copy2);
	result &= compareMaps(map2, copy1);

	assert( result );

	return result;
}

// Test the functionality of core::list
bool testIrrMap(void)
{
	bool success = true;

	success &= testSwap();

	if(success)
		logTestString("\nAll tests passed\n");
	else
		logTestString("\nFAIL!\n");

	return success;
}