itk_module_test()

set(ITKFEMTests
    itkFEMExceptionTest.cxx
    itkFEMElement2DMembraneTest.cxx
    itkFEMElement3DMembraneTest.cxx
    itkFEMElement2DStrainTest.cxx
    itkFEMElement2DQuadraticTriangularTest.cxx
    itkFEMLinearSystemWrapperItpackTest.cxx
    itkFEMLinearSystemWrapperItpackTest2.cxx
    itkFEMLinearSystemWrapperVNLTest.cxx
    itkFEMLinearSystemWrapperDenseVNLTest.cxx
    itkFEMPArrayTest.cxx
    itkFEMElement2DC0LinearTriangleStressTest.cxx
    itkFEMElement2DC0LinearQuadrilateralStrainItpackTest.cxx
    itkFEMElement2DC0LinearTriangleStrainTest.cxx
    itkFEMElement2DC0LinearTriangleMembraneTest.cxx
    itkFEMElement2DC0LinearQuadrilateralStressTest.cxx
    itkFEMElement2DC0LinearQuadrilateralStrainTest.cxx
    itkFEMElement2DC0LinearQuadrilateralMembraneTest.cxx
    itkFEMElement2DC0QuadraticTriangleStrainTest.cxx
    itkFEMElement2DC0QuadraticTriangleStressTest.cxx
    itkFEMElement2DC0LinearLineStressTest.cxx
    itkFEMElement2DC1BeamTest.cxx
    itkFEMElement3DC0LinearHexahedronStrainTest.cxx
    itkFEMElement3DC0LinearHexahedronMembraneTest.cxx
    itkFEMElement3DC0LinearTetrahedronStrainTest.cxx
    itkFEMElement3DC0LinearTetrahedronMembraneTest.cxx
    itkFEMLoadBCMFCTest.cxx
    itkFEMLoadBCMFCTestUser.cxx
    itkFEMLoadEdgeTest.cxx
    itkFEMLoadGravConstTest.cxx
    itkFEMLoadPointTestUser.cxx
    itkFEMLandmarkLoadImplementationTest.cxx
    # itkFEMSolverTest2D.cxx
    itkFEMSolverTest3D.cxx
    itkImageToRectilinearFEMObjectFilter2DTest.cxx
    itkImageToRectilinearFEMObjectFilter3DTest.cxx
    itkFEMElement2DTest.cxx
    itkFEMElement3DTest.cxx
    itkFEMObjectTest.cxx
    itkFEMObjectTest2.cxx
    itkFEMSpatialObjectTest.cxx
    itkFEMSolverHyperbolicTest.cxx
    itkFEMRobustSolverTest.cxx
    itkFEMScatteredDataPointSetToImageFilterTest.cxx)

createtestdriver(ITKFEM "${ITKFEM-Test_LIBRARIES}" "${ITKFEMTests}")

itk_add_test(
  NAME
  itkFEMElement2DMembraneTest
  COMMAND
  ITKFEMTestDriver
  itkFEMElement2DMembraneTest)
itk_add_test(
  NAME
  itkFEMElement2DQuadraticTriangularTest
  COMMAND
  ITKFEMTestDriver
  itkFEMElement2DQuadraticTriangularTest)
itk_add_test(
  NAME
  itkFEMElement2DStrainTest
  COMMAND
  ITKFEMTestDriver
  itkFEMElement2DStrainTest)
itk_add_test(
  NAME
  itkFEMElement3DMembraneTest
  COMMAND
  ITKFEMTestDriver
  itkFEMElement3DMembraneTest)
itk_add_test(
  NAME
  itkFEMExceptionTest
  COMMAND
  ITKFEMTestDriver
  itkFEMExceptionTest)
itk_add_test(
  NAME
  itkFEMLinearSystemWrapperDenseVNLTest
  COMMAND
  ITKFEMTestDriver
  itkFEMLinearSystemWrapperDenseVNLTest)
itk_add_test(
  NAME
  itkFEMLinearSystemWrapperItpackTest
  COMMAND
  ITKFEMTestDriver
  itkFEMLinearSystemWrapperItpackTest)
itk_add_test(
  NAME
  itkFEMLinearSystemWrapperItpackTest1
  COMMAND
  ITKFEMTestDriver
  itkFEMLinearSystemWrapperItpackTest
  0)
itk_add_test(
  NAME
  itkFEMLinearSystemWrapperItpackTest2
  COMMAND
  ITKFEMTestDriver
  itkFEMLinearSystemWrapperItpackTest
  1)
itk_add_test(
  NAME
  itkFEMLinearSystemWrapperItpackTest3
  COMMAND
  ITKFEMTestDriver
  itkFEMLinearSystemWrapperItpackTest
  2)
itk_add_test(
  NAME
  itkFEMLinearSystemWrapperItpackTest4
  COMMAND
  ITKFEMTestDriver
  itkFEMLinearSystemWrapperItpackTest
  3)
itk_add_test(
  NAME
  itkFEMLinearSystemWrapperItpackTest5
  COMMAND
  ITKFEMTestDriver
  itkFEMLinearSystemWrapperItpackTest
  4)
itk_add_test(
  NAME
  itkFEMLinearSystemWrapperItpackTest6
  COMMAND
  ITKFEMTestDriver
  itkFEMLinearSystemWrapperItpackTest
  5)
itk_add_test(
  NAME
  itkFEMLinearSystemWrapperItpackTest7
  COMMAND
  ITKFEMTestDriver
  itkFEMLinearSystemWrapperItpackTest
  6)
itk_add_test(
  NAME
  itkFEMLinearSystemWrapperItpackTest8
  COMMAND
  ITKFEMTestDriver
  itkFEMLinearSystemWrapperItpackTest2
  0)
itk_add_test(
  NAME
  itkFEMLinearSystemWrapperItpackTest9
  COMMAND
  ITKFEMTestDriver
  itkFEMLinearSystemWrapperItpackTest2
  1)
itk_add_test(
  NAME
  itkFEMLinearSystemWrapperItpackTest10
  COMMAND
  ITKFEMTestDriver
  itkFEMLinearSystemWrapperItpackTest2
  2)
itk_add_test(
  NAME
  itkFEMLinearSystemWrapperItpackTest11
  COMMAND
  ITKFEMTestDriver
  itkFEMLinearSystemWrapperItpackTest2
  3)
itk_add_test(
  NAME
  itkFEMLinearSystemWrapperItpackTest12
  COMMAND
  ITKFEMTestDriver
  itkFEMLinearSystemWrapperItpackTest2
  4)
itk_add_test(
  NAME
  itkFEMLinearSystemWrapperItpackTest13
  COMMAND
  ITKFEMTestDriver
  itkFEMLinearSystemWrapperItpackTest2
  5)
itk_add_test(
  NAME
  itkFEMLinearSystemWrapperItpackTest14
  COMMAND
  ITKFEMTestDriver
  itkFEMLinearSystemWrapperItpackTest2
  6)
itk_add_test(
  NAME
  itkFEMLinearSystemWrapperVNLTest
  COMMAND
  ITKFEMTestDriver
  itkFEMLinearSystemWrapperVNLTest)
itk_add_test(
  NAME
  itkFEMPArrayTest
  COMMAND
  ITKFEMTestDriver
  itkFEMPArrayTest)
itk_add_test(
  NAME
  itkFEMScatteredDataPointSetToImageFilterTest
  COMMAND
  ITKFEMTestDriver
  itkFEMScatteredDataPointSetToImageFilterTest)

# 3D Element Tests
itk_add_test(
  NAME
  itkFEMC0HexahedralElement-NodalLoads-BCs
  COMMAND
  ITKFEMTestDriver
  itkFEMElement3DTest
  DATA{Input/hexa2.meta})
itk_add_test(
  NAME
  itkFEMC0HexahedralElement-NoLoads
  COMMAND
  ITKFEMTestDriver
  itkFEMElement3DTest
  DATA{Input/hexa3.meta})
itk_add_test(
  NAME
  itkFEMC0HexahedralElement-GravityLoad-BCs
  COMMAND
  ITKFEMTestDriver
  itkFEMElement3DTest
  DATA{Input/hexa4-grav.meta})
itk_add_test(
  NAME
  itkFEMC0TetrahedralElement-NodalLoads-BCs
  COMMAND
  ITKFEMTestDriver
  itkFEMElement3DTest
  DATA{Input/tetra2.meta})
itk_add_test(
  NAME
  itkFEMC0TetrahedralElement-NoLoads
  COMMAND
  ITKFEMTestDriver
  itkFEMElement3DTest
  DATA{Input/tetra3.meta})
itk_add_test(
  NAME
  itkFEMC0TetrahedralElement-GravityLoad-BCs
  COMMAND
  ITKFEMTestDriver
  itkFEMElement3DTest
  DATA{Input/tetra4-grav.meta})

# 2D Element Tests
itk_add_test(
  NAME
  itkFEMC0QuadElement-NodalLoads-BCs
  COMMAND
  ITKFEMTestDriver
  itkFEMElement2DTest
  DATA{Input/quad2-small.meta})
itk_add_test(
  NAME
  itkFEMC0QuadElement-Strain
  COMMAND
  ITKFEMTestDriver
  itkFEMElement2DTest
  DATA{Input/quad2-strain.meta})
itk_add_test(
  NAME
  itkFEMC0QuadElement-NoLoads
  COMMAND
  ITKFEMTestDriver
  itkFEMElement2DTest
  DATA{Input/quad4.meta})
itk_add_test(
  NAME
  itkFEMC0QuadElement-GravityLoad-BCs
  COMMAND
  ITKFEMTestDriver
  itkFEMElement2DTest
  DATA{Input/quad6-grav.meta})
itk_add_test(
  NAME
  itkFEMLoadLandmarkImplementation
  COMMAND
  ITKFEMTestDriver
  itkFEMElement2DTest
  DATA{Input/quad-lm.meta})
itk_add_test(
  NAME
  itkFEMC0QuadElementTrapezoidalGeometry-NoLoads
  COMMAND
  ITKFEMTestDriver
  itkFEMElement2DTest
  DATA{Input/trapezoid.meta})
itk_add_test(
  NAME
  itkFEMC0TriangularElement-NodalLoads-BCs
  COMMAND
  ITKFEMTestDriver
  itkFEMElement2DTest
  DATA{Input/tri2.meta})
itk_add_test(
  NAME
  itkFEMC0TriangularElement-NoLoads
  COMMAND
  ITKFEMTestDriver
  itkFEMElement2DTest
  DATA{Input/tri3.meta})
itk_add_test(
  NAME
  itkFEMC0TriangularElement-Strain
  COMMAND
  ITKFEMTestDriver
  itkFEMElement2DTest
  DATA{Input/tri3-e.meta})
itk_add_test(
  NAME
  itkFEMC0TriangularElement-Quadratic
  COMMAND
  ITKFEMTestDriver
  itkFEMElement2DTest
  DATA{Input/tri3-q.meta})
itk_add_test(
  NAME
  itkFEMTruss
  COMMAND
  ITKFEMTestDriver
  itkFEMElement2DTest
  DATA{Input/truss.meta})
itk_add_test(
  NAME
  itkFEMSolverHyperbolicTest
  COMMAND
  ITKFEMTestDriver
  itkFEMSolverHyperbolicTest
  DATA{Input/quad2-small.meta}
  5
  0
  0.0
  0.0
  5.9473e-07
  -2.41038e-06
  3.88745e-06
  -2.64591e-06
  0.0
  0.0)

itk_add_test(
  NAME
  itkFEMElement2DC0LinearQuadrilateralStrainTest
  ${FEM_TESTS3}
  COMMAND
  ITKFEMTestDriver
  itkFEMElement2DC0LinearQuadrilateralStrainTest
  DATA{Input/2DC0LinearQuadrilateralStrainTest.meta}
  ${ITK_TEST_OUTPUT_DIR}/2DC0LinearQuadrilateralStrainTestWrite.meta)

itk_add_test(
  NAME
  itkFEMElement2DC0LinearQuadrilateralStressTest
  ${FEM_TESTS3}
  COMMAND
  ITKFEMTestDriver
  itkFEMElement2DC0LinearQuadrilateralStressTest
  ${ITK_TEST_OUTPUT_DIR}/2DC0LinearQuadrilateralStressTestWrite.meta)

itk_add_test(
  NAME
  itkFEMElement2DC0LinearQuadrilateralMembraneTest
  ${FEM_TESTS3}
  COMMAND
  ITKFEMTestDriver
  itkFEMElement2DC0LinearQuadrilateralMembraneTest
  DATA{Input/2DC0LinearQuadrilateralMembraneTest.meta}
  ${ITK_TEST_OUTPUT_DIR}/2DC0LinearQuadrilateralMembraneTestWrite.meta)

itk_add_test(
  NAME
  itkFEMElement2DC0LinearTriangleMembraneTest
  ${FEM_TESTS3}
  COMMAND
  ITKFEMTestDriver
  itkFEMElement2DC0LinearTriangleMembraneTest
  DATA{Input/2DC0LinearTriangleMembraneTest.meta}
  ${ITK_TEST_OUTPUT_DIR}/2DC0LinearTriangleMembraneTestWrite.meta)

itk_add_test(
  NAME
  itkFEMElement2DC0LinearTriangleStressTest
  ${FEM_TESTS3}
  COMMAND
  ITKFEMTestDriver
  itkFEMElement2DC0LinearTriangleStressTest
  DATA{Input/2DC0LinearTriangleStressTest.meta}
  ${ITK_TEST_OUTPUT_DIR}/2DC0LinearTriangleStressTestWrite.meta)

itk_add_test(
  NAME
  itkFEMElement2DC0LinearTriangleStrainTest
  ${FEM_TESTS3}
  COMMAND
  ITKFEMTestDriver
  itkFEMElement2DC0LinearTriangleStrainTest
  DATA{Input/2DC0LinearTriangleStrainTest.meta}
  ${ITK_TEST_OUTPUT_DIR}/2DC0LinearTriangleStrainTestWrite.meta)

itk_add_test(
  NAME
  itkFEMElement2DC0QuadraticTriangleStrainTest
  ${FEM_TESTS3}
  COMMAND
  ITKFEMTestDriver
  itkFEMElement2DC0QuadraticTriangleStrainTest
  DATA{Input/2DC0QuadraticTriangleStrainTest.meta}
  ${ITK_TEST_OUTPUT_DIR}/2DC0QuadraticTriangleStrainTestWrite.meta)

itk_add_test(
  NAME
  itkFEMElement2DC0QuadraticTriangleStressTest
  ${FEM_TESTS3}
  COMMAND
  ITKFEMTestDriver
  itkFEMElement2DC0QuadraticTriangleStressTest
  DATA{Input/2DC0QuadraticTriangleStressTest.meta}
  ${ITK_TEST_OUTPUT_DIR}/2DC0QuadraticTriangleStressTestWrite.meta)

itk_add_test(
  NAME
  itkFEMElement2DC0LinearLineStressTest
  ${FEM_TESTS3}
  COMMAND
  ITKFEMTestDriver
  itkFEMElement2DC0LinearLineStressTest
  DATA{Input/2DC0LinearLineStressTest.meta}
  ${ITK_TEST_OUTPUT_DIR}/2DC0LinearLineStressTestWrite.meta)

itk_add_test(
  NAME
  itkFEMElement2DC0LinearQuadrilateralStrainItpackTest
  ${FEM_TESTS3}
  COMMAND
  ITKFEMTestDriver
  itkFEMElement2DC0LinearQuadrilateralStrainItpackTest
  DATA{Input/2DC0LinearQuadrilateralStrainTest.meta}
  ${ITK_TEST_OUTPUT_DIR}/2DC0LinearQuadrilateralStrainTestWrite.meta)

itk_add_test(
  NAME
  itkFEMElement2DC1BeamTest
  ${FEM_TESTS3}
  COMMAND
  ITKFEMTestDriver
  itkFEMElement2DC1BeamTest
  DATA{Input/2DC1BeamTest.meta}
  ${ITK_TEST_OUTPUT_DIR}/2DC1BeamTestWrite.meta)

itk_add_test(
  NAME
  itkFEMElement3DC0LinearHexahedronStrainTest
  ${FEM_TESTS3}
  COMMAND
  ITKFEMTestDriver
  itkFEMElement3DC0LinearHexahedronStrainTest
  DATA{Input/3DC0LinearHexahedronStrainTest.meta}
  ${ITK_TEST_OUTPUT_DIR}/3DC0LinearHexahedronStrainTestWrite.meta)

itk_add_test(
  NAME
  itkFEMElement3DC0LinearHexahedronMembraneTest
  ${FEM_TESTS3}
  COMMAND
  ITKFEMTestDriver
  itkFEMElement3DC0LinearHexahedronMembraneTest
  DATA{Input/3DC0LinearHexahedronMembraneTest.meta}
  ${ITK_TEST_OUTPUT_DIR}/3DC0LinearHexahedronMembraneTestWrite.meta)

itk_add_test(
  NAME
  itkFEMElement3DC0LinearTetrahedronStrainTest
  ${FEM_TESTS3}
  COMMAND
  ITKFEMTestDriver
  itkFEMElement3DC0LinearTetrahedronStrainTest
  DATA{Input/3DC0LinearTetrahedronStrainTest.meta}
  ${ITK_TEST_OUTPUT_DIR}/3DC0LinearTetrahedronStrainTestWrite.meta)

itk_add_test(
  NAME
  itkFEMElement3DC0LinearTetrahedronMembraneTest
  ${FEM_TESTS3}
  COMMAND
  ITKFEMTestDriver
  itkFEMElement3DC0LinearTetrahedronMembraneTest
  DATA{Input/3DC0LinearTetrahedronMembraneTest.meta}
  ${ITK_TEST_OUTPUT_DIR}/3DC0LinearTetrahedronMembraneTestWrite.meta)

itk_add_test(
  NAME
  itkFEMLoadBCMFCTest
  ${FEM_TESTS3}
  COMMAND
  ITKFEMTestDriver
  itkFEMLoadBCMFCTest
  DATA{Input/LoadBCMFCTest.meta}
  ${ITK_TEST_OUTPUT_DIR}/LoadBCMFCTestWrite.meta)

itk_add_test(
  NAME
  itkFEMLoadBCMFCTestUser
  ${FEM_TESTS3}
  COMMAND
  ITKFEMTestDriver
  itkFEMLoadBCMFCTestUser)

itk_add_test(
  NAME
  itkFEMLoadEdgeTest
  ${FEM_TESTS3}
  COMMAND
  ITKFEMTestDriver
  itkFEMLoadEdgeTest
  DATA{Input/LoadEdgeTest.meta}
  ${ITK_TEST_OUTPUT_DIR}/LoadEdgeTestWrite.meta)

itk_add_test(
  NAME
  itkFEMLoadGravConstTest
  ${FEM_TESTS3}
  COMMAND
  ITKFEMTestDriver
  itkFEMLoadGravConstTest
  DATA{Input/LoadGravConstTest.meta}
  ${ITK_TEST_OUTPUT_DIR}/LoadGravConstWrite.meta)

itk_add_test(
  NAME
  itkFEMLoadPointTestUser
  ${FEM_TESTS3}
  COMMAND
  ITKFEMTestDriver
  itkFEMLoadPointTestUser)

itk_add_test(
  NAME
  itkFEMLandmarkLoadImplementationTest
  ${FEM_TESTS3}
  COMMAND
  ITKFEMTestDriver
  itkFEMLandmarkLoadImplementationTest
  DATA{Input/quad-lm.meta}
  ${ITK_TEST_OUTPUT_DIR}/QuadLandmardkWrite.meta)

itk_add_test(
  NAME
  itkFEMObjectTest
  ${FEM_TESTS3}
  COMMAND
  ITKFEMTestDriver
  itkFEMObjectTest)

itk_add_test(
  NAME
  itkFEMObjectTest2
  ${FEM_TESTS3}
  COMMAND
  ITKFEMTestDriver
  itkFEMObjectTest2)

itk_add_test(
  NAME
  itkFEMSpatialObjectTest
  ${FEM_TESTS3}
  COMMAND
  ITKFEMTestDriver
  itkFEMSpatialObjectTest
  DATA{Input/tri3-e.meta})

#add_test(NAME itkFEMSolverTest2D ${FEM_TESTS3}
#        COMMAND ITKFEMTestDriver itkFEMSolverTest2D
#        DATA{Input/2DC0LinearTriangleStressTest.meta}
#        ${ITK_TEST_OUTPUT_DIR}/2DC0LinearTriangleStressTestWrite_NewSolver.meta)

itk_add_test(
  NAME
  itkFEMSolverTest3D
  ${FEM_TESTS3}
  COMMAND
  ITKFEMTestDriver
  itkFEMSolverTest3D
  DATA{Input/3DC0LinearHexahedronMembraneTest.meta}
  ${ITK_TEST_OUTPUT_DIR}/3DC0LinearHexahedronMembraneTestWrite_NewSolver.meta)

itk_add_test(
  NAME
  itkFEMRobustSolverTest
  ${FEM_TESTS3}
  COMMAND
  ITKFEMTestDriver
  itkFEMRobustSolverTest)

itk_add_test(
  NAME
  itkImageToRectilinearFEMObjectFilter2DTest
  ${FEM_TESTS3}
  COMMAND
  ITKFEMTestDriver
  itkImageToRectilinearFEMObjectFilter2DTest
  DATA{${ITK_DATA_ROOT}/Input/circle.png}
  20
  20
  7
  7
  64
  49
  3
  0
  0
  0
  10
  40
  20
  33
  20
  80
  3
  0
  0
  1
  9
  8
  10
  11
  12
  20
  19
  33
  37
  38
  46
  45)

itk_add_test(
  NAME
  itkImageToRectilinearFEMObjectFilter3DTest
  ${FEM_TESTS3}
  COMMAND
  ITKFEMTestDriver
  itkImageToRectilinearFEMObjectFilter3DTest
  DATA{${ITK_DATA_ROOT}/Input/HeadMRVolumeWithDirection.mhd}
  10
  10
  10
  4
  6
  4
  175
  96
  3
  0
  0
  0
  0
  10
  40
  69.282
  0
  33
  223.923
  147.846
  0
  3
  0
  0
  1
  6
  5
  35
  36
  41
  40
  10
  12
  13
  18
  17
  47
  48
  53
  52
  33
  46
  47
  52
  51
  81
  82
  87
  86)
