#!/bin/sh
# autopkgtest check
# regression test for a vtkXMLWriter::WriteAsciiData() segfault:
# ascii .vtu output of a vtkUnstructuredGrid whose cells all share one
# type (implicit cell-type array, VTK >= 9.6) used to dereference a
# nullptr vtkArrayIterator.

set -e

export OMPI_MCA_orte_rsh_agent=/bin/false

WORKDIR=$(mktemp -d)
trap "rm -rf $WORKDIR" 0 INT QUIT ABRT PIPE TERM
cd $WORKDIR
mkdir src
cd src

cat <<EOF > CMakeLists.txt
cmake_minimum_required(VERSION 3.28)
project(demo)
find_package(VTK REQUIRED)

add_executable(demo demo.cpp)
target_link_libraries(demo \${VTK_LIBRARIES})
install(TARGETS demo DESTINATION bin)
EOF

cat <<EOF > demo.cpp
#include <vtkCellArray.h>
#include <vtkNew.h>
#include <vtkPoints.h>
#include <vtkUnstructuredGrid.h>
#include <vtkXMLUnstructuredGridWriter.h>

int main()
{
  vtkNew<vtkPoints> points;
  points->InsertNextPoint(0, 0, 0);
  points->InsertNextPoint(1, 0, 0);
  points->InsertNextPoint(2, 0, 0);

  vtkNew<vtkCellArray> cells;
  for (vtkIdType i = 0; i < 3; ++i)
  {
    cells->InsertNextCell(1, &i);
  }

  vtkNew<vtkUnstructuredGrid> grid;
  grid->SetPoints(points);
  // implicit (constant) cell-type array, since VTK 9.6
  grid->SetCells(VTK_VERTEX, cells);

  vtkNew<vtkXMLUnstructuredGridWriter> writer;
  writer->SetInputData(grid);
  writer->SetFileName("a.vtu");
  writer->SetDataModeToAscii();
  writer->Write();

  return EXIT_SUCCESS;
}
EOF

cd ..
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=./../inst ./../src
make
make install
echo "build: OK"
[ -x demo ]
./demo
cat a.vtu
echo "run: OK"
