Skip to content
Snippets Groups Projects
ConstKBinAxisTest.h 2.9 KiB
Newer Older
  • Learn to ignore specific revisions
  • #ifndef CONSTKBINAXISTEST_H
    #define CONSTKBINAXISTEST_H
    
    #include "ConstKBinAxis.h"
    #include "OutputDataIOHelper.h"
    #include "Units.h"
    #include "gtest/gtest.h"
    #include <vector>
    
    class ConstKBinAxisTest: public ::testing::Test
    {
    protected:
        ConstKBinAxisTest()
            : m_nbins(10)
            , m_start(-5.0*Units::degree)
            , m_end(5.0*Units::degree)
            , m_axis("name", m_nbins, m_start, m_end)
        {
            double start_sin = std::sin(m_start);
            double end_sin = std::sin(m_end);
            double step = (end_sin-start_sin)/m_nbins;
    
            for(size_t i=0; i<m_nbins; ++i) {
                m_centers.push_back( (std::asin(start_sin + step*i) +  std::asin(start_sin + step*(i+1)))/2.0 );
            }
    
            for(size_t i=0; i<m_nbins+1; ++i) {
                m_boundaries.push_back( std::asin(start_sin + step*i) );
            }
    
        }
    
        size_t m_nbins;
        double m_start;
        double m_end;
        ConstKBinAxis m_axis;
        std::vector<double> m_centers;
        std::vector<double> m_boundaries;
    };
    
    
    //[-5.0, -3.99816897832528, -2.9975609824866662, -1.99786732193833, -0.9987818274427882, 0.0, 0.9987818274427874, 1.9978673219383292, 2.997560982486666, 3.998168978325279, 5.0]
    TEST_F(ConstKBinAxisTest, TypicalAxis)
    {
        EXPECT_EQ(m_nbins, m_axis.getSize());
        EXPECT_EQ(m_start, m_axis.getMin());
        EXPECT_EQ(m_end, m_axis.getMax());
    
    
        EXPECT_DOUBLE_EQ(m_start, m_axis.getBinBoundaries().front());
        EXPECT_DOUBLE_EQ(m_end, m_axis.getBinBoundaries().back());
    
    
        for(size_t i=0; i<m_axis.getSize(); ++i) {
            EXPECT_DOUBLE_EQ( m_centers[i], m_axis[i]);
        }
    
        for(size_t i=0; i<m_axis.getSize(); ++i) {
            EXPECT_DOUBLE_EQ( m_boundaries[i], m_axis.getBin(i).m_lower);
            EXPECT_DOUBLE_EQ( m_boundaries[i+1], m_axis.getBin(i).m_upper);
        }
    
    }
    
    
    TEST_F(ConstKBinAxisTest, CheckClone)
    {
        ConstKBinAxis *clone=m_axis.clone();
        EXPECT_TRUE(m_axis == *clone);
        delete clone;
    }
    
    
    TEST_F(ConstKBinAxisTest, IOStream)
    {
        std::ostringstream oss;
        oss << m_axis;
    
    
        ConstKBinAxis *result = dynamic_cast<ConstKBinAxis *>(OutputDataIOHelper::createFixedBinAxis(oss.str()));
    
        EXPECT_TRUE(m_axis == *result);
        delete result;
    }
    
    
    //[-5.0, -3.99816897832528, -2.9975609824866662, -1.99786732193833, -0.9987818274427882, 0.0, 0.9987818274427874, 1.9978673219383292, 2.997560982486666, 3.998168978325279, 5.0]
    
    TEST_F(ConstKBinAxisTest, ClippedAxis)
    {
        ConstKBinAxis *clip1 = m_axis.createClippedAxis(Units::deg2rad(-10.0), Units::deg2rad(10.0));
        EXPECT_TRUE(*clip1 == m_axis);
        delete clip1;
    
        ConstKBinAxis *clip2 = m_axis.createClippedAxis(Units::deg2rad(-3.0), Units::deg2rad(3.0));
    
        EXPECT_EQ(clip2->getSize(), size_t(8));
    
        std::vector<double> boundaries = clip2->getBinBoundaries();
        for(size_t i=0; i<boundaries.size(); ++i) {
            EXPECT_EQ(boundaries[i], m_axis.getBin(1+i).m_lower);
    //        EXPECT_NEAR(boundaries[i], m_axis.getBin(1+i).m_lower, 1e-10);
        }
        delete clip2;
    }