diff options
author | Vladimir Menshakov | 2009-12-27 09:54:11 +0000 |
---|---|---|
committer | Vladimir Menshakov | 2009-12-27 09:54:11 +0000 |
commit | 60b33656863c080e69a845f02d2f6311850efb79 (patch) | |
tree | 4d12c337d799db8ef9a19ed3e6e0581fc42a4b27 /test | |
parent | ebb391790f88f4eb370764062d6bd54e4479e47f (diff) | |
download | scummvm-rg350-60b33656863c080e69a845f02d2f6311850efb79.tar.gz scummvm-rg350-60b33656863c080e69a845f02d2f6311850efb79.tar.bz2 scummvm-rg350-60b33656863c080e69a845f02d2f6311850efb79.zip |
added tests for sort() functions
svn-id: r46615
Diffstat (limited to 'test')
-rw-r--r-- | test/common/algorithm.h | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/test/common/algorithm.h b/test/common/algorithm.h new file mode 100644 index 0000000000..b07eb2996e --- /dev/null +++ b/test/common/algorithm.h @@ -0,0 +1,60 @@ +#include <cxxtest/TestSuite.h> + +#include "common/util.h" +#include "common/func.h" +#include "common/algorithm.h" +#include "common/list.h" + +template<typename T, class StrictWeakOrdering > +void check_sort(T first, T last, StrictWeakOrdering comp = StrictWeakOrdering()) { + for(T i = first; i != last; ++i) { + T next = i; + ++next; + if (next == last) + break; + TS_ASSERT_EQUALS(comp(*next, *i), false); //prev <= next + }; +} + +struct item { + int value; + item(int v): value(v) {} +}; + +struct item_cmp { + bool operator()(const item &a, const item &b) { + return a.value < b.value; + } +}; + +class AlgorithmTestSuite : public CxxTest::TestSuite { +public: + void test_pod_sort() { + { + int array[] = { 63, 11, 31, 72, 1, 48, 32, 69, 38, 31 }; + Common::sort(array, array + ARRAYSIZE(array)); + check_sort(array, array + ARRAYSIZE(array), Common::Less<int>()); + + Common::sort(array, array + ARRAYSIZE(array)); //already sorted one + check_sort(array, array + ARRAYSIZE(array), Common::Less<int>()); + } + { + int array[] = { 90, 80, 70, 60, 50, 40, 30, 20, 10 }; + Common::sort(array, array + ARRAYSIZE(array)); + check_sort(array, array + ARRAYSIZE(array), Common::Less<int>()); + + Common::sort(array, array + ARRAYSIZE(array), Common::Greater<int>()); + check_sort(array, array + ARRAYSIZE(array), Common::Greater<int>()); + } + } + + void test_container_sort() { + const int n = 1000; + Common::List<item> list; + for(int i = 0; i < n; ++i) { + list.push_back(item(i)); + Common::sort(list.begin(), list.end(), item_cmp()); + check_sort(list.begin(), list.end(), item_cmp()); + } + } +}; |