1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
|
//
// Test Suite for geos::precision::SimpleGeometryPrecisionReducer class.
// tut
#include <tut/tut.hpp>
// geos
#include <geos/precision/SimpleGeometryPrecisionReducer.h>
#include <geos/geom/Geometry.h>
#include <geos/geom/GeometryFactory.h>
#include <geos/geom/PrecisionModel.h>
#include <geos/io/WKTReader.h>
// std
#include <string>
namespace tut {
//
// Test Group
//
// Common data used by tests
struct test_sgpr_data {
typedef std::unique_ptr<geos::geom::Geometry> GeometryPtr;
typedef geos::geom::GeometryFactory GeometryFactory;
geos::geom::PrecisionModel pm_float_;
geos::geom::PrecisionModel pm_fixed_;
GeometryFactory::Ptr factory_;
geos::io::WKTReader reader_;
geos::precision::SimpleGeometryPrecisionReducer reducer_;
geos::precision::SimpleGeometryPrecisionReducer reducer2_; // keep collapse
test_sgpr_data() :
pm_float_(),
pm_fixed_(1),
factory_(GeometryFactory::create(&pm_float_, 0)),
reader_(factory_.get()),
reducer_(&pm_fixed_),
reducer2_(&pm_fixed_)
{
reducer2_.setRemoveCollapsedComponents(false);
}
};
typedef test_group<test_sgpr_data> group;
typedef group::object object;
group test_sgpr_group("geos::precision::SimpleGeometryPrecisionReducer");
//
// Test Cases
//
// Test square
template<>
template<>
void object::test<1>
()
{
GeometryPtr g1(reader_.read("POLYGON (( 0 0, 0 1.4, 1.4 1.4, 1.4 0, 0 0 ))"));
GeometryPtr g2(reader_.read("POLYGON (( 0 0, 0 1, 1 1, 1 0, 0 0 ))"));
GeometryPtr result(reducer_.reduce(g1.get()));
ensure(result->equalsExact(g2.get()));
}
// Test tiny square collapse
template<>
template<>
void object::test<2>
()
{
GeometryPtr g1(reader_.read("POLYGON (( 0 0, 0 .4, .4 .4, .4 0, 0 0 ))"));
GeometryPtr g2(reader_.read("POLYGON EMPTY"));
GeometryPtr result(reducer_.reduce(g1.get()));
ensure(result->equalsExact(g2.get()));
}
// Test square collapse
template<>
template<>
void object::test<3>
()
{
GeometryPtr g1(reader_.read("POLYGON (( 0 0, 0 1.4, .4 .4, .4 0, 0 0 ))"));
GeometryPtr g2(reader_.read("POLYGON EMPTY"));
GeometryPtr result(reducer_.reduce(g1.get()));
ensure(result->equalsExact(g2.get()));
}
// Test square keep collapse
template<>
template<>
void object::test<4>
()
{
GeometryPtr g1(reader_.read("POLYGON (( 0 0, 0 1.4, .4 .4, .4 0, 0 0 ))"));
GeometryPtr g2(reader_.read("POLYGON (( 0 0, 0 1, 0 0, 0 0, 0 0 ))"));
GeometryPtr result(reducer2_.reduce(g1.get()));
ensure(result->equalsExact(g2.get()));
}
// Test line
template<>
template<>
void object::test<5>
()
{
GeometryPtr g1(reader_.read("LINESTRING ( 0 0, 0 1.4 )"));
GeometryPtr g2(reader_.read("LINESTRING (0 0, 0 1)"));
GeometryPtr result(reducer_.reduce(g1.get()));
ensure(result->equalsExact(g2.get()));
}
// Test line remove collapse
template<>
template<>
void object::test<6>
()
{
GeometryPtr g1(reader_.read("LINESTRING ( 0 0, 0 .4 )"));
GeometryPtr g2(reader_.read("LINESTRING EMPTY"));
GeometryPtr result(reducer_.reduce(g1.get()));
ensure(result->equalsExact(g2.get()));
}
// Test line keep collapse
template<>
template<>
void object::test<7>
()
{
GeometryPtr g1(reader_.read("LINESTRING ( 0 0, 0 .4 )"));
GeometryPtr g2(reader_.read("LINESTRING ( 0 0, 0 0 )"));
GeometryPtr result(reducer2_.reduce(g1.get()));
ensure(result->equalsExact(g2.get()));
}
} // namespace tut
|