#include <amdis/AMDiS.hpp>
#include <amdis/utility/UniqueBorderPartition.hpp>

#include <dune/grid/yaspgrid.hh>

#include "Tests.hpp"

using namespace AMDiS;

template <class GridView>
void test(GridView const& gv)
{
  using Grid = typename GridView::Grid;
  using DataHandle = UniqueBorderPartitionDataHandle<Grid>;

  using EntitySet = typename DataHandle::EntitySet;
  EntitySet borderEntities;

  DataHandle handle(gv.comm().rank(), borderEntities, gv.grid().globalIdSet());
  gv.communicate(handle,
    Dune::InterfaceType::InteriorBorder_InteriorBorder_Interface,
    Dune::CommunicationDirection::ForwardCommunication);

  msg("#borderEntities = {}", borderEntities.size());
}

int main(int argc, char** argv)
{
  Environment env(argc, argv);

  Dune::YaspGrid<2> grid1({1.0, 1.0}, {8,8}, 0, 0); // no overlap
  Dune::YaspGrid<2> grid2({1.0, 1.0}, {8,8}, 0, 1); // overlap = 1
  Dune::YaspGrid<3> grid3({1.0, 1.0, 1.0}, {8,8,8}, 0, 1); // overlap = 1

  test(grid1.leafGridView());
  test(grid2.leafGridView());
  test(grid3.leafGridView());

  return report_errors();
}