#--- musrview PNG integration tests -------------------------------------------

find_package(Python3 REQUIRED COMPONENTS Interpreter)

#--- helper macro -------------------------------------------------------------
# add_musrview_test(test_name msr_file [extra_musrview_args...])
# msr_file is relative to ${CMAKE_SOURCE_DIR}/doc/examples.
# extra args (e.g. -f, -a) are forwarded directly to musrview.
macro(add_musrview_test test_name msr_file)
  add_test(
    NAME ${test_name}
    COMMAND Python3::Interpreter
      ${CMAKE_CURRENT_SOURCE_DIR}/musrview_check.py
      $<TARGET_FILE:musrview>
      ${CMAKE_SOURCE_DIR}/doc/examples/${msr_file}
      ${CMAKE_CURRENT_SOURCE_DIR}/ref
      ${test_name}
      --tol 0.01
      ${ARGN}
    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/doc/examples
  )
endmacro()

#--- doc/examples tests -------------------------------------------------------

# single histogram fits
add_musrview_test(musrview-histo-MusrRoot                 test-histo-MusrRoot.msr)
add_musrview_test(musrview-histo-MusrRoot-fourier         test-histo-MusrRoot.msr       -f)
add_musrview_test(musrview-histo-MusrRoot-fourier-avg     test-histo-MusrRoot.msr       -f -a)

add_musrview_test(musrview-histo-PSI-BIN                  test-histo-PSI-BIN.msr)
add_musrview_test(musrview-histo-PSI-BIN-fourier          test-histo-PSI-BIN.msr        -f)
add_musrview_test(musrview-histo-PSI-BIN-fourier-avg      test-histo-PSI-BIN.msr        -f -a)

add_musrview_test(musrview-histo-ROOT-NPP                 test-histo-ROOT-NPP.msr)
add_musrview_test(musrview-histo-ROOT-NPP-fourier         test-histo-ROOT-NPP.msr       -f)
add_musrview_test(musrview-histo-ROOT-NPP-fourier-avg     test-histo-ROOT-NPP.msr       -f -a)

add_musrview_test(musrview-histo-HAL9500                  test-histo-HAL9500.msr)
add_musrview_test(musrview-histo-HAL9500-fourier          test-histo-HAL9500.msr        -f)
add_musrview_test(musrview-histo-HAL9500-fourier-avg      test-histo-HAL9500.msr        -f -a)

add_musrview_test(musrview-histo-HAL9500-RRF              test-histo-HAL9500-RRF.msr)
add_musrview_test(musrview-histo-HAL9500-RRF-fourier      test-histo-HAL9500-RRF.msr    -f)
add_musrview_test(musrview-histo-HAL9500-RRF-fourier-avg  test-histo-HAL9500-RRF.msr    -f -a)

add_musrview_test(musrview-histo-muMinus                  test-histo-muMinus.msr)
add_musrview_test(musrview-histo-muMinus-fourier          test-histo-muMinus.msr        -f)
add_musrview_test(musrview-histo-muMinus-fourier-avg      test-histo-muMinus.msr        -f -a)

add_musrview_test(musrview-histo-NeXus                    test-histo-NeXus.msr)
add_musrview_test(musrview-histo-NeXus-fourier            test-histo-NeXus.msr          -f)
add_musrview_test(musrview-histo-NeXus-fourier-avg        test-histo-NeXus.msr          -f -a)

add_musrview_test(musrview-histo-NeXus2                   test-histo-NeXus2.msr)
add_musrview_test(musrview-histo-NeXus2-fourier           test-histo-NeXus2.msr         -f)
add_musrview_test(musrview-histo-NeXus2-fourier-avg       test-histo-NeXus2.msr         -f -a)

# asymmetry fits
add_musrview_test(musrview-asy-PSI-BIN                    test-asy-PSI-BIN.msr)
add_musrview_test(musrview-asy-PSI-BIN-fourier            test-asy-PSI-BIN.msr          -f)
add_musrview_test(musrview-asy-PSI-BIN-fourier-avg        test-asy-PSI-BIN.msr          -f -a)

add_musrview_test(musrview-asy-MUD                        test-asy-MUD.msr)
add_musrview_test(musrview-asy-MUD-fourier                test-asy-MUD.msr              -f)
add_musrview_test(musrview-asy-MUD-fourier-avg            test-asy-MUD.msr              -f -a)

add_musrview_test(musrview-asy-NeXus2                     test-asy-NeXus2.msr)
add_musrview_test(musrview-asy-NeXus2-fourier             test-asy-NeXus2.msr           -f)
add_musrview_test(musrview-asy-NeXus2-fourier-avg         test-asy-NeXus2.msr           -f -a)

add_musrview_test(musrview-asy-HAL9500-RRF                test-asy-HAL9500-RRF.msr)
add_musrview_test(musrview-asy-HAL9500-RRF-fourier        test-asy-HAL9500-RRF.msr      -f)
add_musrview_test(musrview-asy-HAL9500-RRF-fourier-avg    test-asy-HAL9500-RRF.msr      -f -a)

add_musrview_test(musrview-asy-LF-BaB6                    test-asy-LF-BaB6.msr)
add_musrview_test(musrview-asy-LF-BaB6-fourier            test-asy-LF-BaB6.msr          -f)
add_musrview_test(musrview-asy-LF-BaB6-fourier-avg        test-asy-LF-BaB6.msr          -f -a)

#--- doc/examples/ViewOpts tests ----------------------------------------------

add_musrview_test(musrview-asy-PSI-BIN-range                                       ViewOpts/test-asy-PSI-BIN-range.msr)
add_musrview_test(musrview-asy-PSI-BIN-range-fourier                               ViewOpts/test-asy-PSI-BIN-range.msr                               -f)
add_musrview_test(musrview-asy-PSI-BIN-range-fourier-avg                           ViewOpts/test-asy-PSI-BIN-range.msr                               -f -a)

add_musrview_test(musrview-asy-PSI-BIN-use_fit_ranges                              ViewOpts/test-asy-PSI-BIN-use_fit_ranges.msr)
add_musrview_test(musrview-asy-PSI-BIN-use_fit_ranges-fourier                      ViewOpts/test-asy-PSI-BIN-use_fit_ranges.msr                      -f)
add_musrview_test(musrview-asy-PSI-BIN-use_fit_ranges-fourier-avg                  ViewOpts/test-asy-PSI-BIN-use_fit_ranges.msr                      -f -a)

add_musrview_test(musrview-histo-PSI-BIN-no-scale-range-lc                         ViewOpts/test-histo-PSI-BIN-no-scale-range-lifetimecorrection.msr)
add_musrview_test(musrview-histo-PSI-BIN-no-scale-range-lc-fourier                 ViewOpts/test-histo-PSI-BIN-no-scale-range-lifetimecorrection.msr -f)
add_musrview_test(musrview-histo-PSI-BIN-no-scale-range-lc-fourier-avg             ViewOpts/test-histo-PSI-BIN-no-scale-range-lifetimecorrection.msr -f -a)

add_musrview_test(musrview-histo-PSI-BIN-no-scale-range-no-lc                      ViewOpts/test-histo-PSI-BIN-no-scale-range-no-lifetimecorrection.msr)
add_musrview_test(musrview-histo-PSI-BIN-no-scale-range-no-lc-fourier              ViewOpts/test-histo-PSI-BIN-no-scale-range-no-lifetimecorrection.msr -f)
add_musrview_test(musrview-histo-PSI-BIN-no-scale-range-no-lc-fourier-avg          ViewOpts/test-histo-PSI-BIN-no-scale-range-no-lifetimecorrection.msr -f -a)

add_musrview_test(musrview-histo-PSI-BIN-scale-fitRangeBin-range-lc                ViewOpts/test-histo-PSI-BIN-scale-fitRangeBin-range-lifetimecorrection.msr)
add_musrview_test(musrview-histo-PSI-BIN-scale-fitRangeBin-range-lc-fourier        ViewOpts/test-histo-PSI-BIN-scale-fitRangeBin-range-lifetimecorrection.msr -f)
add_musrview_test(musrview-histo-PSI-BIN-scale-fitRangeBin-range-lc-fourier-avg    ViewOpts/test-histo-PSI-BIN-scale-fitRangeBin-range-lifetimecorrection.msr -f -a)

add_musrview_test(musrview-histo-PSI-BIN-scale-fitRangeBin-ufr-lc                  ViewOpts/test-histo-PSI-BIN-scale-fitRangeBin-use_fit_ranges-lifetimecorrection.msr)
add_musrview_test(musrview-histo-PSI-BIN-scale-fitRangeBin-ufr-lc-fourier          ViewOpts/test-histo-PSI-BIN-scale-fitRangeBin-use_fit_ranges-lifetimecorrection.msr -f)
add_musrview_test(musrview-histo-PSI-BIN-scale-fitRangeBin-ufr-lc-fourier-avg      ViewOpts/test-histo-PSI-BIN-scale-fitRangeBin-use_fit_ranges-lifetimecorrection.msr -f -a)

add_musrview_test(musrview-histo-PSI-BIN-scale-range-lc                            ViewOpts/test-histo-PSI-BIN-scale-range-lifetimecorrection.msr)
add_musrview_test(musrview-histo-PSI-BIN-scale-range-lc-fourier                    ViewOpts/test-histo-PSI-BIN-scale-range-lifetimecorrection.msr    -f)
add_musrview_test(musrview-histo-PSI-BIN-scale-range-lc-fourier-avg                ViewOpts/test-histo-PSI-BIN-scale-range-lifetimecorrection.msr    -f -a)

add_musrview_test(musrview-histo-PSI-BIN-scale-range-no-lc                         ViewOpts/test-histo-PSI-BIN-scale-range-no-lifetimecorrection.msr)
add_musrview_test(musrview-histo-PSI-BIN-scale-range-no-lc-fourier                 ViewOpts/test-histo-PSI-BIN-scale-range-no-lifetimecorrection.msr -f)
add_musrview_test(musrview-histo-PSI-BIN-scale-range-no-lc-fourier-avg             ViewOpts/test-histo-PSI-BIN-scale-range-no-lifetimecorrection.msr -f -a)

add_musrview_test(musrview-histo-PSI-BIN-scale-sub_ranges-lc                       ViewOpts/test-histo-PSI-BIN-scale-sub_ranges-lifetimecorrection.msr)
add_musrview_test(musrview-histo-PSI-BIN-scale-sub_ranges-lc-fourier               ViewOpts/test-histo-PSI-BIN-scale-sub_ranges-lifetimecorrection.msr -f)
add_musrview_test(musrview-histo-PSI-BIN-scale-sub_ranges-lc-fourier-avg           ViewOpts/test-histo-PSI-BIN-scale-sub_ranges-lifetimecorrection.msr -f -a)

add_musrview_test(musrview-histo-PSI-BIN-scale-ufr-lc                              ViewOpts/test-histo-PSI-BIN-scale-use_fit_ranges-lifetimecorrection.msr)
add_musrview_test(musrview-histo-PSI-BIN-scale-ufr-lc-fourier                      ViewOpts/test-histo-PSI-BIN-scale-use_fit_ranges-lifetimecorrection.msr -f)
add_musrview_test(musrview-histo-PSI-BIN-scale-ufr-lc-fourier-avg                  ViewOpts/test-histo-PSI-BIN-scale-use_fit_ranges-lifetimecorrection.msr -f -a)

add_musrview_test(musrview-histo-PSI-BIN-scale-ufr-no-lc                           ViewOpts/test-histo-PSI-BIN-scale-use_fit_ranges-no-lifetimecorrection.msr)
add_musrview_test(musrview-histo-PSI-BIN-scale-ufr-no-lc-fourier                   ViewOpts/test-histo-PSI-BIN-scale-use_fit_ranges-no-lifetimecorrection.msr -f)
add_musrview_test(musrview-histo-PSI-BIN-scale-ufr-no-lc-fourier-avg               ViewOpts/test-histo-PSI-BIN-scale-use_fit_ranges-no-lifetimecorrection.msr -f -a)
