#include #include #include "Function1D.h" #include "MatlabReader.h" #include "Matrix.h" #include "transmissionReconstruction/reconstruction/buildMatrix/DGradient.h" #include "transmissionReconstruction/reconstruction/reconstruction.h" inline double fourDecimalRound(double src){ return round(src*10000.0)/10000.0; } #define EXPECT_DOUBLE_AE(valueA,valueB)\ EXPECT_DOUBLE_EQ(fourDecimalRound(valueA),fourDecimalRound(valueB)) class Reconstruction_Test : public ::testing::Test { protected: static void SetUpReconstructionTester() { } static void TearDownTestCase() { } void SetUp() { } void TearDown() { } }; TEST_F(Reconstruction_Test, calculateMinimalMaximalTransducerPositions) { auto senderList = Aurora::Matrix::fromRawData(new double[6]{1, 2, 3, 1, 2, 4}, 3, 2); auto receiverList = Aurora::Matrix::fromRawData(new double[6]{1, 8, 3, 1, 2, 1}, 3, 2); auto result = Recon::calculateMinimalMaximalTransducerPositions(senderList,receiverList); EXPECT_DOUBLE_EQ(1.0,result.getData()[0]); EXPECT_DOUBLE_EQ(2,result.getData()[1]); EXPECT_DOUBLE_EQ(1.0,result.getData()[2]); EXPECT_DOUBLE_EQ(1.0,result.getData()[3]); EXPECT_DOUBLE_EQ(8,result.getData()[4]); EXPECT_DOUBLE_EQ(4,result.getData()[5]); } TEST_F(Reconstruction_Test, calculateResolution) { auto ddims = Aurora::Matrix::fromRawData(new double[6]{-0.1296,-0.1296,0.0185,0.1296,0.1295,0.1682}, 1, 6); auto dims = Aurora::Matrix::fromRawData(new double[3]{128,128,74}, 1, 3); auto result = Recon::calculateResolution(ddims, dims); EXPECT_DOUBLE_AE(0.0020,result[0]); EXPECT_DOUBLE_AE(0.0020,result[1]); EXPECT_DOUBLE_AE(0.0021,result[2]); } TEST_F(Reconstruction_Test, getDimensions) { auto ddims = Aurora::Matrix::fromRawData(new double[6]{-0.1296,-0.1296,0.0185,0.1296,0.1295,0.1682}, 1, 6); double numPixelXY = 128; auto result = Recon::getDimensions(numPixelXY,ddims); EXPECT_DOUBLE_AE(128,result[0]); EXPECT_DOUBLE_AE(128,result[1]); EXPECT_DOUBLE_AE(74,result[2]); } TEST_F(Reconstruction_Test, discretizePositions) { auto senderList = Aurora::Matrix::fromRawData(new double[6]{1, 2, 3, 1, 2, 4}, 3, 2); auto receiverList = Aurora::Matrix::fromRawData(new double[6]{1, 8, 3, 1, 2, 1}, 3, 2); double numPixelXY = 128; auto result = Recon::discretizePositions(senderList,receiverList,numPixelXY); EXPECT_DOUBLE_AE(128,result.receiverCoordList[1]); EXPECT_DOUBLE_AE(1,result.senderCoordList[1]); } TEST_F(Reconstruction_Test, DGradient) { MatlabReader m("/home/krad/TestData/DGradient.mat"); auto x = m.read("x"); auto y = m.read("y"); // x.forceReshape(x.getDataSize(), 1, 1); auto result = Recon::DGradient(x,1,2); for (size_t i = 0; i < result.getDataSize(); i++) { EXPECT_DOUBLE_AE(result.getData()[i],y.getData()[i])<<"index:"<