summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLitvinov Sergey <slitvinov@gmail.com>2011-07-21 00:44:50 +0200
committerBastien Guerry <bzg@altern.org>2011-07-21 11:21:33 +0200
commitc65df4aa015f7df35263509021c54cccc40548f0 (patch)
tree8a0f0b31b1e6b076ee6ae448e89c108e09dbb699
parent054ab6ceee7da8c8c852380804c30fd3c52f0582 (diff)
downloadorg-mode-c65df4aa015f7df35263509021c54cccc40548f0.tar.gz
ob-fortran.el: fix bug with string input, add ob-fortran tests with ert
-rw-r--r--contrib/babel/langs/ob-fortran.el4
-rw-r--r--testing/README.org1
-rw-r--r--testing/examples/ob-fortran-test.org86
-rw-r--r--testing/lisp/test-ob-fortran.el80
4 files changed, 131 insertions, 40 deletions
diff --git a/contrib/babel/langs/ob-fortran.el b/contrib/babel/langs/ob-fortran.el
index f2f5cb2..6b0b144 100644
--- a/contrib/babel/langs/ob-fortran.el
+++ b/contrib/babel/langs/ob-fortran.el
@@ -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)))
diff --git a/testing/README.org b/testing/README.org
index 648a30d..3cc0487 100644
--- a/testing/README.org
+++ b/testing/README.org
@@ -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")))
diff --git a/testing/examples/ob-fortran-test.org b/testing/examples/ob-fortran-test.org
index ade9f43..d48ae4e 100644
--- a/testing/examples/ob-fortran-test.org
+++ b/testing/examples/ob-fortran-test.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)
+* arrays
+ :PROPERTIES:
+ :ID: c28569d9-04ce-4cad-ab81-1ea29f691465
+ :END:
+Real array as input
+#+begin_src fortran :var s='(1.0 2.0 3.0) :results silent
+write (*, '(3f5.2)'), s
#+end_src
-#+begin_src fortran
-program ex
-print *, "output of ex program"
-end program ex
+#+tblname: test_tbl
+| 1.0 |
+| 2.0 |
+
+#+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"
+#+begin_src fortran :var s="word" :results silent
program ex
print *, "output of ex program"
end program ex
#+end_src
-Real array as input
-#+begin_src fortran :var s='(1.0 2.0 3.0)
-print *, s
-#+end_src
-
-#+tblname: test_tbl
-| 1.0 |
-| 2.0 |
-
-Real array as input
-#+begin_src fortran :var s=test_tbl
-print *, s
-#+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
diff --git a/testing/lisp/test-ob-fortran.el b/testing/lisp/test-ob-fortran.el
new file mode 100644
index 0000000..b9ffbfd
--- /dev/null
+++ b/testing/lisp/test-ob-fortran.el
@@ -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
+