95 lines
2.3 KiB
C++
95 lines
2.3 KiB
C++
#include <psemek/test/test.hpp>
|
|
|
|
#include <psemek/ui/impl/size_polygon_utils.hpp>
|
|
|
|
#include <algorithm>
|
|
|
|
using namespace psemek;
|
|
using namespace psemek::ui::impl;
|
|
|
|
namespace
|
|
{
|
|
|
|
template <typename T>
|
|
std::set<T> as_set(std::vector<T> const & v)
|
|
{
|
|
std::set<T> result;
|
|
for (auto const & x : v)
|
|
result.insert(x);
|
|
return result;
|
|
}
|
|
|
|
void check_polygon_min(size_polygon & polygon, size_polygon const & min_x, size_polygon const & min_y)
|
|
{
|
|
for (int i = 0; i < polygon.size(); ++i)
|
|
{
|
|
expect_equal(as_set(min(polygon, 0)), as_set(min_x));
|
|
expect_equal(as_set(min(polygon, 1)), as_set(min_y));
|
|
|
|
std::rotate(polygon.begin(), polygon.end() - 1, polygon.end());
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
test_case(ui_impl_size__polygon_min_empty)
|
|
{
|
|
size_polygon polygon;
|
|
|
|
expect_equal(min(polygon, 0), size_polygon{});
|
|
expect_equal(min(polygon, 1), size_polygon{});
|
|
}
|
|
|
|
test_case(ui_impl_size__polygon_min_edge__X)
|
|
{
|
|
size_polygon polygon{{0.f, 0.f}, {10.f, 0.f}};
|
|
size_polygon min_x{{0.f, 0.f}};
|
|
size_polygon min_y{{0.f, 0.f}, {10.f, 0.f}};
|
|
|
|
check_polygon_min(polygon, min_x, min_y);
|
|
}
|
|
|
|
test_case(ui_impl_size__polygon_min_edge__Y)
|
|
{
|
|
size_polygon polygon{{0.f, 0.f}, {0.f, 10.f}};
|
|
size_polygon min_x{{0.f, 0.f}, {0.f, 10.f}};
|
|
size_polygon min_y{{0.f, 0.f}};
|
|
|
|
check_polygon_min(polygon, min_x, min_y);
|
|
}
|
|
|
|
test_case(ui_impl_size__polygon_min_edge__XY)
|
|
{
|
|
size_polygon polygon{{0.f, 0.f}, {10.f, 10.f}};
|
|
size_polygon min_x{{0.f, 0.f}};
|
|
size_polygon min_y{{0.f, 0.f}};
|
|
|
|
check_polygon_min(polygon, min_x, min_y);
|
|
}
|
|
|
|
test_case(ui_impl_size__polygon_min_square)
|
|
{
|
|
size_polygon polygon{{0.f, 0.f}, {10.f, 0.f}, {10.f, 10.f}, {0.f, 10.f}};
|
|
size_polygon min_x{{0.f, 0.f}, {0.f, 10.f}};
|
|
size_polygon min_y{{0.f, 0.f}, {10.f, 0.f}};
|
|
|
|
check_polygon_min(polygon, min_x, min_y);
|
|
}
|
|
|
|
test_case(ui_impl_size__polygon_min_diamond)
|
|
{
|
|
size_polygon polygon{{0.f, 10.f}, {10.f, 0.f}, {20.f, 10.f}, {10.f, 20.f}};
|
|
size_polygon min_x{{0.f, 10.f}};
|
|
size_polygon min_y{{10.f, 0.f}};
|
|
|
|
check_polygon_min(polygon, min_x, min_y);
|
|
}
|
|
|
|
test_case(ui_impl_size__polygon_min_octahedron)
|
|
{
|
|
size_polygon polygon{{10.f, 0.f}, {20.f, 0.f}, {30.f, 10.f}, {30.f, 20.f}, {20.f, 30.f}, {10.f, 30.f}, {0.f, 20.f}, {0.f, 10.f}};
|
|
size_polygon min_x{{0.f, 10.f}, {0.f, 20.f}};
|
|
size_polygon min_y{{10.f, 0.f}, {20.f, 0.f}};
|
|
|
|
check_polygon_min(polygon, min_x, min_y);
|
|
}
|