Skip to content

File test_contour_gen.cpp

File List > contour > tests > test_contour_gen.cpp

Go to the documentation of this file

#include <gtest/gtest.h>

#include "config_input/config_input.hpp"
#include "contour/contour.hpp"
#include "contour/contour_gen.hpp"
#include "isom/colors.hpp"
#include "lib/grid/grid.hpp"

class TestGrid : public GeoGrid<double> {
 public:
  explicit TestGrid(const std::vector<std::vector<double>>& data)
      : GeoGrid<double>(data[0].size(), data.size(), GeoTransform(), GeoProjection()) {
    for (size_t i = 0; i < data.size(); i++) {
      for (size_t j = 0; j < data[0].size(); j++) {
        (*this)[{j, i}] = data[i][j];
      }
    }
  }
};

TEST(ContourGen, ContourGen) {
  std::vector<std::vector<double>> data = {{0.5, 0.5, 0.5}, {0.5, 1.5, 0.5}, {0.5, 0.5, 0.5}};
  TestGrid grid(data);

  ContourConfigs configs({{"normal", ContourConfig{1.0, 1, RGBColor(0, 0, 0, 0), 0.14}}});
  std::vector<Contour> contours = generate_contours(
      grid, ContourConfigs({{"normal", ContourConfig{1.0, 1, RGBColor(0, 0, 0, 0), 0.14}}}),
      ProgressTracker());
  EXPECT_EQ(contours.size(), 1);
  EXPECT_EQ(contours[0].points().size(), 5);
  EXPECT_DOUBLE_EQ(contours[0].height(), 1.0);
  EXPECT_TRUE(contours[0].is_loop());
}

TEST(ContourGen, ContourGen2) {
  std::vector<std::vector<double>> data = {{0.5, 0.5, 0.5, 0.5, 0.5}, {0.5, 1.5, 1.5, 1.5, 0.5},
                                           {0.5, 1.5, 2.1, 1.5, 0.5}, {0.5, 1.5, 2.1, 1.5, 0.5},
                                           {0.5, 1.5, 1.5, 1.5, 1.5}, {0.5, 0.5, 0.5, 1.5, 1.5}};
  TestGrid grid(data);

  std::vector<Contour> contours = generate_contours(
      grid, ContourConfigs{{{"normal", ContourConfig{1.0, 1, RGBColor(0, 0, 0, 0), 0.14}}}},
      ProgressTracker());
  EXPECT_EQ(contours.size(), 2);

  EXPECT_EQ(contours[0].points().size(), 14);
  EXPECT_DOUBLE_EQ(contours[0].height(), 1.0);
  EXPECT_FALSE(contours[0].is_loop());

  EXPECT_EQ(contours[1].points().size(), 7);
  EXPECT_DOUBLE_EQ(contours[1].height(), 2.0);
  EXPECT_TRUE(contours[1].is_loop());
}