summaryrefslogtreecommitdiff
path: root/numpy/f2py/lib/test_parser.py
diff options
context:
space:
mode:
authorPearu Peterson <pearu.peterson@gmail.com>2006-07-02 17:19:26 +0000
committerPearu Peterson <pearu.peterson@gmail.com>2006-07-02 17:19:26 +0000
commit105354f5f3ff2ee7a7d6bcd8bd66b01889e44057 (patch)
tree75539378100d5613c4a258cc1a5744094b74984e /numpy/f2py/lib/test_parser.py
parent7221c116a95457b61364c82875e2a912250fee98 (diff)
downloadnumpy-105354f5f3ff2ee7a7d6bcd8bd66b01889e44057.tar.gz
Added more Fortran parser tests.
Diffstat (limited to 'numpy/f2py/lib/test_parser.py')
-rw-r--r--numpy/f2py/lib/test_parser.py57
1 files changed, 54 insertions, 3 deletions
diff --git a/numpy/f2py/lib/test_parser.py b/numpy/f2py/lib/test_parser.py
index 1bd8476e2..47b20b652 100644
--- a/numpy/f2py/lib/test_parser.py
+++ b/numpy/f2py/lib/test_parser.py
@@ -4,10 +4,11 @@ from block_statements import *
from readfortran import Line, FortranStringReader
-def parse(cls, line, label=''):
+def parse(cls, line, label='',
+ isfree=True, isstrict=False):
if label:
line = label + ' : ' + line
- reader = FortranStringReader(line, True, False)
+ reader = FortranStringReader(line, isfree, isstrict)
item = reader.next()
if not cls.match(item.get_line()):
raise ValueError, '%r does not match %s pattern' % (line, cls.__name__)
@@ -371,6 +372,56 @@ class test_Statements(NumpyTestCase):
assert_equal(parse(Case,'case default'),'CASE DEFAULT')
assert_equal(parse(Case,'case (1:2 ,3:4)'),'CASE ( 1 : 2, 3 : 4 )')
assert_equal(parse(Case,'case (a(1,:):)'),'CASE ( a(1,:) : )')
-
+ assert_equal(parse(Case,'case default'),'CASE DEFAULT')
+
+ def check_where(self):
+ assert_equal(parse(WhereStmt,'where (1) a=1'),'WHERE ( 1 ) a = 1')
+ assert_equal(parse(WhereStmt,'where (a(1,2)) a=1'),'WHERE ( a(1,2) ) a = 1')
+
+ def check_elsewhere(self):
+ assert_equal(parse(ElseWhere,'else where'),'ELSE WHERE')
+ assert_equal(parse(ElseWhere,'elsewhere (1)'),'ELSE WHERE ( 1 )')
+ assert_equal(parse(ElseWhere,'elsewhere(a(1,2))'),'ELSE WHERE ( a(1,2) )')
+
+ def check_enumerator(self):
+ assert_equal(parse(Enumerator,'enumerator a'), 'ENUMERATOR a')
+ assert_equal(parse(Enumerator,'enumerator:: a'), 'ENUMERATOR a')
+ assert_equal(parse(Enumerator,'enumerator a,b'), 'ENUMERATOR a, b')
+ assert_equal(parse(Enumerator,'enumerator a=1'), 'ENUMERATOR a=1')
+ assert_equal(parse(Enumerator,'enumerator a=1 , b=c(1,2)'), 'ENUMERATOR a=1, b=c(1,2)')
+
+ def check_fortranname(self):
+ assert_equal(parse(FortranName,'fortranname a'),'FORTRANNAME a')
+
+ def check_threadsafe(self):
+ assert_equal(parse(Threadsafe,'threadsafe'),'THREADSAFE')
+
+ def check_depend(self):
+ assert_equal(parse(Depend,'depend( a) b'), 'DEPEND ( a ) b')
+ assert_equal(parse(Depend,'depend( a) ::b'), 'DEPEND ( a ) b')
+ assert_equal(parse(Depend,'depend( a,c) b,e'), 'DEPEND ( a, c ) b, e')
+
+ def check_check(self):
+ assert_equal(parse(Check,'check(1) a'), 'CHECK ( 1 ) a')
+ assert_equal(parse(Check,'check(1) :: a'), 'CHECK ( 1 ) a')
+ assert_equal(parse(Check,'check(b(1,2)) a'), 'CHECK ( b(1,2) ) a')
+ assert_equal(parse(Check,'check(a>1) :: a'), 'CHECK ( a>1 ) a')
+
+ def check_callstatement(self):
+ assert_equal(parse(CallStatement,'callstatement (*func)()',isstrict=1),
+ 'CALLSTATEMENT (*func)()')
+ assert_equal(parse(CallStatement,'callstatement i=1;(*func)()',isstrict=1),
+ 'CALLSTATEMENT i=1;(*func)()')
+
+ def check_callprotoargument(self):
+ assert_equal(parse(CallProtoArgument,'callprotoargument int(*), double'),
+ 'CALLPROTOARGUMENT int(*), double')
+
+ def check_pause(self):
+ assert_equal(parse(Pause,'pause'),'PAUSE')
+ assert_equal(parse(Pause,'pause 1'),'PAUSE 1')
+ assert_equal(parse(Pause,'pause "hey"'),'PAUSE "hey"')
+ assert_equal(parse(Pause,'pause "hey pa"'),'PAUSE "hey pa"')
+
if __name__ == "__main__":
NumpyTest().run()