itk_module_test()
set(
  ITKQuadEdgeMeshFilteringTests
  itkAutomaticTopologyQuadEdgeMeshSourceTest.cxx
  itkBorderQuadEdgeMeshFilterTest.cxx
  itkBorderQuadEdgeMeshFilterTest2.cxx
  itkBinaryMask3DQuadEdgeMeshSourceTest.cxx
  itkCleanQuadEdgeMeshFilterTest.cxx
  itkDelaunayConformingQuadEdgeMeshFilterTest.cxx
  itkDiscreteGaussianCurvatureQuadEdgeMeshFilterTest.cxx
  itkDiscreteMaximumCurvatureQuadEdgeMeshFilterTest.cxx
  itkDiscreteMeanCurvatureQuadEdgeMeshFilterTest.cxx
  itkDiscreteMinimumCurvatureQuadEdgeMeshFilterTest.cxx
  itkNormalQuadEdgeMeshFilterTest.cxx
  itkParameterizationQuadEdgeMeshFilterTest.cxx
  itkQuadricDecimationQuadEdgeMeshFilterTest.cxx
  itkRegularSphereQuadEdgeMeshSourceTest.cxx
  itkSmoothingQuadEdgeMeshFilterTest.cxx
  itkSquaredEdgeLengthDecimationQuadEdgeMeshFilterTest.cxx
  itkLaplacianDeformationQuadEdgeMeshFilterWithSoftConstraintsTest.cxx
  itkLaplacianDeformationQuadEdgeMeshFilterWithHardConstraintsTest.cxx
)

createtestdriver(ITKQuadEdgeMeshFiltering "${ITKQuadEdgeMeshFiltering-Test_LIBRARIES}"
                 "${ITKQuadEdgeMeshFilteringTests}"
)

set(INPUTDATA ${ITK_DATA_ROOT}/Input)
set(TEMP ${ITK_TEST_OUTPUT_DIR})

itk_add_test(
  NAME itkBorderQuadEdgeMeshFilterTest_0_0
  COMMAND
    ITKQuadEdgeMeshFilteringTestDriver
    itkBorderQuadEdgeMeshFilterTest
    DATA{${INPUTDATA}/mushroom.vtk}
    0
    0
    ${TEMP}/border00.vtk
)

itk_add_test(
  NAME itkBorderQuadEdgeMeshFilterTest_0_1
  COMMAND
    ITKQuadEdgeMeshFilteringTestDriver
    itkBorderQuadEdgeMeshFilterTest
    DATA{${INPUTDATA}/mushroom.vtk}
    0
    1
    ${TEMP}/border01.vtk
)

itk_add_test(
  NAME itkBorderQuadEdgeMeshFilterTest_1_0
  COMMAND
    ITKQuadEdgeMeshFilteringTestDriver
    itkBorderQuadEdgeMeshFilterTest
    DATA{${INPUTDATA}/mushroom.vtk}
    1
    0
    ${TEMP}/border10.vtk
)

itk_add_test(
  NAME itkBorderQuadEdgeMeshFilterTest_1_1
  COMMAND
    ITKQuadEdgeMeshFilteringTestDriver
    itkBorderQuadEdgeMeshFilterTest
    DATA{${INPUTDATA}/mushroom.vtk}
    1
    1
    ${TEMP}/border11.vtk
)

itk_add_test(
  NAME itkBorderQuadEdgeMeshFilterTest2_0
  COMMAND
    ITKQuadEdgeMeshFilteringTestDriver
    itkBorderQuadEdgeMeshFilterTest2
    0
)

itk_add_test(
  NAME itkBorderQuadEdgeMeshFilterTest2_1
  COMMAND
    ITKQuadEdgeMeshFilteringTestDriver
    itkBorderQuadEdgeMeshFilterTest2
    1
)
itk_add_test(
  NAME itkSquaredEdgeLengthDecimationQuadEdgeMeshFilterTest
  COMMAND
    ITKQuadEdgeMeshFilteringTestDriver
    itkSquaredEdgeLengthDecimationQuadEdgeMeshFilterTest
    DATA{${INPUTDATA}/mushroom.vtk}
    20
    ${TEMP}/temp_SquaredEdgeLengthDecimationResult1.vtk
)

itk_add_test(
  NAME itkSmoothingQuadEdgeMeshFilterTest0
  COMMAND
    ITKQuadEdgeMeshFilteringTestDriver
    itkSmoothingQuadEdgeMeshFilterTest
    DATA{${INPUTDATA}/genusZeroSurface01.vtk}
    10
    0.1
    0
    ${TEMP}/temp_SmoothResult0.vtk
)

itk_add_test(
  NAME itkSmoothingQuadEdgeMeshFilterTest1
  COMMAND
    ITKQuadEdgeMeshFilteringTestDriver
    itkSmoothingQuadEdgeMeshFilterTest
    DATA{${INPUTDATA}/genusZeroSurface01.vtk}
    10
    0.1
    1
    ${TEMP}/temp_SmoothResult1.vtk
)

set(
  CURV_TESTS
  Gaussian
  Maximum
  Mean
  Minimum
)
foreach(loop_var ${CURV_TESTS})
  itk_add_test(
    NAME itkDiscrete${loop_var}CurvatureQuadEdgeMeshFilterTest
    COMMAND
      ITKQuadEdgeMeshFilteringTestDriver
      itkDiscrete${loop_var}CurvatureQuadEdgeMeshFilterTest
      DATA{${INPUTDATA}/mushroom.vtk}
  )
endforeach()

itk_add_test(
  NAME itkDelaunayConformingQuadEdgeMeshFilterTest
  COMMAND
    ITKQuadEdgeMeshFilteringTestDriver
    itkDelaunayConformingQuadEdgeMeshFilterTest
    DATA{${INPUTDATA}/mushroom.vtk}
    ${TEMP}/mushroom_delaunay.vtk
)
itk_add_test(
  NAME itkCleanQuadEdgeMeshFilterTest
  COMMAND
    ITKQuadEdgeMeshFilteringTestDriver
    itkCleanQuadEdgeMeshFilterTest
    DATA{${INPUTDATA}/mushroom.vtk}
    0.1
    ${TEMP}/temp_CleanResult1.vtk
)
itk_add_test(
  NAME itkQuadricDecimationQuadEdgeMeshFilterTest
  COMMAND
    ITKQuadEdgeMeshFilteringTestDriver
    itkQuadricDecimationQuadEdgeMeshFilterTest
    DATA{${INPUTDATA}/mushroom.vtk}
    100
    ${TEMP}/temp_QuadricDecimationResult1.vtk
)
itk_add_test(
  NAME itkQuadEdgeMeshQuadricDecimationTetrahedronTest
  COMMAND
    ITKQuadEdgeMeshFilteringTestDriver
    itkQuadricDecimationQuadEdgeMeshFilterTest
    DATA{${INPUTDATA}/tetrahedron.vtk}
    2
    ${TEMP}/temp_QuadricDecimationTetrahedron.vtk
)
itk_add_test(
  NAME itkAutomaticTopologyQuadEdgeMeshSourceTest
  COMMAND
    ITKQuadEdgeMeshFilteringTestDriver
    itkAutomaticTopologyQuadEdgeMeshSourceTest
)
itk_add_test(
  NAME itkBinaryMask3DQuadEdgeMeshSourceTest
  COMMAND
    ITKQuadEdgeMeshFilteringTestDriver
    itkBinaryMask3DQuadEdgeMeshSourceTest
)
itk_add_test(
  NAME itkRegularSphereQuadEdgeMeshSourceTest
  COMMAND
    ITKQuadEdgeMeshFilteringTestDriver
    itkRegularSphereQuadEdgeMeshSourceTest
    ${ITK_TEST_OUTPUT_DIR}/itkRegularSphereMeshQuadEdgeMeshSourceTest.vtk
)
itk_add_test(
  NAME itkNormalQuadEdgeMeshFilterTest0
  COMMAND
    ITKQuadEdgeMeshFilteringTestDriver
    itkNormalQuadEdgeMeshFilterTest
    DATA{${INPUTDATA}/mushroom.vtk}
    0
)
itk_add_test(
  NAME itkNormalQuadEdgeMeshFilterTest1
  COMMAND
    ITKQuadEdgeMeshFilteringTestDriver
    itkNormalQuadEdgeMeshFilterTest
    DATA{${INPUTDATA}/mushroom.vtk}
    1
)
itk_add_test(
  NAME itkNormalQuadEdgeMeshFilterTest2
  COMMAND
    ITKQuadEdgeMeshFilteringTestDriver
    itkNormalQuadEdgeMeshFilterTest
    DATA{${INPUTDATA}/mushroom.vtk}
    2
)

foreach(area 0 1)
  itk_add_test(
    NAME
      itkLaplacianDeformationQuadEdgeMeshFilterWithSoftConstraintsArea${area}Test
    COMMAND
      ITKQuadEdgeMeshFilteringTestDriver
      itkLaplacianDeformationQuadEdgeMeshFilterWithSoftConstraintsTest
      DATA{${INPUTDATA}/genusZeroSurface01.vtk}
      ${TEMP}/LaplacianDeformationSoftConstraintsOutput_area${area}.vtk
      ${area}
  )
  itk_add_test(
    NAME
      itkLaplacianDeformationQuadEdgeMeshFilterWithHardConstraintsArea${area}Test
    COMMAND
      ITKQuadEdgeMeshFilteringTestDriver
      itkLaplacianDeformationQuadEdgeMeshFilterWithHardConstraintsTest
      DATA{${INPUTDATA}/genusZeroSurface01.vtk}
      ${TEMP}/LaplacianDeformationHardConstraintsOutput_area${area}.vtk
      ${area}
  )
endforeach()

foreach(border 0 1)
  foreach(
    coeff
    0
    1
    2
    3
    4
  )
    foreach(solver 0 1)
      itk_add_test(
        NAME
          itkParameterizationQuadEdgeMeshFilterTestb${border}_c${coeff}_s${solver}
        COMMAND
          ITKQuadEdgeMeshFilteringTestDriver
          itkParameterizationQuadEdgeMeshFilterTest
          DATA{${INPUTDATA}/mushroom.vtk}
          ${border}
          ${coeff}
          ${solver}
          ${TEMP}/param_border${border}_coeff${coeff}_solver${solver}.vtk
      )
    endforeach()
  endforeach()
endforeach()
