itk_module_test()

# to know system default MINC PositiveCoordinateOrientation RAS to PositiveCoordinateOrientation LPS mode
include_directories("${CMAKE_CURRENT_BINARY_DIR}/../src")

if(NOT ITK_USE_SYSTEM_HDF5)
  include_directories(
    "${ITKHDF5_SOURCE_DIR}/src/itkhdf5"
    "${ITKHDF5_SOURCE_DIR}/src/itkhdf5/src"
    "${ITKHDF5_BINARY_DIR}/src/itkhdf5"
  )
endif()

set(
  ITKIOMINCTests
  itkMINCImageIOTest.cxx
  itkMINCImageIOTest2.cxx
  itkMINCImageIOTest4.cxx
  itkMINCImageIOTest_2D.cxx
  itkMINCImageIOTest_4D.cxx
  itkMINCImageIOTest_Labels.cxx
)

createtestdriver(ITKIOMINC "${ITKIOMINC-Test_LIBRARIES}" "${ITKIOMINCTests}")

itk_add_test(
  NAME itkMINCImageIOTest1
  COMMAND
    ITKIOMINCTestDriver
    itkMINCImageIOTest
    ${ITK_TEST_OUTPUT_DIR}
)

itk_add_test(
  NAME itkMINCImageIOTest2
  COMMAND
    ITKIOMINCTestDriver
    itkMINCImageIOTest2
    DATA{Input/t1_z+_byte_cor.mnc}
    ${ITK_TEST_OUTPUT_DIR}/t1_z+_byte_cor_3.mnc
)

itk_add_test(
  NAME itkMINCImageIOTest4_byte
  COMMAND
    ITKIOMINCTestDriver
    --compare
    DATA{Input/t1_z+_byte_cor.mnc}
    ${ITK_TEST_OUTPUT_DIR}/t1_z+_byte_cor_2.mnc
    itkMINCImageIOTest4
    DATA{Input/t1_z+_byte_cor.mnc}
    ${ITK_TEST_OUTPUT_DIR}/t1_z+_byte_cor_2.mnc
    0
)

itk_add_test(
  NAME itkMINCImageIOTest4_head
  COMMAND
    ITKIOMINCTestDriver
    --compare
    DATA{${ITK_DATA_ROOT}/Input/HeadMRVolume.mhd,HeadMRVolume.raw}
    ${ITK_TEST_OUTPUT_DIR}/HeadMRVolume.mnc
    itkMINCImageIOTest4
    DATA{${ITK_DATA_ROOT}/Input/HeadMRVolume.mhd,HeadMRVolume.raw}
    ${ITK_TEST_OUTPUT_DIR}/HeadMRVolume.mnc
    -1
)

# Test to make sure that inter-slice normalization was properly dealt with
itk_add_test(
  NAME itkMINCImageIOTest5
  COMMAND
    ITKIOMINCTestDriver
    --compare
    DATA{Input/t1_z+_float_yxz_norm.mnc}
    ${ITK_TEST_OUTPUT_DIR}/t1_z+_ubyte_yxz_nonorm_noParams.mnc
    itkMINCImageIOTest4
    DATA{Input/t1_z+_ubyte_yxz_nonorm.mnc}
    ${ITK_TEST_OUTPUT_DIR}/t1_z+_ubyte_yxz_nonorm_noParams.mnc
    0
)

itk_add_test(
  NAME itkMINCImageIOTest6
  COMMAND
    ITKIOMINCTestDriver
    --compare
    DATA{Input/t1_z+_float_yxz_norm.mnc}
    ${ITK_TEST_OUTPUT_DIR}/t1_z+_float_yxz_nonorm_noParams.mnc
    itkMINCImageIOTest4
    DATA{Input/t1_z+_float_yxz_nonorm.mnc}
    ${ITK_TEST_OUTPUT_DIR}/t1_z+_float_yxz_nonorm_noParams.mnc
    0
)

itk_add_test(
  NAME itkMINCImageIOTest_2D
  COMMAND
    ITKIOMINCTestDriver
    --compare
    DATA{${ITK_DATA_ROOT}/Input/cthead1.tif}
    ${ITK_TEST_OUTPUT_DIR}/cthead1.mnc
    itkMINCImageIOTest_2D
    DATA{${ITK_DATA_ROOT}/Input/cthead1.tif}
    ${ITK_TEST_OUTPUT_DIR}/cthead1.mnc
)

itk_add_test(
  NAME itkMINCImageIOTest_4D
  COMMAND
    ITKIOMINCTestDriver
    --compare
    DATA{Input/dti_sample.mnc}
    ${ITK_TEST_OUTPUT_DIR}/dti_sample.mnc
    itkMINCImageIOTest_4D
    DATA{Input/dti_sample.mnc}
    ${ITK_TEST_OUTPUT_DIR}/dti_sample.mnc
)

itk_add_test(
  NAME itkMINCImageIOTest_Labels
  COMMAND
    ITKIOMINCTestDriver
    --compare
    DATA{Input/labels_sample.mnc}
    ${ITK_TEST_OUTPUT_DIR}/labels_sample.mnc
    itkMINCImageIOTest_Labels
    DATA{Input/labels_sample.mnc}
    ${ITK_TEST_OUTPUT_DIR}/labels_sample.mnc
)

# test different cases

itk_add_test(
  NAME itkMINCImageIOTest-COM-t1_z+_float_yxz_nonorm
  COMMAND
    ITKIOMINCTestDriver
    --compare
    DATA{Input/t1_z+_float_yxz_nonorm.mnc}
    ${ITK_TEST_OUTPUT_DIR}/t1_z+_float_yxz_nonorm.mnc
    itkMINCImageIOTest4
    DATA{Input/t1_z+_float_yxz_nonorm.mnc}
    ${ITK_TEST_OUTPUT_DIR}/t1_z+_float_yxz_nonorm.mnc
    0 # RAStoLPS
    427621.7839
    -8.195741583
    72.45998819
    -3.148534512
)

itk_add_test(
  NAME itkMINCImageIOTest-COM-t1_z+_float_yxz_norm
  COMMAND
    ITKIOMINCTestDriver
    --compare
    DATA{Input/t1_z+_float_yxz_norm.mnc}
    ${ITK_TEST_OUTPUT_DIR}/t1_z+_float_yxz_norm.mnc
    itkMINCImageIOTest4
    DATA{Input/t1_z+_float_yxz_norm.mnc}
    ${ITK_TEST_OUTPUT_DIR}/t1_z+_float_yxz_norm.mnc
    0 # RAStoLPS
    427621.7839
    -8.195741583
    72.45998819
    -3.148534512
)

itk_add_test(
  NAME itkMINCImageIOTest-COM-t1_z+_ubyte_yxz_nonorm
  COMMAND
    ITKIOMINCTestDriver
    --compare
    DATA{Input/t1_z+_ubyte_yxz_nonorm.mnc}
    ${ITK_TEST_OUTPUT_DIR}/t1_z+_ubyte_yxz_nonorm.mnc
    itkMINCImageIOTest4
    DATA{Input/t1_z+_ubyte_yxz_nonorm.mnc}
    ${ITK_TEST_OUTPUT_DIR}/t1_z+_ubyte_yxz_nonorm.mnc
    0 # RAStoLPS
    427621.7838
    -8.195741583
    72.45998819
    -3.148534512
)

# multiple loops because of different numerical parameters
foreach(rastoeps 0;1)
  foreach(type byte;short;ubyte)
    foreach(axis cor;sag;trans)
      foreach(plusMinus -;+)
        set(imageName t1_z${plusMinus}_${type}_${axis})
        set(outImage ${ITK_TEST_OUTPUT_DIR}/${imageName}-${rastoeps}.mnc)

        itk_add_test(
          NAME itkMINCImageIOTest-COM-${imageName}-${rastoeps}
          COMMAND
            ITKIOMINCTestDriver
            --compare
            DATA{Input/${imageName}.mnc}
            ${outImage}
            itkMINCImageIOTest4
            DATA{Input/${imageName}.mnc}
            ${outImage}
            ${rastoeps} # RAStoLPS
            427620.3115
            -8.195582241
            72.46002233
            -3.148594157
        ) # this line is different
      endforeach()
    endforeach()
  endforeach()
endforeach()

foreach(rastoeps 0;1)
  foreach(type double;float;long;ulong)
    foreach(axis cor;sag;trans)
      foreach(plusMinus -;+)
        set(imageName t1_z${plusMinus}_${type}_${axis})
        set(outImage ${ITK_TEST_OUTPUT_DIR}/${imageName}_${rastoeps}.mnc)

        itk_add_test(
          NAME itkMINCImageIOTest-COM-${imageName}-${rastoeps}
          COMMAND
            ITKIOMINCTestDriver
            --compare
            DATA{Input/${imageName}.mnc}
            ${outImage}
            itkMINCImageIOTest4
            DATA{Input/${imageName}.mnc}
            ${outImage}
            ${rastoeps} # RAStoLPS
            427590.7631
            -8.195995507
            72.45943584
            -3.148635493
        ) # this line is different
      endforeach()
    endforeach()
  endforeach()
endforeach()

foreach(rastoeps 0;1)
  foreach(type ushort)
    foreach(axis cor;sag;trans)
      foreach(plusMinus -;+)
        set(imageName t1_z${plusMinus}_${type}_${axis})
        set(outImage ${ITK_TEST_OUTPUT_DIR}/${imageName}_${rastoeps}.mnc)

        itk_add_test(
          NAME itkMINCImageIOTest-COM-${imageName}-${rastoeps}
          COMMAND
            ITKIOMINCTestDriver
            --compare
            DATA{Input/${imageName}.mnc}
            ${outImage}
            itkMINCImageIOTest4
            DATA{Input/${imageName}.mnc}
            ${outImage}
            ${rastoeps} # RAStoLPS
            427590.7957
            -8.195997123
            72.45943721
            -3.148635961
        ) # this line is different
      endforeach()
    endforeach()
  endforeach()
endforeach()
