#include "vtkMultiNewickTreeReader.h"
#include "vtkMultiPieceDataSet.h"
#include "vtkSmartPointer.h"
#include "vtkTestUtilities.h"
#include "vtkTree.h"

int TestMultiNewickTreeReader(int argc, char* argv[])
{
  char* file = vtkTestUtilities::ExpandDataFileName(argc, argv, "Data/Infovis/multi_tree.tre");

  cerr << "file: " << file << endl;

  vtkSmartPointer<vtkMultiNewickTreeReader> reader =
    vtkSmartPointer<vtkMultiNewickTreeReader>::New();
  reader->SetFileName(file);
  delete[] file;
  reader->Update();
  vtkMultiPieceDataSet* forest = reader->GetOutput();

  unsigned int numOfTrees = forest->GetNumberOfPieces();

  int error_count = 0;

  if (numOfTrees != 3)
  {
    ++error_count;
  }

  for (unsigned int i = 0; i < numOfTrees; i++)
  {
    vtkTree* tr = vtkTree::SafeDownCast(forest->GetPieceAsDataObject(i));
    if (!tr)
    {
      ++error_count;
    }
  }

  cerr << error_count << " errors" << endl;
  return error_count;
}
