Ken Martin 20 лет назад
Родитель
Сommit
814f0a573a

+ 66 - 0
Tests/Tutorial/Step3/CMakeLists.txt

@@ -0,0 +1,66 @@
+project (Tutorial)
+
+# The version number.
+set (Tutorial_VERSION_MAJOR 1)
+set (Tutorial_VERSION_MINOR 0)
+
+# 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"
+  )
+
+# should we use our own math functions
+option(USE_MYMATH "Use tutorial provided math implementation" ON)
+
+# 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 (/bin Tutorial)
+install_files (/include FILES "${PROJECT_BINARY_DIR}/TutorialConfig.h")
+
+
+# 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"
+  )

+ 4 - 0
Tests/Tutorial/Step3/MathFunctions/CMakeLists.txt

@@ -0,0 +1,4 @@
+add_library(MathFunctions mysqrt.cxx)
+
+install_targets (/bin MathFunctions)
+install_files (/include FILES MathFunctions.h)

+ 1 - 0
Tests/Tutorial/Step3/MathFunctions/MathFunctions.h

@@ -0,0 +1 @@
+double mysqrt(double x);

+ 29 - 0
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;
+}

+ 5 - 0
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
+

+ 33 - 0
Tests/Tutorial/Step3/tutorial.cxx

@@ -0,0 +1,33 @@
+// A simple program that computes the square root of a number
+#include <stdio.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;
+}