chiark / gitweb /
Add guile test
authorJulien Schueller <schueller@phimeca.com>
Wed, 13 Jul 2016 19:22:46 +0000 (21:22 +0200)
committerJulien Schueller <schueller@phimeca.com>
Thu, 14 Jul 2016 06:52:27 +0000 (08:52 +0200)
.travis.yml
cmake/FindGuile.cmake
swig/CMakeLists.txt
test/CMakeLists.txt
test/t_guile.scm [new file with mode: 0644]

index d7cf71edcabd1f10a558206cf0df1ce6ed274603..d1f8a36cc048b88792d508ccfa75a9284575f680 100644 (file)
@@ -35,7 +35,7 @@ matrix:
         - brew tap homebrew/python
         - brew tap homebrew/science
         - brew update
-        - brew install swig numpy octave
+        - brew install swig numpy octave guile
       script:
         - mkdir build && pushd build
         - cmake -DCMAKE_INSTALL_PREFIX=~/.local  -DWITH_CXX=ON ..
index c2862d0cc17f0184c660c1e2fc7f96a451f29d67..48cdf44c201e068b91061036a7abc0e30b76d56f 100644 (file)
@@ -62,6 +62,10 @@ if (GUILE_INCLUDE_DIR)
 
 endif ()
 
+find_program(GUILE_EXECUTABLE
+              NAMES guile
+           )
+
 find_program(GUILE_CONFIG_EXECUTABLE
               NAMES guile-config
            )
@@ -71,7 +75,7 @@ if (GUILE_CONFIG_EXECUTABLE)
   execute_process (COMMAND ${GUILE_CONFIG_EXECUTABLE} info prefix
                     OUTPUT_VARIABLE GUILE_ROOT_DIR
                     OUTPUT_STRIP_TRAILING_WHITESPACE)
-                    
+
   execute_process (COMMAND ${GUILE_CONFIG_EXECUTABLE} info sitedir
                     OUTPUT_VARIABLE GUILE_SITE_DIR
                     OUTPUT_STRIP_TRAILING_WHITESPACE)
index 6eb98737ad04b0a9b65cbda1b52cf520dfd169f4..fafb5124c78e6eb7a3ad1b88c61837d65ccea39e 100644 (file)
@@ -58,7 +58,7 @@ if (GUILE_FOUND AND ((SWIG_FOUND AND SWIG_VERSION VERSION_GREATER 2.0.9) OR (EXI
     configure_file (${CMAKE_CURRENT_SOURCE_DIR}/nlopt.scm.in ${CMAKE_CURRENT_BINARY_DIR}/nlopt.scm @ONLY)
   endif ()
 
-  set (SWIG_MODULE_nlopt_guile_REAL_NAME nlopt_guile)
+  set (SWIG_MODULE_nlopt_guile_REAL_NAME nlopt${NLOPT_SUFFIX}_guile)
   add_library (${SWIG_MODULE_nlopt_guile_REAL_NAME} MODULE ${guile_cpp_source})
   target_link_libraries(${SWIG_MODULE_nlopt_guile_REAL_NAME} ${nlopt_lib})
   target_link_libraries(${SWIG_MODULE_nlopt_guile_REAL_NAME} ${GUILE_LIBRARIES})
index 2816357150f709399d9c3866906bb6aa759dc6c1..1caf7d4ea2354748c0231f89c8f13e6dd7f22838 100644 (file)
@@ -34,4 +34,12 @@ endif ()
 
 if (OCTAVE_FOUND)
   add_test (NAME test_octave COMMAND ${OCTAVE_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/t_octave.m ${CMAKE_SOURCE_DIR}/octave ${CMAKE_BINARY_DIR}/octave)
+endif ()
+
+if (GUILE_FOUND AND ((SWIG_FOUND AND SWIG_VERSION VERSION_GREATER 2.0.9) OR (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/nlopt-guile.cpp)))
+  set (GUILECHECK_ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/swig"
+                              "GUILE_LOAD_PATH=${CMAKE_BINARY_DIR}/swig"
+    )
+  add_test (NAME test_guile COMMAND ${GUILE_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/t_guile.scm)
+  set_tests_properties (test_guile PROPERTIES ENVIRONMENT "${GUILECHECK_ENVIRONMENT}")
 endif ()
\ No newline at end of file
diff --git a/test/t_guile.scm b/test/t_guile.scm
new file mode 100644 (file)
index 0000000..99f3577
--- /dev/null
@@ -0,0 +1,36 @@
+(use-modules (nlopt))
+
+(define (myfunc x grad)
+  (if grad
+      (begin
+        (vector-set! grad 0 0.0)
+        (vector-set! grad 1 (/ 0.5 (sqrt (vector-ref x 1))))))
+  (sqrt (vector-ref x 1)))
+
+(define (myconstraint x grad a b)
+  (let ((x0 (vector-ref x 0)) (x1 (vector-ref x 1)))
+    (if grad
+        (begin
+          (vector-set! grad 0 (* 3 a (expt (+ (* a x0) b) 2)))
+          (vector-set! grad 1 -1.0)))
+    (- (expt (+ (* a x0) b) 3) x1)))
+
+(define opt (new-nlopt-opt NLOPT-LD-MMA 2))
+(nlopt-opt-set-lower-bounds opt (vector (- (inf)) 0))
+(nlopt-opt-set-min-objective opt myfunc)
+(nlopt-opt-add-inequality-constraint opt (lambda (x grad)
+                                           (myconstraint x grad 2 0))
+                                     1e-8)
+(nlopt-opt-add-inequality-constraint opt (lambda (x grad)
+                                           (myconstraint x grad -1 1))
+                                     1e-8)
+(nlopt-opt-set-xtol-rel opt 1e-4)
+(define x (nlopt-opt-optimize opt (vector 1.234 5.678)))
+(define minf (nlopt-opt-last-optimum-value opt))
+(define result (nlopt-opt-last-optimize-result opt))
+(display "x=")
+(display x)
+(newline)
+(display "minf=")
+(display minf)
+(newline)