cmake_minimum_required (VERSION 2.6) project(MathTest) # Expression test set(expressions "5 * ( 3 + 4)" "(1 | 2 | 4 | 8) & 16" "1 +(3*4) + 10 >> 2" "10000 / 20 / 4" "10000 / (20 / 4)" "-1 + +1" "+1 - -1" "+1 - - + + -(-3 + - - +1)" "1000 -12*5" "1000 +12*-5" "1000 -12*-5" "~~1" "1000 & ~0" ) set(FILE_EXPRESSIONS "extern void test_expression(int x, int y, const char * text);\n") macro(add_math_test expression) math(EXPR result ${expression} ${ARGV1} ${ARGV2}) set(CODE "test_expression(${expression}, ${result}, \"${expression}\");") string(APPEND FILE_EXPRESSIONS "${CODE}\n") endmacro() macro(add_math_tests) foreach (expression ${expressions}) add_math_test(${expression} ${ARGV0} ${ARGV1}) endforeach () endmacro() add_math_tests() add_math_tests("OUTPUT_FORMAT" "DECIMAL") add_math_tests("OUTPUT_FORMAT" "HEXADECIMAL") # Avoid the test with negative result and hexadecimal formatting # therefore more tests with a negative result add_math_test("-12*5") add_math_test("12*-5") configure_file( "${CMAKE_CURRENT_SOURCE_DIR}/MathTestTests.h.in" "${CMAKE_CURRENT_BINARY_DIR}/MathTestTests.h" @ONLY) include_directories("${CMAKE_CURRENT_BINARY_DIR}") add_executable(MathTest MathTestExec.cxx)