scummvm/test/common/algorithm.h

69 lines
2.1 KiB
C
Raw Normal View History

#include <cxxtest/TestSuite.h>
#include "common/util.h"
#include "common/func.h"
#include "common/algorithm.h"
#include "common/list.h"
2009-12-27 10:47:34 +00:00
class AlgorithmTestSuite : public CxxTest::TestSuite {
template<typename T, class StrictWeakOrdering>
void checkSort(T first, T last, StrictWeakOrdering comp = StrictWeakOrdering()) {
// Check whether the container is sorted by the given binary predicate, which
// decides whether the first value passed preceeds the second value passed.
//
// To do that it checks an item and its follower in the container with the
// given predicate in reverse order, when it returns false everything is
// fine, when it returns false, the follower preceeds the item and thus
// the order is violated.
for (T prev = first++; first != last; ++prev, ++first)
TS_ASSERT_EQUALS(comp(*first, *prev), false);
}
2009-12-27 10:47:34 +00:00
struct Item {
int value;
Item(int v) : value(v) {}
};
2009-12-27 10:47:34 +00:00
struct ItemCmp {
bool operator()(const Item &a, const Item &b) {
return a.value < b.value;
}
};
public:
void test_pod_sort() {
{
int array[] = { 63, 11, 31, 72, 1, 48, 32, 69, 38, 31 };
Common::sort(array, array + ARRAYSIZE(array));
2009-12-27 10:47:34 +00:00
checkSort(array, array + ARRAYSIZE(array), Common::Less<int>());
Common::sort(array, array + ARRAYSIZE(array)); //already sorted one
2009-12-27 10:47:34 +00:00
checkSort(array, array + ARRAYSIZE(array), Common::Less<int>());
}
{
int array[] = { 90, 80, 70, 60, 50, 40, 30, 20, 10 };
Common::sort(array, array + ARRAYSIZE(array));
2009-12-27 10:47:34 +00:00
checkSort(array, array + ARRAYSIZE(array), Common::Less<int>());
Common::sort(array, array + ARRAYSIZE(array), Common::Greater<int>());
2009-12-27 10:47:34 +00:00
checkSort(array, array + ARRAYSIZE(array), Common::Greater<int>());
}
}
void test_container_sort() {
const int n = 1000;
2009-12-27 10:47:34 +00:00
Common::List<Item> list;
for(int i = 0; i < n; ++i)
list.push_back(Item(i * 0xDEADBEEF % 1337));
2009-12-27 10:47:34 +00:00
Common::sort(list.begin(), list.end(), ItemCmp());
checkSort(list.begin(), list.end(), ItemCmp());
2009-12-27 10:05:37 +00:00
//already sorted
2009-12-27 10:47:34 +00:00
Common::sort(list.begin(), list.end(), ItemCmp());
checkSort(list.begin(), list.end(), ItemCmp());
}
};
2009-12-27 10:05:37 +00:00