summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLitvinov Sergey <slitvinov@gmail.com>2013-06-01 19:20:06 +0200
committerEric Schulte <schulte.eric@gmail.com>2013-06-03 22:56:23 -0600
commitd7e884d86c8560477ca1e69fb8423db6770981ac (patch)
treeb55a971f548c3757aba6f73463888a760a30391b
parente3cc1ca792bdd4bf6345faf1c9da90182cf7c137 (diff)
downloadorg-mode-d7e884d86c8560477ca1e69fb8423db6770981ac.tar.gz
Add a matrix input to ob-fortran.el
* lisp/ob-fortran.el: add a branch which handles nested lists * testing/examples/ob-fortran-test.org: add a test for matrix input * testing/lisp/test-ob-fortran.el: add a test for matrix input
-rw-r--r--lisp/ob-fortran.el6
-rw-r--r--testing/examples/ob-fortran-test.org22
-rw-r--r--testing/lisp/test-ob-fortran.el12
3 files changed, 40 insertions, 0 deletions
diff --git a/lisp/ob-fortran.el b/lisp/ob-fortran.el
index 1eab03e..a379273 100644
--- a/lisp/ob-fortran.el
+++ b/lisp/ob-fortran.el
@@ -143,6 +143,12 @@ of the same value."
((stringp val)
(format "character(len=%d), parameter :: %S = '%s'\n"
(length val) var val))
+ ;; val is a matrix
+ ((and (listp val) (listp (car val)))
+ (format "real, parameter :: %S(%d,%d) = transpose( reshape( %s , (/ %d, %d /) ) )\n"
+ var (length val) (length (car val))
+ (org-babel-fortran-transform-list val)
+ (length (car val)) (length val)))
((listp val)
(format "real, parameter :: %S(%d) = %s\n"
var (length val) (org-babel-fortran-transform-list val)))
diff --git a/testing/examples/ob-fortran-test.org b/testing/examples/ob-fortran-test.org
index 47931bf..530d15e 100644
--- a/testing/examples/ob-fortran-test.org
+++ b/testing/examples/ob-fortran-test.org
@@ -50,6 +50,28 @@ write (*, '(3f5.2)'), s
write (*, '(2f5.2)'), s
#+end_src
+* matrix
+ :PROPERTIES:
+ :ID: 3f73ab19-d25a-428d-8c26-e8c6aa933976
+ :END:
+Real matrix as input
+#+name: fortran-input-matrix1
+| 0.0 | 42.0 |
+| 0.0 | 0.0 |
+| 0.0 | 0.0 |
+
+#+name: fortran-input-matrix2
+| 0.0 | 0.0 | 0.0 |
+| 0.0 | 0.0 | 42.0 |
+
+#+begin_src fortran :var s=fortran-input-matrix1 :results silent
+write (*, '(i2)'), nint(s(1,2))
+#+end_src
+
+#+begin_src fortran :var s=fortran-input-matrix2 :results silent
+write (*, '(i2)'), nint(s(2,3))
+#+end_src
+
* failing
:PROPERTIES:
:ID: 891ead4a-f87a-473c-9ae0-1cf348bcd04f
diff --git a/testing/lisp/test-ob-fortran.el b/testing/lisp/test-ob-fortran.el
index c355996..7754c64 100644
--- a/testing/lisp/test-ob-fortran.el
+++ b/testing/lisp/test-ob-fortran.el
@@ -68,6 +68,18 @@
(org-babel-next-src-block 2)
(should (equal "1.00 2.00" (org-babel-execute-src-block)))))
+(ert-deftest ob-fortran/list-matrix-from-table1 ()
+ "Test real matrix from a table"
+ (org-test-at-id "3f73ab19-d25a-428d-8c26-e8c6aa933976"
+ (org-babel-next-src-block 1)
+ (should (= 42 (org-babel-execute-src-block)))))
+
+(ert-deftest ob-fortran/list-matrix-from-table2 ()
+ "Test real matrix from a table"
+ (org-test-at-id "3f73ab19-d25a-428d-8c26-e8c6aa933976"
+ (org-babel-next-src-block 2)
+ (should (= 42 (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"