Skip to content

Commit

Permalink
Real tests for voxel downsize.
Browse files Browse the repository at this point in the history
  • Loading branch information
abellgithub committed Feb 19, 2020
1 parent 398c6d4 commit 748deaa
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 66 deletions.
9 changes: 0 additions & 9 deletions filters/VoxelDownsizeFilter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -141,11 +141,6 @@ bool VoxelDownsizeFilter::voxelize(PointRef& point)
Voxel v = std::make_tuple((int)(std::floor(x / m_cell)),
(int)(std::floor(y / m_cell)), (int)(std::floor(z / m_cell)));

std::cerr << "V = " <<
std::get<0>(v) << "/" <<
std::get<1>(v) << "/" <<
std::get<2>(v) << "!\n";

auto inserted = m_populatedVoxels.insert(v).second;
if ((m_mode == Mode::Center) && inserted)
{
Expand All @@ -155,10 +150,6 @@ bool VoxelDownsizeFilter::voxelize(PointRef& point)
(std::get<1>(v) + 0.5) * m_cell + m_originY);
point.setField(Dimension::Id::Z,
(std::get<2>(v) + 0.5) * m_cell + m_originZ);
std::cerr << "Center = " <<
(std::get<0>(v) + .5) * m_cell + m_originX << "/" <<
(std::get<1>(v) + .5) * m_cell + m_originY << "/" <<
(std::get<2>(v) + .5) * m_cell + m_originZ << "!\n";
}
return inserted;
}
Expand Down
141 changes: 84 additions & 57 deletions test/unit/filters/VoxelDownsizeFilterTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@
* OF SUCH DAMAGE.
****************************************************************************/

#include <array>

#include <pdal/pdal_test_main.hpp>

#include <pdal/StageFactory.hpp>
Expand Down Expand Up @@ -67,7 +69,7 @@ void standard_test(std::string mode) {
PointViewSet set = filter->execute(t);
EXPECT_EQ(set.size(), 1U);
PointViewPtr v = *set.begin();
EXPECT_EQ(v->size(), 7788U);
EXPECT_EQ(v->size(), 7824U);
}

void origin_test(std::string mode)
Expand All @@ -77,6 +79,8 @@ void origin_test(std::string mode)
t.layout()->registerDims({Id::X, Id::Y, Id::Z});
PointViewPtr v(new PointView(t));

// We choose 5, 5, 5 to put the origin at 0, 0, 0, since the cell size
// is 10.
std::vector<std::array<double, 3>> plist
{ { 5, 5, 5 },
{ 1, 1, -1 },
Expand Down Expand Up @@ -120,84 +124,108 @@ void origin_test(std::string mode)
double x = p.getFieldAs<double>(Dimension::Id::X);
double y = p.getFieldAs<double>(Dimension::Id::Y);
double z = p.getFieldAs<double>(Dimension::Id::Z);
std::cerr << "x/y/z = " << x << "/" << y << "/" << z << "!\n";
/**
EXPECT_EQ(p.getFieldAs<double>(Dimension::Id::X),
plist[id][0] *
**/

double tx = plist[id][0] * 5;
double ty = plist[id][1] * 5;
double tz = plist[id][2] * 5;
if (id == 0)
{
tx = 5;
ty = 5;
tz = 5;
}
EXPECT_EQ(tx, x);
EXPECT_EQ(ty, y);
EXPECT_EQ(tz, z);
id++;
}
}
}

void stream_test(std::string mode) {
void stream_test(std::string mode)
{
class StreamReader : public Reader, public Streamable
{
private:
int m_count = 0;

public:
std::string getName() const
{
return "readers.stream";
}
bool processOne(PointRef& point)
{
static int i = 0;

if (i == 0)
{
point.setField(Id::X, 2);
point.setField(Id::Y, 2);
}
else if (i == 1)
{
point.setField(Id::X, 8);
point.setField(Id::Y, 2);
}
else if (i == 2)
{
point.setField(Id::X, 10);
point.setField(Id::Y, 2);
}
else
return false;
i++;
constexpr std::array<std::array<double, 2>, 9> a
{{
{ 2, 2 },
{ 7, 2 },
{ 3, 3 }, // Same as 2, 2
{ 9, 1 },
{ 5, 1 }, // Same as 7, 2
{ -2, -2 },
{ -3, -3 }, // Same as -2, -2
{ 6, 7 },
{ 7.5, 5 } // Same as 6, 7
}};

point.setField(Id::X, a[m_count][0]);
point.setField(Id::Y, a[m_count][1]);
m_count++;
if (m_count == 9)
return false;
return true;
}
};

class TestFilter : public Filter, public Streamable
{
public:
TestFilter(const std::string& mode) : m_mode(mode)
{}

std::string getName() const
{
return "filters.testfilter";
}
point_count_t m_count;

private:
virtual void ready(PointTableRef)
{
m_count = 0;
}
std::string m_mode;
point_count_t m_count = 0;

virtual bool processOne(PointRef& point)
{
if (m_count == 0)
{
std::cerr << "0 Point ID = " << point.pointId() << "!\n";
EXPECT_EQ(point.getFieldAs<int>(Id::X), 2);
EXPECT_EQ(point.getFieldAs<int>(Id::Y), 2);
}
if (m_count == 1)
EXPECT_LT(m_count, 5);

int x = point.getFieldAs<int>(Dimension::Id::X);
int y = point.getFieldAs<int>(Dimension::Id::Y);
if (m_mode == "first")
{
std::cerr << "1 Point ID = " << point.pointId() << "!\n";
EXPECT_EQ(point.getFieldAs<int>(Id::X), 8);
EXPECT_EQ(point.getFieldAs<int>(Id::Y), 2);
constexpr std::array<std::array<int, 2>, 5> f
{{
{ 2, 2 },
{ 7, 2 },
{ 9, 1 },
{ -2, -2 },
{ 6, 7 }
}};

EXPECT_EQ(x, f[m_count][0]);
EXPECT_EQ(y, f[m_count][1]);
}
if (m_count == 2)
else
{
std::cerr << "2 Point ID = " << point.pointId() << "!\n";
EXPECT_EQ(point.getFieldAs<int>(Id::X), 10);
EXPECT_EQ(point.getFieldAs<int>(Id::Y), 2);
constexpr std::array<std::array<int, 2>, 5> f
{{
{ 2, 2 },
{ 6, 2 },
{ 10, 2 },
{ -2, -2 },
{ 6, 6 }
}};

EXPECT_EQ(x, f[m_count][0]);
EXPECT_EQ(y, f[m_count][1]);
}
m_count++;
return true;
Expand All @@ -207,7 +235,7 @@ void stream_test(std::string mode) {
StreamReader r;
VoxelDownsizeFilter voxelfilter;
Options o;
o.add("cell", 5);
o.add("cell", 4);
o.add("mode", mode);
voxelfilter.setInput(r);
voxelfilter.setOptions(o);
Expand All @@ -217,7 +245,7 @@ void stream_test(std::string mode) {
table.layout()->registerDim(Id::Y);
table.layout()->registerDim(Id::Z);

TestFilter f;
TestFilter f(mode);
f.setInput(voxelfilter);
f.prepare(table);
f.execute(table);
Expand All @@ -233,26 +261,25 @@ TEST(VoxelDownsizeFilter, voxelcenter_origin)
origin_test("center");
}

/**
TEST(VoxelDownsizeFilter, firstinvoxel_stream)
TEST(VoxelDownsizeFilter, firstinvoxel_standard)
{
stream_test("firstinvoxel");
standard_test("first");
}

TEST(VoxelDownsizeFilter, firstinvoxel_standard)
TEST(VoxelDownsizeFilter, voxelcenter_standard)
{
standard_test("firstinvoxel");
standard_test("center");
}

TEST(VoxelDownsizeFilter, voxelcenter_standard)
TEST(VoxelDownsizeFilter, firstinvoxel_stream)
{
standard_test("voxelcenter");
stream_test("first");
}


TEST(VoxelDownsizeFilter, voxelcenter_stream)
{
stream_test("voxelcenter");
stream_test("center");
}
**/

} // namespace

0 comments on commit 748deaa

Please sign in to comment.