ob-fortran.el: fix bug with string input, add ob-fortran tests with ert
This commit is contained in:
parent
054ab6ceee
commit
c65df4aa01
|
@ -142,8 +142,8 @@ of the same value."
|
|||
((or (characterp val))
|
||||
(format "character, parameter :: %S = '%S'\n" var val))
|
||||
((stringp val)
|
||||
(format "character, parameter :: %S(%d) = '%s'\n"
|
||||
var (length val) val))
|
||||
(format "character(len=%d), parameter :: %S = '%s'\n"
|
||||
(length val) var val))
|
||||
((listp val)
|
||||
(format "real, parameter :: %S(%d) = %s\n"
|
||||
var (length val) (ob-fortran-transform-list val)))
|
||||
|
|
|
@ -78,6 +78,7 @@ First tangle this file out to your desktop.
|
|||
(org-id-update-id-locations
|
||||
(list (concat org-dir "/testing/examples/babel.org")
|
||||
(concat org-dir "/testing/examples/normal.org")
|
||||
(concat org-dir "/testing/examples/ob-fortran-test.org")
|
||||
(concat org-dir "/testing/examples/link-in-heading.org")
|
||||
(concat org-dir "/testing/examples/links.org")))
|
||||
|
||||
|
|
|
@ -1,76 +1,86 @@
|
|||
* Test org fortran file
|
||||
#+begin_src fortran
|
||||
#+Title: a collection of examples for ob-fortran tests
|
||||
#+OPTIONS: ^:nil
|
||||
|
||||
* simple programs
|
||||
:PROPERTIES:
|
||||
:ID: 459384e8-1797-4f11-867e-dde0473ea7cc
|
||||
:END:
|
||||
#+source: hello
|
||||
#+begin_src fortran :results silent
|
||||
print *, 'Hello world'
|
||||
#+end_src
|
||||
|
||||
#+begin_src fortran
|
||||
#+source: fortran_parameter
|
||||
#+begin_src fortran :results silent
|
||||
integer, parameter :: i = 10
|
||||
print *, 'i = ', i
|
||||
write (*, '(i2)') i
|
||||
#+end_src
|
||||
|
||||
#+begin_src fortran :var N = 10
|
||||
print *, 'N = ', N
|
||||
* variable resolution
|
||||
:PROPERTIES:
|
||||
:ID: d8d1dfd3-5f0c-48fe-b55d-777997e02242
|
||||
:END:
|
||||
#+begin_src fortran :var N = 15 :results silent
|
||||
write (*, '(i2)') N
|
||||
#+end_src
|
||||
|
||||
Define for preprocessed fortran
|
||||
#+begin_src fortran :defines N 42
|
||||
#+begin_src fortran :defines N 42 :results silent
|
||||
implicit none
|
||||
print *, 'N = ', N
|
||||
write (*, '(i2)') N
|
||||
#+end_src
|
||||
|
||||
#+begin_src fortran :var s="word"
|
||||
print *, 's = ', s
|
||||
print *, 'size(s) = ', size(s)
|
||||
#+begin_src fortran :var s="word" :results silent
|
||||
write (*, '(a4)') s
|
||||
#+end_src
|
||||
|
||||
#+begin_src fortran :var s=42.0
|
||||
print *, 's = ', s
|
||||
print *, 'kind(s) = ', kind(s)
|
||||
#+end_src
|
||||
|
||||
#+begin_src fortran
|
||||
program ex
|
||||
print *, "output of ex program"
|
||||
end program ex
|
||||
#+end_src
|
||||
|
||||
Should fail (TODO: add input variables for the case with explicit
|
||||
program statement)
|
||||
#+begin_src fortran :var s="word"
|
||||
program ex
|
||||
print *, "output of ex program"
|
||||
end program ex
|
||||
#+end_src
|
||||
|
||||
* arrays
|
||||
:PROPERTIES:
|
||||
:ID: c28569d9-04ce-4cad-ab81-1ea29f691465
|
||||
:END:
|
||||
Real array as input
|
||||
#+begin_src fortran :var s='(1.0 2.0 3.0)
|
||||
print *, s
|
||||
#+begin_src fortran :var s='(1.0 2.0 3.0) :results silent
|
||||
write (*, '(3f5.2)'), s
|
||||
#+end_src
|
||||
|
||||
#+tblname: test_tbl
|
||||
| 1.0 |
|
||||
| 2.0 |
|
||||
|
||||
Real array as input
|
||||
#+begin_src fortran :var s=test_tbl
|
||||
print *, s
|
||||
#+begin_src fortran :var s=test_tbl :results silent
|
||||
write (*, '(2f5.2)'), s
|
||||
#+end_src
|
||||
|
||||
* failing
|
||||
:PROPERTIES:
|
||||
:ID: 891ead4a-f87a-473c-9ae0-1cf348bcd04f
|
||||
:END:
|
||||
Should fail (TODO: add input variables for the case with explicit
|
||||
program statement)
|
||||
#+begin_src fortran :var s="word" :results silent
|
||||
program ex
|
||||
print *, "output of ex program"
|
||||
end program ex
|
||||
#+end_src
|
||||
|
||||
Fails to compile (TODO: error check in ob-fortran.el)
|
||||
#+begin_src fortran :var s='(1 ())
|
||||
#+begin_src fortran :var s='(1 ()) :results silent
|
||||
print *, s
|
||||
#+end_src
|
||||
|
||||
Should fail to compile with gfortran
|
||||
#+begin_src fortran :flags --std=f95 --pedantic-error
|
||||
#+begin_src fortran :flags --std=f95 --pedantic-error :results silent
|
||||
program ex
|
||||
integer*8 :: i
|
||||
end program ex
|
||||
#+end_src
|
||||
|
||||
* programs input parameters
|
||||
:PROPERTIES:
|
||||
:ID: 2d5330ea-9934-4737-9ed6-e1d3dae2dfa4
|
||||
:END:
|
||||
Pass parameters to the program
|
||||
#+begin_src fortran :cmdline "23"
|
||||
#+begin_src fortran :cmdline "23" :results silent
|
||||
character(len=255) :: cmd
|
||||
call get_command(cmd)
|
||||
call get_command_argument(1, cmd)
|
||||
write (*,*) trim(cmd)
|
||||
#+end_src
|
||||
|
|
|
@ -0,0 +1,80 @@
|
|||
(require 'ob-fortran)
|
||||
|
||||
(ert-deftest ob-fortran/assert ()
|
||||
(should t))
|
||||
|
||||
(ert-deftest ob-fortran/simple-program ()
|
||||
"Test of hello world program."
|
||||
(org-test-at-id "459384e8-1797-4f11-867e-dde0473ea7cc"
|
||||
(org-babel-next-src-block)
|
||||
(should (equal "Hello world" (org-babel-execute-src-block))))
|
||||
)
|
||||
|
||||
(ert-deftest ob-fortran/fortran-var-program ()
|
||||
"Test a fortran variable"
|
||||
(org-test-at-id "459384e8-1797-4f11-867e-dde0473ea7cc"
|
||||
(org-babel-next-src-block 2)
|
||||
(should (= 10 (org-babel-execute-src-block))))
|
||||
)
|
||||
|
||||
(ert-deftest ob-fortran/input-var ()
|
||||
"Test :var"
|
||||
(org-test-at-id "d8d1dfd3-5f0c-48fe-b55d-777997e02242"
|
||||
(org-babel-next-src-block)
|
||||
(should (= 15 (org-babel-execute-src-block)))))
|
||||
|
||||
(ert-deftest ob-fortran/preprosessor-var ()
|
||||
"Test preprocessed fortran"
|
||||
(org-test-at-id "d8d1dfd3-5f0c-48fe-b55d-777997e02242"
|
||||
(org-babel-next-src-block 2)
|
||||
(should (= 42 (org-babel-execute-src-block)))))
|
||||
|
||||
(ert-deftest ob-fortran/character-var ()
|
||||
"Test string input"
|
||||
(org-test-at-id "d8d1dfd3-5f0c-48fe-b55d-777997e02242"
|
||||
(org-babel-next-src-block 3)
|
||||
(should (equal "word" (org-babel-execute-src-block)))))
|
||||
|
||||
(ert-deftest ob-fortran/list-var ()
|
||||
"Test real array input"
|
||||
(org-test-at-id "c28569d9-04ce-4cad-ab81-1ea29f691465"
|
||||
(org-babel-next-src-block)
|
||||
(should (equal "1.00 2.00 3.00" (org-babel-execute-src-block)))))
|
||||
|
||||
(ert-deftest ob-fortran/list-var-from-table ()
|
||||
"Test real array from a table"
|
||||
(org-test-at-id "c28569d9-04ce-4cad-ab81-1ea29f691465"
|
||||
(org-babel-next-src-block 2)
|
||||
(should (equal "1.00 2.00" (org-babel-execute-src-block)))))
|
||||
|
||||
(ert-deftest ob-fortran/no-variables-with-main ()
|
||||
"Test :var with explicit 'program'"
|
||||
(org-test-at-id "891ead4a-f87a-473c-9ae0-1cf348bcd04f"
|
||||
(org-babel-next-src-block)
|
||||
(should-error (org-babel-execute-src-block))
|
||||
:type 'error))
|
||||
|
||||
;; (ert-deftest ob-fortran/wrong-list ()
|
||||
;; "Test wrong input list"
|
||||
;; (org-test-at-id "891ead4a-f87a-473c-9ae0-1cf348bcd04f"
|
||||
;; (org-babel-next-src-block 2)
|
||||
;; (should-error (org-babel-execute-src-block))
|
||||
;; :type 'error))
|
||||
|
||||
;; (ert-deftest ob-fortran/compiler-flags ()
|
||||
;; "Test compiler's flags"
|
||||
;; (org-test-at-id "891ead4a-f87a-473c-9ae0-1cf348bcd04f"
|
||||
;; (org-babel-next-src-block 3)
|
||||
;; (should-error (org-babel-execute-src-block))
|
||||
;; :type 'error))
|
||||
|
||||
(ert-deftest ob-fortran/command-arguments ()
|
||||
"Test real array from a table"
|
||||
(org-test-at-id "2d5330ea-9934-4737-9ed6-e1d3dae2dfa4"
|
||||
(org-babel-next-src-block)
|
||||
(should (= 23 (org-babel-execute-src-block)))))
|
||||
|
||||
(provide 'test-ob-fortran)
|
||||
|
||||
;;; test-ob-fortran.el ends here
|
||||
|
Loading…
Reference in New Issue