#
# Test SET
#
set (ZERO_VAR 0)
set (ZERO_VAR2 0)

if(ZERO_VAR)
  add_definitions(-DSHOULD_NOT_BE_DEFINED)
else()
  add_definitions(-DSHOULD_BE_DEFINED)
endif()

set(ONE_VAR 1)
set(ONE_VAR2 1)
set(STRING_VAR "CMake is great" CACHE STRING "test a cache variable")

#
# Test VARIABLE_REQUIRES
#
variable_requires(ONE_VAR
                  ONE_VAR_IS_DEFINED ONE_VAR)

#
# Test various IF/ELSE combinations
#
if(NOT ZERO_VAR)
  add_definitions(-DSHOULD_BE_DEFINED_NOT)
else()
  add_definitions(-DSHOULD_NOT_BE_DEFINED_NOT)
endif()

if(NOT ONE_VAR)
  add_definitions(-DSHOULD_NOT_BE_DEFINED_NOT2)
else()
  add_definitions(-DSHOULD_BE_DEFINED_NOT2)
endif()

if(ONE_VAR AND ONE_VAR2)
  add_definitions(-DSHOULD_BE_DEFINED_AND)
else()
  add_definitions(-DSHOULD_NOT_BE_DEFINED_AND)
endif()

if(ONE_VAR AND ZERO_VAR)
  add_definitions(-DSHOULD_NOT_BE_DEFINED_AND2)
else()
  add_definitions(-DSHOULD_BE_DEFINED_AND2)
endif()

if(ZERO_VAR OR ONE_VAR2)
  add_definitions(-DSHOULD_BE_DEFINED_OR)
else()
  add_definitions(-DSHOULD_NOT_BE_DEFINED_OR)
endif()

if(ZERO_VAR OR ZERO_VAR2)
  add_definitions(-DSHOULD_NOT_BE_DEFINED_OR2)
else()
  add_definitions(-DSHOULD_BE_DEFINED_OR2)
endif()

if(STRING_VAR MATCHES "^CMake")
  add_definitions(-DSHOULD_BE_DEFINED_MATCHES)
else()
  add_definitions(-DSHOULD_NOT_BE_DEFINED_MATCHES)
endif()

if(STRING_VAR MATCHES "^foo")
  add_definitions(-DSHOULD_NOT_BE_DEFINED_MATCHES2)
else()
  add_definitions(-DSHOULD_BE_DEFINED_MATCHES2)
endif()

if(COMMAND "IF")
  add_definitions(-DSHOULD_BE_DEFINED_COMMAND)
else()
  add_definitions(-DSHOULD_NOT_BE_DEFINED_COMMAND)
endif()

if(COMMAND "ROQUEFORT")
  add_definitions(-DSHOULD_NOT_BE_DEFINED_COMMAND2)
else()
  add_definitions(-DSHOULD_BE_DEFINED_COMMAND2)
endif()

if (EXISTS ${Complex_SOURCE_DIR}/VarTests.cmake)
  add_definitions(-DSHOULD_BE_DEFINED_EXISTS)
else()
  add_definitions(-DSHOULD_NOT_BE_DEFINED_EXISTS)
endif ()

if (EXISTS ${Complex_SOURCE_DIR}/roquefort.txt)
  add_definitions(-DSHOULD_NOT_BE_DEFINED_EXISTS2)
else()
  add_definitions(-DSHOULD_BE_DEFINED_EXISTS2)
endif ()

if (IS_DIRECTORY ${Complex_SOURCE_DIR})
  add_definitions(-DSHOULD_BE_DEFINED_IS_DIRECTORY)
endif ()

if (NOT IS_DIRECTORY ${Complex_SOURCE_DIR}/VarTests.cmake)
  add_definitions(-DSHOULD_BE_DEFINED_IS_DIRECTORY2)
endif ()

set (SNUM1_VAR "1")
set (SNUM2_VAR "2")
set (SNUM3_VAR "1")


if (SNUM1_VAR LESS SNUM2_VAR)
  add_definitions(-DSHOULD_BE_DEFINED_LESS)
else ()
  add_definitions(-DSHOULD_NOT_BE_DEFINED_LESS)
endif ()

if (SNUM2_VAR LESS SNUM1_VAR)
  add_definitions(-DSHOULD_NOT_BE_DEFINED_LESS2)
else ()
  add_definitions(-DSHOULD_BE_DEFINED_LESS2)
endif ()

if (SNUM2_VAR GREATER SNUM1_VAR)
  add_definitions(-DSHOULD_BE_DEFINED_GREATER)
else ()
  add_definitions(-DSHOULD_NOT_BE_DEFINED_GREATER)
endif ()

if (SNUM1_VAR GREATER SNUM2_VAR)
  add_definitions(-DSHOULD_NOT_BE_DEFINED_GREATER2)
else ()
  add_definitions(-DSHOULD_BE_DEFINED_GREATER2)
endif ()

if (SNUM2_VAR EQUAL SNUM1_VAR)
  add_definitions(-DSHOULD_NOT_BE_DEFINED_EQUAL)
else ()
  add_definitions(-DSHOULD_BE_DEFINED_EQUAL)
endif ()

if (SNUM3_VAR EQUAL SNUM1_VAR)
  add_definitions(-DSHOULD_BE_DEFINED_EQUAL)
else ()
  add_definitions(-DSHOULD_NOT_BE_DEFINED_EQUAL)
endif ()

if (SNUM1_VAR LESS_EQUAL SNUM2_VAR)
  add_definitions(-DSHOULD_BE_DEFINED_LESS_EQUAL)
else ()
  add_definitions(-DSHOULD_NOT_BE_DEFINED_LESS_EQUAL)
endif ()

if (SNUM2_VAR LESS_EQUAL SNUM1_VAR)
  add_definitions(-DSHOULD_NOT_BE_DEFINED_LESS_EQUAL2)
else ()
  add_definitions(-DSHOULD_BE_DEFINED_LESS_EQUAL2)
endif ()

if (SNUM1_VAR LESS_EQUAL SNUM3_VAR)
  add_definitions(-DSHOULD_BE_DEFINED_LESS_EQUAL3)
else ()
  add_definitions(-DSHOULD_BE_DEFINED_LESS_EQUAL3)
endif ()

if (SNUM2_VAR GREATER_EQUAL SNUM1_VAR)
  add_definitions(-DSHOULD_BE_DEFINED_GREATER_EQUAL)
else ()
  add_definitions(-DSHOULD_NOT_BE_DEFINED_GREATER_EQUAL)
endif ()

if (SNUM1_VAR GREATER_EQUAL SNUM2_VAR)
  add_definitions(-DSHOULD_NOT_BE_DEFINED_GREATER_EQUAL2)
else ()
  add_definitions(-DSHOULD_BE_DEFINED_GREATER_EQUAL2)
endif ()

if (SNUM1_VAR GREATER_EQUAL SNUM3_VAR)
  add_definitions(-DSHOULD_BE_DEFINED_GREATER_EQUAL3)
else ()
  add_definitions(-DSHOULD_NOT_BE_DEFINED_GREATER_EQUAL3)
endif ()

set (SSTR1_VAR "abc")
set (SSTR2_VAR "bcd")

if (SSTR1_VAR STRLESS SSTR2_VAR)
  add_definitions(-DSHOULD_BE_DEFINED_STRLESS)
else ()
  add_definitions(-DSHOULD_NOT_BE_DEFINED_STRLESS)
endif ()

if (SSTR2_VAR STRLESS SSTR1_VAR)
  add_definitions(-DSHOULD_NOT_BE_DEFINED_STRLESS2)
else ()
  add_definitions(-DSHOULD_BE_DEFINED_STRLESS2)
endif ()

if (SSTR2_VAR STRGREATER SSTR1_VAR)
  add_definitions(-DSHOULD_BE_DEFINED_STRGREATER)
else ()
  add_definitions(-DSHOULD_NOT_BE_DEFINED_STRGREATER)
endif ()

if (SSTR1_VAR STRGREATER SSTR2_VAR)
  add_definitions(-DSHOULD_NOT_BE_DEFINED_STRGREATER2)
else ()
  add_definitions(-DSHOULD_BE_DEFINED_STRGREATER2)
endif ()

if (SSTR1_VAR STRLESS_EQUAL SSTR2_VAR)
  add_definitions(-DSHOULD_BE_DEFINED_STRLESS_EQUAL)
else ()
  add_definitions(-DSHOULD_NOT_BE_DEFINED_STRLESS_EQUAL)
endif ()

if (SSTR2_VAR STRLESS_EQUAL SSTR1_VAR)
  add_definitions(-DSHOULD_NOT_BE_DEFINED_STRLESS_EQUAL2)
else ()
  add_definitions(-DSHOULD_BE_DEFINED_STRLESS_EQUAL2)
endif ()

if (SSTR1_VAR STRLESS_EQUAL SSTR1_VAR)
  add_definitions(-DSHOULD_BE_DEFINED_STRLESS_EQUAL3)
else ()
  add_definitions(-DSHOULD_NOT_BE_DEFINED_STRLESS_EQUAL3)
endif ()

if (SSTR2_VAR STRGREATER_EQUAL SSTR1_VAR)
  add_definitions(-DSHOULD_BE_DEFINED_STRGREATER_EQUAL)
else ()
  add_definitions(-DSHOULD_NOT_BE_DEFINED_STRGREATER_EQUAL)
endif ()

if (SSTR1_VAR STRGREATER_EQUAL SSTR2_VAR)
  add_definitions(-DSHOULD_NOT_BE_DEFINED_STRGREATER_EQUAL2)
else ()
  add_definitions(-DSHOULD_BE_DEFINED_STRGREATER_EQUAL2)
endif ()

if (SSTR1_VAR STRGREATER_EQUAL SSTR1_VAR)
  add_definitions(-DSHOULD_BE_DEFINED_STRGREATER_EQUAL3)
else ()
  add_definitions(-DSHOULD_NOT_BE_DEFINED_STRGREATER_EQUAL3)
endif ()

#
# Test FOREACH
#
foreach (INDEX 1 2)
  set(FOREACH_VAR${INDEX} "VALUE${INDEX}")
endforeach()

set(FOREACH_CONCAT "")
foreach (INDEX a;b;c;d;e;f;g)
  string(APPEND FOREACH_CONCAT "${INDEX}")
endforeach()
