
######################### D A T A #########################

file(READ "download_tests_regress_src_files.txt" files)
string(REGEX REPLACE "\n" ";" files "${files}")
ecbuild_get_test_multidata( TARGET download_tests_regress_src_files NOCHECK NAMES ${files} )

file(READ "download_tests_regress_ref_files.txt" files)
string(REGEX REPLACE "\n" ";" files "${files}")
ecbuild_get_test_multidata( TARGET download_tests_regress_ref_files NOCHECK NAMES ${files} )


######################## EMOS-216 #########################

# tests with intuvp2
set( basen "regress_EMOS-216_intuvp2" )
foreach( area "" "_sub-area" )
  foreach( out "regular_ll" "F80" "N80" "O80" )
    set( in "vo-d_sh" )
    set( test "${basen}_${in}_to_${out}${area}" )
    set( input "${in}.grib" )
    set( output "${test}.grib" )
    if( NOT (test MATCHES "_sh_.+_to_O" AND NOT HAVE_FFTW) )
      unset( opt )
      if( out MATCHES "^regular_ll" )
        list( APPEND opt "--grid=3/3" )
      else()
        list( APPEND opt "--gridname=${out}" )
      endif()
      if( "${area}" STREQUAL "_sub-area" )
        list( APPEND opt "--area=70/-60/20/60" )
      endif()
  
      # interpolate
      ecbuild_add_test(
        TARGET       ${test}_interpol
        DEPENDS      int
        TEST_DEPENDS download_tests_regress_src_files
        COMMAND      ${CMD_INT}
        ARGS         --input=${input} --output=${output} ${opt} --int=intuvp2
        ENVIRONMENT  ${_emos_environment} )
  
      # compare results to reference data
      ecbuild_add_test(
        TARGET       ${test}_compare
        TEST_DEPENDS ${test}_interpol download_tests_regress_ref_files
        CONDITION    CMD_GRIB_COMPARE
        COMMAND      ${CMD_GRIB_COMPARE}
        ARGS         ${output}.ref ${output}
        ENVIRONMENT  ${_grib_environment} )

      unset( opt )
    endif()
    unset( output )
    unset( input )
    unset( test )
    unset( in )
  endforeach()
endforeach()
unset( basen )

# tests with intf2
# not possible:
# - regular_ll to reduced_gg (but regular_ll to regular_gg is possible)
# - regular_gg to reduced_gg
# - any to rotated reduced_gg/regular_gg
# - regular_ll to rotated regular_ll
# - ... weird HIRLAM restrictions?
# - any to octahedral without FFTW
# - swh_reduced_ll interpolations (SIGFPE, Arithmetic exception in INTIN) (FIXME: temporary disabling)
set( basen "regress_EMOS-216_intf2" )
foreach( area "" "_sub-area" )
  foreach( rotated "" "rotated_" "hirlam_non-rotated_" )
    foreach( in "2t_F640" "2t_F640_sub-area" "2t_N640" "2t_O1280" "2t_regular_ll" "2t_regular_ll_staggered" "2t_regular_ll_sub-area" "msl_F640" "msl_F640_sub-area" "msl_N640" "msl_O1280" "msl_regular_ll" "msl_regular_ll_sub-area" "swh_reduced_ll" "swh_reduced_ll_sub-area" "u-v_sh" "z_sh" )
      foreach( out "regular_ll" "F80" "N80" "O80" "F48" )
        set( test "${basen}_${in}_to_${rotated}${out}${area}" )
        set( input "${in}.grib" )
        set( output "${test}.grib" )
        if(     NOT (test MATCHES "_sub-area_to_" AND NOT test MATCHES "_to_.*_sub-area")
            AND NOT (test MATCHES "_regular_ll.*_to_[NO]")
            AND NOT (test MATCHES "_F.+_to_[NO]")
            AND NOT (test MATCHES "(F.+|reduced_ll)_to_.*rotated_regular_ll")
            AND NOT (test MATCHES "_to_[NO].*_sub-area")
            AND NOT (test MATCHES "_to_.*rotated_[NOF]")
            AND NOT (test MATCHES "_to_.*rotated_.*sub-area")
            AND NOT (test MATCHES "_regular_ll.*_to_.*rotated_regular_ll$")
            AND NOT (test MATCHES "_sh.*_to_O" AND NOT HAVE_FFTW)
            AND NOT (input MATCHES "swh_reduced_ll.*") ) #(FIXME)
          unset( opt )
          if( out MATCHES "^regular_ll" )
            list( APPEND opt "--grid=3/3" )
          else()
            list( APPEND opt "--gridname=${out}" )
          endif()
          if( "${rotated}" STREQUAL "hirlam_non-rotated_" )
            list( APPEND opt "--rotation=-90/0" )
          elseif( "${rotated}" STREQUAL "rotated_" )
            list( APPEND opt "--rotation=30/30" )
          endif()
          if( "${area}" STREQUAL "_sub-area" )
            list( APPEND opt "--area=70/-60/20/60" )
          endif()

          # interpolate
          ecbuild_add_test(
            TARGET       ${test}_interpol
            DEPENDS      int
            TEST_DEPENDS download_tests_regress_src_files
            COMMAND      ${CMD_INT}
            ARGS         --input=${input} --output=${output} ${opt} --int=intf2
            ENVIRONMENT  ${_emos_environment} )

          # compare results to reference data, strict comparison except in some cases
          if(    (test MATCHES "_F640_to_regular_ll")
              OR (test MATCHES "_N640_to_(regular_ll|O80|F80|F48)")
              OR (test MATCHES "_O1280_to_(regular_ll|N80)") )
            ecbuild_add_test(
              TARGET       ${test}_compare
              TEST_DEPENDS ${test}_interpol download_tests_regress_ref_files
              CONDITION    CMD_GRIB_COMPARE
              COMMAND      ${CMD_GRIB_COMPARE}
              ARGS         -P -T 2 ${output}.ref ${output}
              ENVIRONMENT  ${_grib_environment} )
          else()
            ecbuild_add_test(
              TARGET       ${test}_compare
              TEST_DEPENDS ${test}_interpol download_tests_regress_ref_files
              CONDITION    CMD_GRIB_COMPARE
              COMMAND      ${CMD_GRIB_COMPARE}
              ARGS         ${output}.ref ${output}
              ENVIRONMENT  ${_grib_environment} )
          endif()

          unset( opt )
        endif()
        unset( output )
        unset( input )
        unset( test )
      endforeach()
    endforeach()
  endforeach()
endforeach()
unset( basen )


###########################################################

