| Index: tests/GrOrderedSetTest.cpp
|
| diff --git a/tests/GrOrderedSetTest.cpp b/tests/GrOrderedSetTest.cpp
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..cb0fe85afd24964336919e9b7f4c3e42898e2414
|
| --- /dev/null
|
| +++ b/tests/GrOrderedSetTest.cpp
|
| @@ -0,0 +1,150 @@
|
| +/*
|
| + * Copyright 2014 Google Inc.
|
| + *
|
| + * Use of this source code is governed by a BSD-style license that can be
|
| + * found in the LICENSE file.
|
| + */
|
| +
|
| +#include "SkRandom.h"
|
| +#include "Test.h"
|
| +// This is a GPU-backend specific test
|
| +#if SK_SUPPORT_GPU
|
| +#include "GrOrderedSet.h"
|
| +
|
| +typedef GrOrderedSet<int> Set;
|
| +typedef GrOrderedSet<const char*, GrStrLess> Set2;
|
| +
|
| +DEF_TEST(GrOrderedSetTest, reporter) {
|
| + Set set;
|
| +
|
| + REPORTER_ASSERT(reporter, set.empty());
|
| +
|
| + SkRandom r;
|
| +
|
| + int count[1000] = {0};
|
| + // add 10K ints
|
| + for (int i = 0; i < 10000; ++i) {
|
| + int x = r.nextU() % 1000;
|
| + Set::Iter xi = set.insert(x);
|
| + REPORTER_ASSERT(reporter, *xi == x);
|
| + REPORTER_ASSERT(reporter, !set.empty());
|
| + count[x] = 1;
|
| + }
|
| + set.insert(0);
|
| + count[0] = 1;
|
| + set.insert(999);
|
| + count[999] = 1;
|
| + int totalCount = 0;
|
| + for (int i = 0; i < 1000; ++i) {
|
| + totalCount += count[i];
|
| + }
|
| + REPORTER_ASSERT(reporter, *set.begin() == 0);
|
| + REPORTER_ASSERT(reporter, *set.last() == 999);
|
| + REPORTER_ASSERT(reporter, --(++set.begin()) == set.begin());
|
| + REPORTER_ASSERT(reporter, --set.end() == set.last());
|
| + REPORTER_ASSERT(reporter, set.count() == totalCount);
|
| +
|
| + int c = 0;
|
| + // check that we iterate through the correct number of
|
| + // elements and they are properly sorted.
|
| + for (Set::Iter a = set.begin(); set.end() != a; ++a) {
|
| + Set::Iter b = a;
|
| + ++b;
|
| + ++c;
|
| + REPORTER_ASSERT(reporter, b == set.end() || *a <= *b);
|
| + }
|
| + REPORTER_ASSERT(reporter, c == set.count());
|
| +
|
| + // check that the set finds all ints and only ints added to set
|
| + for (int i = 0; i < 1000; ++i) {
|
| + bool existsFind = set.find(i) != set.end();
|
| + bool existsCount = 0 != count[i];
|
| + REPORTER_ASSERT(reporter, existsFind == existsCount);
|
| + }
|
| + // remove all the ints between 100 and 200.
|
| + for (int i = 100; i < 200; ++i) {
|
| + set.remove(set.find(i));
|
| + if (1 == count[i]) {
|
| + count[i] = 0;
|
| + --totalCount;
|
| + }
|
| + REPORTER_ASSERT(reporter, set.count() == totalCount);
|
| + REPORTER_ASSERT(reporter, set.find(i) == set.end());
|
| + }
|
| + // remove the 0 entry. (tests removing begin())
|
| + REPORTER_ASSERT(reporter, *set.begin() == 0);
|
| + REPORTER_ASSERT(reporter, *(--set.end()) == 999);
|
| + set.remove(set.find(0));
|
| + count[0] = 0;
|
| + --totalCount;
|
| + REPORTER_ASSERT(reporter, set.count() == totalCount);
|
| + REPORTER_ASSERT(reporter, set.find(0) == set.end());
|
| + REPORTER_ASSERT(reporter, 0 < *set.begin());
|
| +
|
| + // remove all the 999 entries (tests removing last()).
|
| + set.remove(set.find(999));
|
| + count[999] = 0;
|
| + --totalCount;
|
| + REPORTER_ASSERT(reporter, set.count() == totalCount);
|
| + REPORTER_ASSERT(reporter, set.find(999) == set.end());
|
| + REPORTER_ASSERT(reporter, 999 > *(--set.end()));
|
| + REPORTER_ASSERT(reporter, set.last() == --set.end());
|
| +
|
| + // Make sure iteration still goes through correct number of entries
|
| + // and is still sorted correctly.
|
| + c = 0;
|
| + for (Set::Iter a = set.begin(); set.end() != a; ++a) {
|
| + Set::Iter b = a;
|
| + ++b;
|
| + ++c;
|
| + REPORTER_ASSERT(reporter, b == set.end() || *a <= *b);
|
| + }
|
| + REPORTER_ASSERT(reporter, c == set.count());
|
| +
|
| + // repeat check that the set finds all ints and only ints added to set
|
| + for (int i = 0; i < 1000; ++i) {
|
| + bool existsFind = set.find(i) != set.end();
|
| + bool existsCount = 0 != count[i];
|
| + REPORTER_ASSERT(reporter, existsFind == existsCount);
|
| + }
|
| +
|
| + // remove all entries
|
| + while (!set.empty()) {
|
| + set.remove(set.begin());
|
| + }
|
| +
|
| + // test reset on empty set.
|
| + set.reset();
|
| + REPORTER_ASSERT(reporter, set.empty());
|
| +
|
| +
|
| + // test using c strings
|
| + const char* char1 = "dog";
|
| + const char* char2 = "cat";
|
| + const char* char3 = "dog";
|
| +
|
| + Set2 set2;
|
| +
|
| + set2.insert("ape");
|
| + set2.insert(char1);
|
| + set2.insert(char2);
|
| + set2.insert(char3);
|
| + set2.insert("ant");
|
| + set2.insert("cat");
|
| +
|
| + REPORTER_ASSERT(reporter, set2.count() == 4);
|
| + REPORTER_ASSERT(reporter, set2.find("dog") == set2.last());
|
| + REPORTER_ASSERT(reporter, set2.find("cat") != set2.end());
|
| + REPORTER_ASSERT(reporter, set2.find("ant") == set2.begin());
|
| + REPORTER_ASSERT(reporter, set2.find("bug") == set2.end());
|
| +
|
| + set2.remove(set2.find("ant"));
|
| + REPORTER_ASSERT(reporter, set2.find("ant") == set2.end());
|
| + REPORTER_ASSERT(reporter, set2.count() == 3);
|
| +
|
| + set2.reset();
|
| + REPORTER_ASSERT(reporter, set2.empty());
|
| +}
|
| +
|
| +#endif
|
| +
|
|
|