itk_module_test()
set(
  ITKIOGDCMTests
  itkGDCMImageIOTest.cxx
  itkGDCMImageIOTest2.cxx
  itkGDCMImageIONoCrashTest.cxx
  itkGDCMImageReadSeriesWriteTest.cxx
  itkGDCMImageReadWriteTest.cxx
  itkGDCMSeriesStreamReadImageWriteTest.cxx
  itkGDCMImagePositionPatientTest.cxx
  itkGDCMImageIOOrthoDirTest.cxx
  itkGDCMImageOrientationPatientTest.cxx
  itkGDCMLoadImageSpacingTest.cxx
  itkGDCMLegacyMultiFrameTest.cxx
  itkGDCMImageIONoPreambleTest.cxx
  itkGDCMImageIO32bitsStoredTest.cxx
)

createtestdriver(ITKIOGDCM "${ITKIOGDCM-Test_LIBRARIES}" "${ITKIOGDCMTests}")

itk_add_test(
  NAME itkGDCMImageIOTest1
  COMMAND
    ITKIOGDCMTestDriver
    --compare
    DATA{Baseline/itkGDCMImageIOTestBaseline.mha}
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageIOTest.mha
    --compare
    DATA{Baseline/itkGDCMImageIOTestRescaledBaseline.mha}
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageIOTestRescaled.mha
    itkGDCMImageIOTest
    DATA{${ITK_DATA_ROOT}/Input/dicom-sc_cs-1.dcm}
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageIOTest.dcm
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageIOTest.mha
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageIOTestRescaled.dcm
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageIOTestRescaled.mha
)
itk_add_test(
  NAME itkGDCMImageIOTest2
  COMMAND
    ITKIOGDCMTestDriver
    --compare
    DATA{Baseline/itkGDCMImageIOTest2Baseline.mha}
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageIOTest2.mha
    --compare
    DATA{Baseline/itkGDCMImageIOTest2RescaledBaseline.mha}
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageIOTest2Rescaled.mha
    itkGDCMImageIOTest
    DATA{${ITK_DATA_ROOT}/Input/itkGDCMImageIOTest.dcm}
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageIOTest2.dcm
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageIOTest2.mha
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageIOTest2Rescaled.dcm
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageIOTest2Rescaled.mha
)
itk_add_test(
  NAME itkGDCMImageIOTest3
  COMMAND
    ITKIOGDCMTestDriver
    --compare
    DATA{Baseline/itkGDCMImageIOTest3Baseline.mha}
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageIOTest3.mha
    --compare
    DATA{Baseline/itkGDCMImageIOTest3RescaledBaseline.mha}
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageIOTest3Rescaled.mha
    itkGDCMImageIOTest
    DATA{${ITK_DATA_ROOT}/Input/itkGDCMImageIOTest3.dcm}
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageIOTest3.dcm
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageIOTest3.mha
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageIOTest3Rescaled.dcm
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageIOTest3Rescaled.mha
)
itk_add_test(
  NAME itkGDCMImageIOTest4
  COMMAND
    ITKIOGDCMTestDriver
    --compare
    DATA{Baseline/itkGDCMImageIOTest4Baseline.mha}
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageIOTest4.mha
    --compare
    DATA{Baseline/itkGDCMImageIOTest4RescaledBaseline.mha}
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageIOTest4Rescaled.mha
    itkGDCMImageIOTest
    DATA{${ITK_DATA_ROOT}/Input/012345.002.050}
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageIOTest4.dcm
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageIOTest4.mha
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageIOTest4Rescaled.dcm
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageIOTest4Rescaled.mha
)
itk_add_test(
  NAME itkGDCMImageIOSecondaryCaptureSpacingTest
  COMMAND
    ITKIOGDCMTestDriver
    --compare
    DATA{Baseline/itkGDCMImageIOSecondaryCaptureSpacingTestBaseline.mha}
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageIOSecondaryCaptureSpacingTest.mha
    itkGDCMImageIOTest
    DATA{Input/image_slice0.dcm}
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageIOSecondaryCaptureSpacingTest.dcm
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageIOSecondaryCaptureSpacingTest.mha
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageIOSecondaryCaptureSpacingTestRescaled.dcm
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageIOSecondaryCaptureSpacingTestRescaled.mha
)
itk_add_test(
  NAME itkGDCMImageIOTest5
  COMMAND
    ITKIOGDCMTestDriver
    itkGDCMImageIOTest2
    DATA{${ITK_DATA_ROOT}/Input/HeadMRVolume.mhd,HeadMRVolume.raw}
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageIOTest5
)

itk_add_test(
  NAME itkGDCMSeriesStreamReadImageWriteTest1
  COMMAND
    ITKIOGDCMTestDriver
    itkGDCMSeriesStreamReadImageWriteTest
    DATA{${ITK_DATA_ROOT}/Input/DicomSeries/,REGEX:Image[0-9]+.dcm}
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMSeriesStreamReadImageWriteTest1.mhd
    0.859375
    0.85939
    1.60016
    0
    1
    0
    0
    0
)

set_property(
  TEST
    itkGDCMSeriesStreamReadImageWriteTest1
  APPEND
  PROPERTY
    DEPENDS
      ITKData
)

itk_add_test(
  NAME itkGDCMSeriesStreamReadImageWriteTest2
  COMMAND
    ITKIOGDCMTestDriver
    itkGDCMSeriesStreamReadImageWriteTest
    DATA{${ITK_DATA_ROOT}/Input/DicomSeries/,REGEX:Image[0-9]+.dcm}
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMSeriesStreamReadImageWriteTest2.mhd
    0.859375
    0.85939
    1.60016
    0
    1
    0
    0
    1
)

set_property(
  TEST
    itkGDCMSeriesStreamReadImageWriteTest2
  APPEND
  PROPERTY
    DEPENDS
      ITKData
)

itk_add_test(
  NAME itkGDCMImagePositionPatientTest
  COMMAND
    ITKIOGDCMTestDriver
    itkGDCMImagePositionPatientTest
    ${ITK_TEST_OUTPUT_DIR}
)

itk_add_test(
  NAME itkGDCMImageReadSeriesWriteTest
  COMMAND
    ITKIOGDCMTestDriver
    --compare
    DATA{${ITK_DATA_ROOT}/Input/HeadMRVolume.mha}
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageReadSeriesWriteTest.mha
    itkGDCMImageReadSeriesWriteTest
    DATA{${ITK_DATA_ROOT}/Input/HeadMRVolume.mha}
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageReadSeriesWriteTest
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageReadSeriesWriteTest.mha
)

itk_add_test(
  NAME itkGDCMImageIOOrthoDirTest
  COMMAND
    ITKIOGDCMTestDriver
    itkGDCMImageIOOrthoDirTest
    DATA{${ITK_DATA_ROOT}/Input/OrthogonalDirectionsTest.dcm}
)

itk_add_test(
  NAME itkGDCMImageOrientationPatientTest
  COMMAND
    ITKIOGDCMTestDriver
    itkGDCMImageOrientationPatientTest
    ${ITK_TEST_OUTPUT_DIR}
)

itk_add_test(
  NAME itkGDCMImageIONoCrashTest
  COMMAND
    ITKIOGDCMTestDriver
    itkGDCMImageIONoCrashTest
    DATA{${ITK_DATA_ROOT}/Input/OT-PAL-8-face.dcm}
)

itk_add_test(
  NAME itkGDCMLoadImageSpacingTest
  COMMAND
    ITKIOGDCMTestDriver
    itkGDCMLoadImageSpacingTest
    DATA{Input/gdcmSpacingTest.dcm}
    0.178038
    0.174924
)

itk_add_test(
  NAME itkGDCMLoadImageNoSpacingTest
  COMMAND
    ITKIOGDCMTestDriver
    itkGDCMLoadImageSpacingTest
    DATA{Input/gdcmNoSpacingTest.dcm}
    1.0
    1.0
)

itk_add_test(
  NAME itkGDCMLegacyMultiFrameTest
  COMMAND
    ITKIOGDCMTestDriver
    --compare
    DATA{Baseline/itkGDCMLegacyMultiFrameTest.mha}
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMLegacyMultiFrameTest.mha
    itkGDCMLegacyMultiFrameTest
    # This dataset was derived from
    # https://www.dropbox.com/s/8m7ugu4cmw83fvd/dicoms-anon.zip?dl=0
    # per the discussion here
    # https://discourse.slicer.org/t/dicom-multiframe-support/4806/9
    DATA{Input/LegacyMultiFrame.dcm}
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMLegacyMultiFrameTest.mha
)

itk_add_test(
  NAME itkGDCMImageIONoPreambleTest
  COMMAND
    ITKIOGDCMTestDriver
    itkGDCMImageIONoPreambleTest
    DATA{Input/NoPreambleDicomTest.dcm}
)

# Re-use the test driver to ensure that CanReadFile returns true for a file
# with a preamble.
itk_add_test(
  NAME itkGDCMImageIOPreambleCanReadTest
  COMMAND
    ITKIOGDCMTestDriver
    itkGDCMImageIONoPreambleTest
    DATA{Input/preamble.dcm}
)

itk_add_test(
  NAME itkGDCMImageIOIntToUintTest
  COMMAND
    ITKIOGDCMTestDriver
    --compare
    DATA{Baseline/itkGDCMImageIOTestIntToUint.mha}
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageIOTestIntToUint.mha
    itkGDCMImageReadWriteTest
    DATA{Input/030658_001.dcm}
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageIOTestIntToUint.mha
    scalar
)

itk_add_test(
  NAME itkGDCMImageIO32bitsStoredTest
  COMMAND
    ITKIOGDCMTestDriver
    itkGDCMImageIO32bitsStoredTest
    DATA{Input/image32bitsStoredTest.dcm}
)

itk_add_test(
  NAME itkGDCMImageReadWriteTest_RGB
  COMMAND
    ITKIOGDCMTestDriver
    --compare
    DATA{Baseline/itkGDCMImageReadWriteTest_RGB.mha}
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageReadWriteTest_RGB.mha
    itkGDCMImageReadWriteTest
    DATA{${ITK_DATA_ROOT}/Input/RGBDicomTest.dcm}
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageReadWriteTest_RGB.mha
    rgb
)

itk_add_test(
  NAME itkGDCMImageReadWriteTest_SC_RGB
  COMMAND
    ITKIOGDCMTestDriver
    --compare
    DATA{Baseline/itkGDCMImageReadWriteTest_SC_RGB.nrrd}
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageReadWriteTest_SC_RGB.nrrd
    itkGDCMImageReadWriteTest
    DATA{Input/visible-male-rgb-slice.dcm}
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageReadWriteTest_SC_RGB.nrrd
    rgb
)

itk_add_test(
  NAME itkGDCM_ComplianceTestRGB_JPEG2000ICT
  COMMAND
    ITKIOGDCMTestDriver
    --compare
    DATA{Baseline/US1_J2KI.mha}
    ${ITK_TEST_OUTPUT_DIR}/itkGDCM_ComplianceTestRGB_JPEG2000ICT.mha
    itkGDCMImageReadWriteTest
    DATA{Input/US1_J2KI.dcm}
    ${ITK_TEST_OUTPUT_DIR}/itkGDCM_ComplianceTestRGB_JPEG2000ICT.mha
    rgb
)

itk_add_test(
  NAME itkGDCM_ComplianceTestRGB_JPEG2000RCT
  COMMAND
    ITKIOGDCMTestDriver
    --compare
    DATA{Baseline/US1_J2KR.mha}
    ${ITK_TEST_OUTPUT_DIR}/itkGDCM_ComplianceTestRGB_JPEG2000RCT.mha
    itkGDCMImageReadWriteTest
    DATA{Input/US1_J2KR.dcm}
    ${ITK_TEST_OUTPUT_DIR}/itkGDCM_ComplianceTestRGB_JPEG2000RCT.mha
    rgb
)

itk_add_test(
  NAME itkGDCMImageReadWriteTest_JPEGBaseline1
  COMMAND
    ITKIOGDCMTestDriver
    --compareIntensityTolerance
    5
    --compareNumberOfPixelsTolerance
    71
    --compare
    DATA{Baseline/itkGDCMImageReadWriteTest_RGB.mha}
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageReadWriteTest_JPEGBaseline1.mha
    itkGDCMImageReadWriteTest
    DATA{Input/JPEGBaseline1DicomTest.dcm}
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageReadWriteTest_JPEGBaseline1.mha
    rgb
)
itk_add_test(
  NAME itkGDCMImageReadWriteTest_MultiFrameMRIZSpacing
  COMMAND
    ITKIOGDCMTestDriver
    --compare
    DATA{Baseline/itkGDCMImageReadWriteTest_MultiFrameMRIZSpacingBaseline.mha}
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageReadWriteTest_MultiFrameMRIZSpacing.mha
    itkGDCMImageReadWriteTest
    DATA{Input/MultiFrameMRIZSpacing.dcm}
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageReadWriteTest_MultiFrameMRIZSpacing.mha
    scalar
)

itk_add_test(
  NAME itkGDCMImageIOTest3_mono1
  COMMAND
    ITKIOGDCMTestDriver
    --ignoreInputInformation
    --compare
    DATA{Baseline/itkGDCMImageIOTest3Baseline.mha}
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageIOTest3_mono1.mha
    itkGDCMImageReadWriteTest
    DATA{Input/itkGDCMImageIOTest3_mono1.dcm}
    ${ITK_TEST_OUTPUT_DIR}/itkGDCMImageIOTest3_mono1.mha
    scalar
)

itk_add_test(
  NAME itkGDCM_ComplianceTest_singlebit
  COMMAND
    ITKIOGDCMTestDriver
    --compare
    DATA{Baseline/single-bit.mha}
    ${ITK_TEST_OUTPUT_DIR}/single-bit.mha
    itkGDCMImageReadWriteTest
    DATA{Input/single-bit.dcm}
    ${ITK_TEST_OUTPUT_DIR}/single-bit.mha
    scalar
)

itk_add_test(
  NAME itkGDCMImageReadWriteTest_preamble
  COMMAND
    ITKIOGDCMTestDriver
    --compare
    DATA{Baseline/preamble.mha}
    ${ITK_TEST_OUTPUT_DIR}/preamble.mha
    itkGDCMImageReadWriteTest
    DATA{Input/preamble.dcm}
    ${ITK_TEST_OUTPUT_DIR}/preamble.mha
    scalar
)

itk_add_test(
  NAME itkGDCMImageReadWriteTest_no_preamble
  COMMAND
    ITKIOGDCMTestDriver
    --compare
    DATA{Baseline/no_preamble.mha}
    ${ITK_TEST_OUTPUT_DIR}/no_preamble.mha
    itkGDCMImageReadWriteTest
    DATA{Input/no_preamble.dcm}
    ${ITK_TEST_OUTPUT_DIR}/no_preamble.mha
    scalar
)

function(AddComplianceTest fileName)
  set(arg_baseline_fileName "Lily.mha")
  if(ARGV1)
    set(arg_baseline_fileName ${ARGV1})
  endif()
  itk_add_test(
    NAME itkGDCM_ComplianceTestRGB_${fileName}
    COMMAND
      ITKIOGDCMTestDriver
      --compareIntensityTolerance
      3
      --compareCoordinateTolerance
      0.001
      --compare
      DATA{Baseline/${arg_baseline_fileName}}
      ${ITK_TEST_OUTPUT_DIR}/itkGDCM_ComplianceTestRGB_${fileName}.mha
      itkGDCMImageReadWriteTest
      DATA{Input/Lily/${fileName}.dcm}
      ${ITK_TEST_OUTPUT_DIR}/itkGDCM_ComplianceTestRGB_${fileName}.mha
      rgb
  )
endfunction()

addcompliancetest(JPEG2000-YBR_RCT)
addcompliancetest(JPEGLS-RGB)
addcompliancetest(losslessJPEG-RGB)
addcompliancetest(lossyJPEG-YBR_FULL_422)
addcompliancetest(raw-RGB)
addcompliancetest(raw-YBR_FULL)
addcompliancetest(raw-YBR_FULL_422)
addcompliancetest(RLE-RGB)
addcompliancetest(HTJ2K-YBR_ICT Lily_full.mha)
addcompliancetest(HTJ2K-YBR_RCT Lily_full.mha)
