diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2015-05-06 12:41:56 +0200 |
---|---|---|
committer | John Firebaugh <john.firebaugh@gmail.com> | 2015-05-12 20:46:56 -0700 |
commit | 40b604448fa1388d3917e2cfb5db0b63555000ee (patch) | |
tree | bc4a5eff58f381f3f5e3065a579f146c387bf320 /test | |
parent | 8dd6da5b5e8c4246b130da9eb1bd967606ae98df (diff) | |
download | qtlocation-mapboxgl-40b604448fa1388d3917e2cfb5db0b63555000ee.tar.gz |
add BinPack test
Diffstat (limited to 'test')
-rw-r--r-- | test/miscellaneous/binpack.cpp | 51 | ||||
-rw-r--r-- | test/test.gypi | 1 |
2 files changed, 52 insertions, 0 deletions
diff --git a/test/miscellaneous/binpack.cpp b/test/miscellaneous/binpack.cpp new file mode 100644 index 0000000000..a597f0a299 --- /dev/null +++ b/test/miscellaneous/binpack.cpp @@ -0,0 +1,51 @@ +#include "../fixtures/util.hpp" + +#include <mbgl/geometry/binpack.hpp> + +#include <iosfwd> +#include <array> + +namespace mbgl { +template <typename T> ::std::ostream& operator<<(::std::ostream& os, const Rect<T>& t) { + return os << "Rect { " << t.x << ", " << t.y << ", " << t.w << ", " << t.h << " }"; +} +} + +TEST(BinPack, Allocating) { + mbgl::BinPack<uint16_t> bin(128, 128); + std::array<mbgl::Rect<uint16_t>, 4> rects; + + rects[0] = bin.allocate(32, 48); + ASSERT_EQ(mbgl::Rect<uint16_t>(0, 0, 32, 48), rects[0]); + rects[1] = bin.allocate(8, 17); + ASSERT_EQ(mbgl::Rect<uint16_t>(32, 0, 8, 17), rects[1]); + rects[2] = bin.allocate(8, 17); + ASSERT_EQ(mbgl::Rect<uint16_t>(0, 48, 8, 17), rects[2]); + + bin.release(rects[0]); + rects[0] = bin.allocate(32, 24); + ASSERT_EQ(mbgl::Rect<uint16_t>(0, 0, 32, 24), rects[0]); + rects[3] = bin.allocate(32, 24); + ASSERT_EQ(mbgl::Rect<uint16_t>(32, 17, 32, 24), rects[3]); +} + + +TEST(BinPack, Full) { + mbgl::BinPack<uint16_t> bin(128, 128); + std::vector<mbgl::Rect<uint16_t>> rects; + + for (int j = 0; j < 3; j++) { + for (int i = 0; i < 256; i++) { + auto rect = bin.allocate(8, 8); + ASSERT_TRUE(rect.hasArea()); + rects.push_back(rect); + } + + ASSERT_FALSE(bin.allocate(8, 8).hasArea()); + + for (auto& rect: rects) { + bin.release(rect); + } + rects.clear(); + } +} diff --git a/test/test.gypi b/test/test.gypi index f86878b2f7..03bceaae4b 100644 --- a/test/test.gypi +++ b/test/test.gypi @@ -41,6 +41,7 @@ 'headless/headless.cpp', 'miscellaneous/clip_ids.cpp', + 'miscellaneous/binpack.cpp', 'miscellaneous/bilinear.cpp', 'miscellaneous/comparisons.cpp', 'miscellaneous/enums.cpp', |