diff options
Diffstat (limited to 'Tests/Tutorial/Step3')
| -rw-r--r-- | Tests/Tutorial/Step3/CMakeLists.txt | 68 | ||||
| -rw-r--r-- | Tests/Tutorial/Step3/MathFunctions/CMakeLists.txt | 4 | ||||
| -rw-r--r-- | Tests/Tutorial/Step3/MathFunctions/MathFunctions.h | 1 | ||||
| -rw-r--r-- | Tests/Tutorial/Step3/MathFunctions/mysqrt.cxx | 29 | ||||
| -rw-r--r-- | Tests/Tutorial/Step3/TutorialConfig.h.in | 5 | ||||
| -rw-r--r-- | Tests/Tutorial/Step3/tutorial.cxx | 34 | 
6 files changed, 141 insertions, 0 deletions
diff --git a/Tests/Tutorial/Step3/CMakeLists.txt b/Tests/Tutorial/Step3/CMakeLists.txt new file mode 100644 index 0000000..0b05fd7 --- /dev/null +++ b/Tests/Tutorial/Step3/CMakeLists.txt @@ -0,0 +1,68 @@ +cmake_minimum_required (VERSION 2.6) +project (Tutorial) + +# The version number. +set (Tutorial_VERSION_MAJOR 1) +set (Tutorial_VERSION_MINOR 0) + +# should we use our own math functions +option(USE_MYMATH "Use tutorial provided math implementation" ON) + +# configure a header file to pass some of the CMake settings +# to the source code +configure_file ( +  "${PROJECT_SOURCE_DIR}/TutorialConfig.h.in" +  "${PROJECT_BINARY_DIR}/TutorialConfig.h" +  ) + +# add the binary tree to the search path for include files +# so that we will find TutorialConfig.h +include_directories ("${PROJECT_BINARY_DIR}") + +# add the MathFunctions library? +if (USE_MYMATH) +  include_directories ("${PROJECT_SOURCE_DIR}/MathFunctions") +  add_subdirectory (MathFunctions) +  set (EXTRA_LIBS ${EXTRA_LIBS} MathFunctions) +endif (USE_MYMATH) + +# add the executable +add_executable (Tutorial tutorial.cxx) +target_link_libraries (Tutorial  ${EXTRA_LIBS}) + +# add the install targets +install (TARGETS Tutorial DESTINATION bin) +install (FILES "${PROJECT_BINARY_DIR}/TutorialConfig.h"  +  DESTINATION include) + + +# enable testing +enable_testing () + +# does the application run +add_test (TutorialRuns Tutorial 25) + +# does it sqrt of 25 +add_test (TutorialComp25 Tutorial 25) +set_tests_properties (TutorialComp25  +  PROPERTIES PASS_REGULAR_EXPRESSION "25 is 5" +  ) + +# does it handle negative numbers +add_test (TutorialNegative Tutorial -25) +set_tests_properties (TutorialNegative +  PROPERTIES PASS_REGULAR_EXPRESSION "-25 is 0" +  ) + +# does it handle small numbers +add_test (TutorialSmall Tutorial 0.0001) +set_tests_properties (TutorialSmall +  PROPERTIES PASS_REGULAR_EXPRESSION "0.0001 is 0.01" +  ) + +# does the usage message work? +add_test (TutorialUsage Tutorial) +set_tests_properties (TutorialUsage +  PROPERTIES  +  PASS_REGULAR_EXPRESSION "Usage:.*number" +  ) diff --git a/Tests/Tutorial/Step3/MathFunctions/CMakeLists.txt b/Tests/Tutorial/Step3/MathFunctions/CMakeLists.txt new file mode 100644 index 0000000..f386036 --- /dev/null +++ b/Tests/Tutorial/Step3/MathFunctions/CMakeLists.txt @@ -0,0 +1,4 @@ +add_library(MathFunctions mysqrt.cxx) + +install (TARGETS MathFunctions DESTINATION bin) +install (FILES MathFunctions.h DESTINATION include) diff --git a/Tests/Tutorial/Step3/MathFunctions/MathFunctions.h b/Tests/Tutorial/Step3/MathFunctions/MathFunctions.h new file mode 100644 index 0000000..cd36bcc --- /dev/null +++ b/Tests/Tutorial/Step3/MathFunctions/MathFunctions.h @@ -0,0 +1 @@ +double mysqrt(double x); diff --git a/Tests/Tutorial/Step3/MathFunctions/mysqrt.cxx b/Tests/Tutorial/Step3/MathFunctions/mysqrt.cxx new file mode 100644 index 0000000..76b8e2d --- /dev/null +++ b/Tests/Tutorial/Step3/MathFunctions/mysqrt.cxx @@ -0,0 +1,29 @@ +#include <stdio.h> +#include "MathFunctions.h" + +// a hack square root calculation using simple operations +double mysqrt(double x) +{ +  if (x <= 0) +    { +    return 0; +    } +   +  double result; +  double delta;   +  result = x; + +  // do ten iterations +  int i; +  for (i = 0; i < 10; ++i) +    { +    if (result <= 0) +      { +      result = 0.1; +      } +    delta = x - (result*result); +    result = result + 0.5*delta/result; +    fprintf(stdout,"Computing sqrt of %g to be %g\n",x,result); +    } +  return result; +} diff --git a/Tests/Tutorial/Step3/TutorialConfig.h.in b/Tests/Tutorial/Step3/TutorialConfig.h.in new file mode 100644 index 0000000..25a0602 --- /dev/null +++ b/Tests/Tutorial/Step3/TutorialConfig.h.in @@ -0,0 +1,5 @@ +// the configured options and settings for Tutorial +#define Tutorial_VERSION_MAJOR @Tutorial_VERSION_MAJOR@ +#define Tutorial_VERSION_MINOR @Tutorial_VERSION_MINOR@ +#cmakedefine USE_MYMATH + diff --git a/Tests/Tutorial/Step3/tutorial.cxx b/Tests/Tutorial/Step3/tutorial.cxx new file mode 100644 index 0000000..82b416f --- /dev/null +++ b/Tests/Tutorial/Step3/tutorial.cxx @@ -0,0 +1,34 @@ +// A simple program that computes the square root of a number +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#include "TutorialConfig.h" + +#ifdef USE_MYMATH +#include "MathFunctions.h" +#endif + +int main (int argc, char *argv[]) +{ +  if (argc < 2) +    { +    fprintf(stdout,"%s Version %d.%d\n", +            argv[0], +            Tutorial_VERSION_MAJOR, +            Tutorial_VERSION_MINOR); +    fprintf(stdout,"Usage: %s number\n",argv[0]); +    return 1; +    } + +  double inputValue = atof(argv[1]); + +#ifdef USE_MYMATH +  double outputValue = mysqrt(inputValue); +#else +  double outputValue = sqrt(inputValue); +#endif + +  fprintf(stdout,"The square root of %g is %g\n", +          inputValue, outputValue); +  return 0; +}  | 
