refactor: Update CMake build system and streamline Core object serialization and property handling.
This commit is contained in:
@@ -54,7 +54,8 @@ install(TARGETS ${libname}
|
||||
|
||||
install(FILES ${HEADERS} DESTINATION ${INSTALL_INC_DIR}/Math)
|
||||
|
||||
# TESTING
|
||||
# include(uLibTargetMacros)
|
||||
# add_subdirectory(testing)
|
||||
if(BUILD_TESTING)
|
||||
include(uLibTargetMacros)
|
||||
add_subdirectory(testing)
|
||||
endif()
|
||||
|
||||
|
||||
@@ -23,88 +23,90 @@
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
|
||||
|
||||
|
||||
#include "Math/Accumulator.h"
|
||||
#include "testing-prototype.h"
|
||||
|
||||
#include <TRandom.h>
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
|
||||
|
||||
//#include <boost/accumulators/framework/accumulator_set.hpp>
|
||||
//#include <boost/accumulators/statistics/count.hpp>
|
||||
//#include <boost/accumulators/accumulators.hpp>
|
||||
// #include <boost/accumulators/framework/accumulator_set.hpp>
|
||||
// #include <boost/accumulators/statistics/count.hpp>
|
||||
// #include <boost/accumulators/accumulators.hpp>
|
||||
|
||||
using namespace uLib;
|
||||
|
||||
int test_ABTrim() {
|
||||
|
||||
Accumulator_ABTrim<float> acc;
|
||||
Accumulator_ABTrim<float> acc;
|
||||
|
||||
acc.SetABTrim(1,1);
|
||||
acc.SetABTrim(1, 1);
|
||||
|
||||
std::vector<float> v;
|
||||
for(float tmpf : {1,5,5,5,300}) v.push_back(tmpf);
|
||||
//v << 1,5,5,5,300;
|
||||
std::vector<float> v;
|
||||
for (float tmpf : {1, 5, 5, 5, 300})
|
||||
v.push_back(tmpf);
|
||||
// v << 1,5,5,5,300;
|
||||
|
||||
for(std::vector<float>::iterator itr=v.begin(); itr<v.end(); itr++)
|
||||
acc += *itr;
|
||||
for (std::vector<float>::iterator itr = v.begin(); itr < v.end(); itr++)
|
||||
acc += *itr;
|
||||
|
||||
// TODO missing operator <<
|
||||
//std::cout << "Accumulating Trim(1,1) vector: "
|
||||
// << v << " ... out = " << acc() << "\n";
|
||||
|
||||
return( acc() == 15.0 );
|
||||
// TODO missing operator <<
|
||||
// std::cout << "Accumulating Trim(1,1) vector: "
|
||||
// << v << " ... out = " << acc() << "\n";
|
||||
|
||||
return (acc() == 15.0);
|
||||
}
|
||||
|
||||
|
||||
int test_Mean() {
|
||||
Accumulator_Mean<float> mean;
|
||||
TRandom rnd;
|
||||
const int c = 10000000;
|
||||
std::vector<float> v;
|
||||
v.reserve(c);
|
||||
for(int i=0;i<c;++i) v.push_back( rnd.Gaus(2000,5) );
|
||||
|
||||
float m = 0;
|
||||
for(int i=0;i<c;++i) m += v[i];
|
||||
m /= c;
|
||||
std::cout << "simple mean: " << m << "\n";
|
||||
|
||||
for(int i=0;i<c;++i) mean(v[i]);
|
||||
std::cout << "mean pass: " << mean() << "\n";
|
||||
mean.AddPass();
|
||||
for(int i=0;i<c;++i) mean(v[i]);
|
||||
std::cout << "mean pass: " << mean() << "\n";
|
||||
mean.AddPass();
|
||||
for(int i=0;i<c;++i) mean(v[i]);
|
||||
std::cout << "mean pass: " << mean() << "\n";
|
||||
mean.AddPass();
|
||||
for(int i=0;i<c;++i) mean(v[i]);
|
||||
std::cout << "mean pass: " << mean() << "\n";
|
||||
mean.AddPass();
|
||||
for(int i=0;i<c;++i) mean(v[i]);
|
||||
std::cout << "mean pass: " << mean() << "\n";
|
||||
mean.AddPass();
|
||||
for(int i=0;i<c;++i) mean(v[i]);
|
||||
std::cout << "mean pass: " << mean() << "\n";
|
||||
mean.AddPass();
|
||||
for(int i=0;i<c;++i) mean(v[i]);
|
||||
std::cout << "mean pass: " << mean() << "\n";
|
||||
Accumulator_Mean<float> mean;
|
||||
TRandom rnd;
|
||||
const int c = 10000000;
|
||||
std::vector<float> v;
|
||||
v.reserve(c);
|
||||
for (int i = 0; i < c; ++i)
|
||||
v.push_back(rnd.Gaus(2000, 5));
|
||||
|
||||
float m = 0;
|
||||
for (int i = 0; i < c; ++i)
|
||||
m += v[i];
|
||||
m /= c;
|
||||
std::cout << "simple mean: " << m << "\n";
|
||||
|
||||
for (int i = 0; i < c; ++i)
|
||||
mean(v[i]);
|
||||
std::cout << "mean pass: " << mean() << "\n";
|
||||
mean.AddPass();
|
||||
for (int i = 0; i < c; ++i)
|
||||
mean(v[i]);
|
||||
std::cout << "mean pass: " << mean() << "\n";
|
||||
mean.AddPass();
|
||||
for (int i = 0; i < c; ++i)
|
||||
mean(v[i]);
|
||||
std::cout << "mean pass: " << mean() << "\n";
|
||||
mean.AddPass();
|
||||
for (int i = 0; i < c; ++i)
|
||||
mean(v[i]);
|
||||
std::cout << "mean pass: " << mean() << "\n";
|
||||
mean.AddPass();
|
||||
for (int i = 0; i < c; ++i)
|
||||
mean(v[i]);
|
||||
std::cout << "mean pass: " << mean() << "\n";
|
||||
mean.AddPass();
|
||||
for (int i = 0; i < c; ++i)
|
||||
mean(v[i]);
|
||||
std::cout << "mean pass: " << mean() << "\n";
|
||||
mean.AddPass();
|
||||
for (int i = 0; i < c; ++i)
|
||||
mean(v[i]);
|
||||
std::cout << "mean pass: " << mean() << "\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
int main(void) {
|
||||
BEGIN_TESTING(Accumulator);
|
||||
BEGIN_TESTING(Accumulator);
|
||||
|
||||
//TEST1( test_ABTrim() );
|
||||
test_Mean();
|
||||
// TEST1( test_ABTrim() );
|
||||
test_Mean();
|
||||
|
||||
END_TESTING;
|
||||
END_TESTING;
|
||||
}
|
||||
|
||||
@@ -17,6 +17,8 @@ set(TESTS
|
||||
set(LIBRARIES
|
||||
${PACKAGE_LIBPREFIX}Core
|
||||
${PACKAGE_LIBPREFIX}Math
|
||||
Boost::serialization
|
||||
Eigen3::Eigen
|
||||
)
|
||||
|
||||
uLib_add_tests(Math)
|
||||
|
||||
@@ -23,30 +23,25 @@
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
|
||||
|
||||
|
||||
#include "testing-prototype.h"
|
||||
|
||||
#include "Math/TriangleMesh.h"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
using namespace uLib;
|
||||
|
||||
int main()
|
||||
{
|
||||
BEGIN_TESTING(Triangle Mesh);
|
||||
int main() {
|
||||
BEGIN_TESTING(Triangle Mesh);
|
||||
|
||||
TriangleMesh mesh;
|
||||
TriangleMesh mesh;
|
||||
|
||||
mesh.AddPoint(Vector3f(0,0,0));
|
||||
mesh.AddPoint(Vector3f(0,1,0));
|
||||
mesh.AddPoint(Vector3f(1,0,0));
|
||||
mesh.AddPoint(Vector3f(0, 0, 0));
|
||||
mesh.AddPoint(Vector3f(0, 1, 0));
|
||||
mesh.AddPoint(Vector3f(1, 0, 0));
|
||||
|
||||
mesh.AddTriangle(Vector3i(0,1,2));
|
||||
mesh.AddTriangle(Vector3i(0, 1, 2));
|
||||
|
||||
mesh.PrintSelf(std::cout);
|
||||
|
||||
mesh.PrintSelf(std::cout);
|
||||
|
||||
END_TESTING;
|
||||
END_TESTING;
|
||||
}
|
||||
|
||||
@@ -23,129 +23,114 @@
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
|
||||
|
||||
|
||||
#include "Math/StructuredGrid.h"
|
||||
#include "Math/VoxRaytracer.h"
|
||||
#include "Math/StructuredGrid.h"
|
||||
#include "testing-prototype.h"
|
||||
#include <iostream>
|
||||
|
||||
using namespace uLib;
|
||||
|
||||
|
||||
int Vector4f0(Vector4f c)
|
||||
{
|
||||
int Vector4f0(Vector4f c) {
|
||||
c(3) = 0;
|
||||
if ( fabs(c(0)) < 0.001 && fabs(c(1)) < 0.001 && fabs(c(2)) < 0.001 )
|
||||
if (fabs(c(0)) < 0.001 && fabs(c(1)) < 0.001 && fabs(c(2)) < 0.001)
|
||||
return 0;
|
||||
else
|
||||
return 1;
|
||||
}
|
||||
|
||||
//bool Comapare(const &t1, const T2 &t2)
|
||||
// bool Comapare(const &t1, const T2 &t2)
|
||||
//{
|
||||
// int out = 0;
|
||||
// out += t1.vox_id != t2.vox_id;
|
||||
// out += (fabs(t1.L) - fabs(t2.L)) > 0.001;
|
||||
// return out == 0;
|
||||
//}
|
||||
|
||||
// int out = 0;
|
||||
// out += t1.vox_id != t2.vox_id;
|
||||
// out += (fabs(t1.L) - fabs(t2.L)) > 0.001;
|
||||
// return out == 0;
|
||||
// }
|
||||
|
||||
typedef VoxRaytracer Raytracer;
|
||||
|
||||
int main()
|
||||
{
|
||||
BEGIN_TESTING(Math VoxRaytracer);
|
||||
int main() {
|
||||
BEGIN_TESTING(Math VoxRaytracer);
|
||||
|
||||
StructuredGrid img(Vector3i(2,2,2));
|
||||
img.SetSpacing(Vector3f(2,2,2));
|
||||
img.SetPosition(Vector3f(-2,0,-2));
|
||||
StructuredGrid img(Vector3i(2, 2, 2));
|
||||
img.SetSpacing(Vector3f(2, 2, 2));
|
||||
img.SetPosition(Vector3f(-2, 0, -2));
|
||||
|
||||
{
|
||||
HLine3f line;
|
||||
line.origin << 0.1, 4.1, 0.1, 1;
|
||||
line.direction << 0.1, -0.1, 0.1,0;
|
||||
Raytracer rt(img);
|
||||
HPoint3f pt;
|
||||
TEST1( rt.GetEntryPoint(line,pt) );
|
||||
TEST0( Vector4f0( pt - HPoint3f(0.2,4,0.2) ) );
|
||||
{
|
||||
HLine3f line;
|
||||
line.origin << 0.1, 4.1, 0.1, 1;
|
||||
line.direction << 0.1, -0.1, 0.1, 0;
|
||||
Raytracer rt(img);
|
||||
HPoint3f pt;
|
||||
TEST1(rt.GetEntryPoint(line, pt));
|
||||
TEST0(Vector4f0(pt - HPoint3f(0.2, 4, 0.2)));
|
||||
}
|
||||
|
||||
{
|
||||
HLine3f line;
|
||||
line.origin << 4, 0, 4, 1;
|
||||
line.direction << -0.1, 0.1, -0.1, 0;
|
||||
Raytracer rt(img);
|
||||
HPoint3f pt;
|
||||
TEST1(rt.GetEntryPoint(line, pt));
|
||||
TEST0(Vector4f0(pt - HPoint3f(2, 2, 2)));
|
||||
}
|
||||
|
||||
{ // Test a point inside image //
|
||||
StructuredGrid img(Vector3i(4, 4, 4));
|
||||
img.SetSpacing(Vector3f(2, 2, 2));
|
||||
img.SetPosition(Vector3f(-4, -4, -4));
|
||||
Raytracer ray(img);
|
||||
HPoint3f pt;
|
||||
HLine3f line;
|
||||
line.origin = HPoint3f(-3, -3, -3);
|
||||
// line.direction = HVector3f(1,1,1); //
|
||||
TEST1(ray.GetEntryPoint(line, pt));
|
||||
TEST1(pt == HPoint3f(-3, -3, -3));
|
||||
|
||||
Raytracer::RayData rdata =
|
||||
ray.TraceBetweenPoints(HPoint3f(-3, -3, -3), HPoint3f(3, 3, 3));
|
||||
for (const Raytracer::RayData::Element &el : rdata.Data()) {
|
||||
std::cout << " " << el.vox_id << " , " << el.L << "\n";
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
HLine3f line;
|
||||
line.origin << 4,0,4, 1;
|
||||
line.direction << -0.1, 0.1, -0.1, 0;
|
||||
Raytracer rt(img);
|
||||
HPoint3f pt;
|
||||
TEST1( rt.GetEntryPoint(line,pt) );
|
||||
TEST0( Vector4f0( pt - HPoint3f(2,2,2) ) );
|
||||
}
|
||||
{
|
||||
HPoint3f pt1(1, -0.5, 1);
|
||||
HPoint3f pt2(1, 4.5, 1);
|
||||
Raytracer rt(img);
|
||||
|
||||
{ // Test a point inside image //
|
||||
StructuredGrid img(Vector3i(4,4,4));
|
||||
img.SetSpacing(Vector3f(2,2,2));
|
||||
img.SetPosition(Vector3f(-4,-4,-4));
|
||||
Raytracer ray(img);
|
||||
HPoint3f pt;
|
||||
HLine3f line;
|
||||
line.origin = HPoint3f(-3,-3,-3);
|
||||
// line.direction = HVector3f(1,1,1); //
|
||||
TEST1( ray.GetEntryPoint(line,pt) );
|
||||
TEST1( pt == HPoint3f(-3,-3,-3) );
|
||||
Raytracer::RayData ray = rt.TraceBetweenPoints(pt1, pt2);
|
||||
TEST1(ray.Data().size() == 2);
|
||||
TEST1(ray.Data().at(0).vox_id == 6);
|
||||
TEST1(ray.Data().at(1).vox_id == 7);
|
||||
ray.PrintSelf(std::cout);
|
||||
}
|
||||
|
||||
Raytracer::RayData rdata = ray.TraceBetweenPoints(HPoint3f(-3,-3,-3), HPoint3f(3,3,3));
|
||||
for(const Raytracer::RayData::Element &el : rdata.Data())
|
||||
{
|
||||
std::cout << " " << el.vox_id << " , " << el.L << "\n";
|
||||
}
|
||||
}
|
||||
{
|
||||
HPoint3f pt1(5, 1, 1);
|
||||
HPoint3f pt2(-3, 1, 1);
|
||||
Raytracer rt(img);
|
||||
|
||||
Raytracer::RayData ray = rt.TraceBetweenPoints(pt1, pt2);
|
||||
TEST1(ray.Data().size() == 2);
|
||||
TEST1(ray.Data().at(0).vox_id == 6);
|
||||
TEST1(ray.Data().at(1).vox_id == 4);
|
||||
ray.PrintSelf(std::cout);
|
||||
}
|
||||
|
||||
{
|
||||
HPoint3f pt1(1,-0.5,1);
|
||||
HPoint3f pt2(1,4.5,1);
|
||||
Raytracer rt(img);
|
||||
{
|
||||
HPoint3f pt1(1, 1, 1);
|
||||
HPoint3f pt2(-1, 3, -1);
|
||||
Raytracer rt(img);
|
||||
|
||||
Raytracer::RayData ray = rt.TraceBetweenPoints(pt1,pt2);
|
||||
TEST1( ray.Data().size() == 2 );
|
||||
TEST1( ray.Data().at(0).vox_id == 6 );
|
||||
TEST1( ray.Data().at(1).vox_id == 7 );
|
||||
ray.PrintSelf(std::cout);
|
||||
}
|
||||
Raytracer::RayData ray = rt.TraceBetweenPoints(pt1, pt2);
|
||||
TEST1(ray.Data().size() == 4);
|
||||
TEST1(ray.Data().at(0).vox_id == 6);
|
||||
TEST1(ray.Data().at(1).vox_id == 4);
|
||||
TEST1(ray.Data().at(2).vox_id == 5);
|
||||
TEST1(ray.Data().at(3).vox_id == 1);
|
||||
ray.PrintSelf(std::cout);
|
||||
}
|
||||
|
||||
{
|
||||
HPoint3f pt1(5,1,1);
|
||||
HPoint3f pt2(-3,1,1);
|
||||
Raytracer rt(img);
|
||||
|
||||
Raytracer::RayData ray = rt.TraceBetweenPoints(pt1,pt2);
|
||||
TEST1( ray.Data().size() == 2 );
|
||||
TEST1( ray.Data().at(0).vox_id == 6 );
|
||||
TEST1( ray.Data().at(1).vox_id == 4 );
|
||||
ray.PrintSelf(std::cout);
|
||||
}
|
||||
|
||||
{
|
||||
HPoint3f pt1(1,1,1);
|
||||
HPoint3f pt2(-1,3,-1);
|
||||
Raytracer rt(img);
|
||||
|
||||
Raytracer::RayData ray = rt.TraceBetweenPoints(pt1,pt2);
|
||||
TEST1( ray.Data().size() == 4 );
|
||||
TEST1( ray.Data().at(0).vox_id == 6 );
|
||||
TEST1( ray.Data().at(1).vox_id == 4 );
|
||||
TEST1( ray.Data().at(2).vox_id == 5 );
|
||||
TEST1( ray.Data().at(3).vox_id == 1 );
|
||||
ray.PrintSelf(std::cout);
|
||||
}
|
||||
|
||||
END_TESTING
|
||||
END_TESTING
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user