1#
2# @file    TestL3FormulaParserC.py
3# @brief   L3FormulaParser unit tests
4#
5# @author  Akiya Jouraku (Python conversion)
6# @author  Ben Bornstein
7
8#
9# ====== WARNING ===== WARNING ===== WARNING ===== WARNING ===== WARNING ======
10#
11# DO NOT EDIT THIS FILE.
12#
13# This file was generated automatically by converting the file located at
14# src/sbml/test/TestL3FormulaParserC.c
15# using the conversion program dev/utilities/translateTests/translateTests.pl.
16# Any changes made here will be lost the next time the file is regenerated.
17#
18# -----------------------------------------------------------------------------
19# This file is part of libSBML.  Please visit http://sbml.org for more
20# information about SBML, and the latest version of libSBML.
21#
22# Copyright 2005-2010 California Institute of Technology.
23# Copyright 2002-2005 California Institute of Technology and
24#                     Japan Science and Technology Corporation.
25#
26# This library is free software; you can redistribute it and/or modify it
27# under the terms of the GNU Lesser General Public License as published by
28# the Free Software Foundation.  A copy of the license agreement is provided
29# in the file named "LICENSE.txt" included with this software distribution
30# and also available online as http://sbml.org/software/libsbml/license.html
31# -----------------------------------------------------------------------------
32
33import sys
34import math
35import unittest
36import libsbml
37
38def isnan(x):
39  return (x != x)
40  pass
41
42def util_isInf(*x):
43  return ( (x[0] == util_PosInf()) or  (x[0] == util_NegInf()) )
44
45def util_NaN():
46  z = 1e300
47  z = z * z
48
49  return z - z
50
51def util_PosInf():
52  z = 1e300
53  z = z * z
54
55  return z
56
57def util_NegInf():
58  z = 1e300
59  z = z * z
60
61  return -z
62
63class TestL3FormulaParserC(unittest.TestCase):
64
65  def test_SBML_C_parseL3Formula_1(self):
66    r = libsbml.parseL3Formula("1")
67    self.assert_( r.getType() == libsbml.AST_INTEGER )
68    self.assert_( r.getInteger() == 1 )
69    self.assert_( r.getNumChildren() == 0 )
70    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
71    pass
72
73  def test_SBML_C_parseL3Formula_10(self):
74    r = libsbml.parseL3Formula("1 + -2e100 / 3")
75    self.assert_( r.getType() == libsbml.AST_PLUS )
76    self.assert_( r.getCharacter() == '+' )
77    self.assert_( r.getNumChildren() == 2 )
78    c = r.getLeftChild()
79    self.assert_( c.getType() == libsbml.AST_INTEGER )
80    self.assert_( c.getInteger() == 1 )
81    self.assert_( c.getNumChildren() == 0 )
82    c = r.getRightChild()
83    self.assert_( c.getType() == libsbml.AST_DIVIDE )
84    self.assert_( c.getCharacter() == '/' )
85    self.assert_( c.getNumChildren() == 2 )
86    c = c.getLeftChild()
87    self.assert_( c.getType() == libsbml.AST_MINUS )
88    self.assert_( c.getCharacter() == '-' )
89    self.assert_( c.getNumChildren() == 1 )
90    c = c.getLeftChild()
91    self.assert_( c.getType() == libsbml.AST_REAL_E )
92    self.assert_( c.getMantissa() == 2 )
93    self.assert_( c.getExponent() == 100 )
94    self.assert_( c.getNumChildren() == 0 )
95    c = r.getRightChild().getRightChild()
96    self.assert_( c.getType() == libsbml.AST_INTEGER )
97    self.assert_( c.getInteger() == 3 )
98    self.assert_( c.getNumChildren() == 0 )
99    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
100    pass
101
102  def test_SBML_C_parseL3Formula_11(self):
103    r = libsbml.parseL3Formula("1 - -foo / 3")
104    self.assert_( r.getType() == libsbml.AST_MINUS )
105    self.assert_( r.getCharacter() == '-' )
106    self.assert_( r.getNumChildren() == 2 )
107    c = r.getLeftChild()
108    self.assert_( c.getType() == libsbml.AST_INTEGER )
109    self.assert_( c.getInteger() == 1 )
110    self.assert_( c.getNumChildren() == 0 )
111    c = r.getRightChild()
112    self.assert_( c.getType() == libsbml.AST_DIVIDE )
113    self.assert_( c.getCharacter() == '/' )
114    self.assert_( c.getNumChildren() == 2 )
115    c = r.getRightChild().getLeftChild()
116    self.assert_( c.getType() == libsbml.AST_MINUS )
117    self.assert_( c.getCharacter() == '-' )
118    self.assert_( c.getNumChildren() == 1 )
119    c = r.getRightChild().getLeftChild().getLeftChild()
120    self.assert_( c.getType() == libsbml.AST_NAME )
121    self.assert_((  "foo" == c.getName() ))
122    self.assert_( c.getNumChildren() == 0 )
123    c = r.getRightChild().getRightChild()
124    self.assert_( c.getType() == libsbml.AST_INTEGER )
125    self.assert_( c.getInteger() == 3 )
126    self.assert_( c.getNumChildren() == 0 )
127    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
128    pass
129
130  def test_SBML_C_parseL3Formula_12(self):
131    r = libsbml.parseL3Formula("2 * foo^bar + 3.0")
132    self.assert_( r.getType() == libsbml.AST_PLUS )
133    self.assert_( r.getCharacter() == '+' )
134    self.assert_( r.getNumChildren() == 2 )
135    c = r.getLeftChild()
136    self.assert_( c.getType() == libsbml.AST_TIMES )
137    self.assert_( c.getCharacter() == '*' )
138    self.assert_( c.getNumChildren() == 2 )
139    c = r.getRightChild()
140    self.assert_( c.getType() == libsbml.AST_REAL )
141    self.assert_( c.getReal() == 3.0 )
142    self.assert_( c.getNumChildren() == 0 )
143    c = r.getLeftChild().getLeftChild()
144    self.assert_( c.getType() == libsbml.AST_INTEGER )
145    self.assert_( c.getInteger() == 2 )
146    self.assert_( c.getNumChildren() == 0 )
147    c = r.getLeftChild().getRightChild()
148    self.assert_( c.getType() == libsbml.AST_POWER )
149    self.assert_( c.getCharacter() == '^' )
150    self.assert_( c.getNumChildren() == 2 )
151    c = r.getLeftChild().getRightChild().getLeftChild()
152    self.assert_( c.getType() == libsbml.AST_NAME )
153    self.assert_((  "foo" == c.getName() ))
154    self.assert_( c.getNumChildren() == 0 )
155    c = r.getLeftChild().getRightChild().getRightChild()
156    self.assert_( c.getType() == libsbml.AST_NAME )
157    self.assert_((  "bar" == c.getName() ))
158    self.assert_( c.getNumChildren() == 0 )
159    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
160    pass
161
162  def test_SBML_C_parseL3Formula_13(self):
163    r = libsbml.parseL3Formula("foo()")
164    self.assert_( r.getType() == libsbml.AST_FUNCTION )
165    self.assert_((  "foo" == r.getName() ))
166    self.assert_( r.getNumChildren() == 0 )
167    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
168    pass
169
170  def test_SBML_C_parseL3Formula_14(self):
171    r = libsbml.parseL3Formula("foo(1)")
172    self.assert_( r.getType() == libsbml.AST_FUNCTION )
173    self.assert_((  "foo" == r.getName() ))
174    self.assert_( r.getNumChildren() == 1 )
175    c = r.getLeftChild()
176    self.assert_( c.getType() == libsbml.AST_INTEGER )
177    self.assert_( c.getInteger() == 1 )
178    self.assert_( c.getNumChildren() == 0 )
179    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
180    pass
181
182  def test_SBML_C_parseL3Formula_15(self):
183    r = libsbml.parseL3Formula("foo(1, bar)")
184    self.assert_( r.getType() == libsbml.AST_FUNCTION )
185    self.assert_((  "foo" == r.getName() ))
186    self.assert_( r.getNumChildren() == 2 )
187    c = r.getLeftChild()
188    self.assert_( c.getType() == libsbml.AST_INTEGER )
189    self.assert_( c.getInteger() == 1 )
190    self.assert_( c.getNumChildren() == 0 )
191    c = r.getRightChild()
192    self.assert_( c.getType() == libsbml.AST_NAME )
193    self.assert_((  "bar" == c.getName() ))
194    self.assert_( c.getNumChildren() == 0 )
195    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
196    pass
197
198  def test_SBML_C_parseL3Formula_16(self):
199    r = libsbml.parseL3Formula("foo(1, bar, 2^-3)")
200    self.assert_( r.getType() == libsbml.AST_FUNCTION )
201    self.assert_((  "foo" == r.getName() ))
202    self.assert_( r.getNumChildren() == 3 )
203    c = r.getChild(0)
204    self.assert_( c.getType() == libsbml.AST_INTEGER )
205    self.assert_( c.getInteger() == 1 )
206    self.assert_( c.getNumChildren() == 0 )
207    c = r.getChild(1)
208    self.assert_( c.getType() == libsbml.AST_NAME )
209    self.assert_((  "bar" == c.getName() ))
210    self.assert_( c.getNumChildren() == 0 )
211    c = r.getChild(2)
212    self.assert_( c.getType() == libsbml.AST_POWER )
213    self.assert_( c.getCharacter() == '^' )
214    self.assert_( c.getNumChildren() == 2 )
215    c = r.getChild(2).getLeftChild()
216    self.assert_( c.getType() == libsbml.AST_INTEGER )
217    self.assert_( c.getInteger() == 2 )
218    self.assert_( c.getNumChildren() == 0 )
219    c = r.getChild(2).getRightChild()
220    self.assert_( c.getType() == libsbml.AST_MINUS )
221    self.assert_( c.getCharacter() == '-' )
222    self.assert_( c.getNumChildren() == 1 )
223    c = c.getLeftChild()
224    self.assert_( c.getType() == libsbml.AST_INTEGER )
225    self.assert_( c.getInteger() == 3 )
226    self.assert_( c.getNumChildren() == 0 )
227    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
228    pass
229
230  def test_SBML_C_parseL3Formula_17(self):
231    r = libsbml.parseL3Formula("1//1")
232    self.assert_( r == None )
233    self.assert_((  "Error when parsing input '1//1' at position 3:  syntax error, unexpected '/'" == libsbml.getLastParseL3Error() ))
234    pass
235
236  def test_SBML_C_parseL3Formula_18(self):
237    r = libsbml.parseL3Formula("1+2*3 4")
238    self.assert_( r == None )
239    self.assert_((  "Error when parsing input '1+2*3 4' at position 7:  syntax error, unexpected integer" == libsbml.getLastParseL3Error() ))
240    pass
241
242  def test_SBML_C_parseL3Formula_2(self):
243    r = libsbml.parseL3Formula("2.1")
244    self.assert_( r.getType() == libsbml.AST_REAL )
245    self.assert_( r.getReal() == 2.1 )
246    self.assert_( r.getNumChildren() == 0 )
247    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
248    pass
249
250  def test_SBML_C_parseL3Formula_3(self):
251    r = libsbml.parseL3Formula("2.1e5")
252    self.assert_( r.getType() == libsbml.AST_REAL_E )
253    self.assert_( r.getMantissa() == 2.1 )
254    self.assert_( r.getExponent() == 5 )
255    self.assert_( r.getNumChildren() == 0 )
256    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
257    pass
258
259  def test_SBML_C_parseL3Formula_4(self):
260    r = libsbml.parseL3Formula("foo")
261    self.assert_( r.getType() == libsbml.AST_NAME )
262    self.assert_((  "foo" == r.getName() ))
263    self.assert_( r.getNumChildren() == 0 )
264    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
265    pass
266
267  def test_SBML_C_parseL3Formula_5(self):
268    r = libsbml.parseL3Formula("1 + foo")
269    self.assert_( r.getType() == libsbml.AST_PLUS )
270    self.assert_( r.getCharacter() == '+' )
271    self.assert_( r.getNumChildren() == 2 )
272    c = r.getLeftChild()
273    self.assert_( c.getType() == libsbml.AST_INTEGER )
274    self.assert_( c.getInteger() == 1 )
275    self.assert_( c.getNumChildren() == 0 )
276    c = r.getRightChild()
277    self.assert_( c.getType() == libsbml.AST_NAME )
278    self.assert_((  "foo" == c.getName() ))
279    self.assert_( c.getNumChildren() == 0 )
280    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
281    pass
282
283  def test_SBML_C_parseL3Formula_6(self):
284    r = libsbml.parseL3Formula("1 + 2")
285    self.assert_( r.getType() == libsbml.AST_PLUS )
286    self.assert_( r.getCharacter() == '+' )
287    self.assert_( r.getNumChildren() == 2 )
288    c = r.getLeftChild()
289    self.assert_( c.getType() == libsbml.AST_INTEGER )
290    self.assert_( c.getInteger() == 1 )
291    self.assert_( c.getNumChildren() == 0 )
292    c = r.getRightChild()
293    self.assert_( c.getType() == libsbml.AST_INTEGER )
294    self.assert_( c.getInteger() == 2 )
295    self.assert_( c.getNumChildren() == 0 )
296    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
297    pass
298
299  def test_SBML_C_parseL3Formula_7(self):
300    r = libsbml.parseL3Formula("1 + 2 * 3")
301    self.assert_( r.getType() == libsbml.AST_PLUS )
302    self.assert_( r.getCharacter() == '+' )
303    self.assert_( r.getNumChildren() == 2 )
304    c = r.getLeftChild()
305    self.assert_( c.getType() == libsbml.AST_INTEGER )
306    self.assert_( c.getInteger() == 1 )
307    self.assert_( c.getNumChildren() == 0 )
308    c = r.getRightChild()
309    self.assert_( c.getType() == libsbml.AST_TIMES )
310    self.assert_( c.getCharacter() == '*' )
311    self.assert_( c.getNumChildren() == 2 )
312    c = c.getLeftChild()
313    self.assert_( c.getType() == libsbml.AST_INTEGER )
314    self.assert_( c.getInteger() == 2 )
315    self.assert_( c.getNumChildren() == 0 )
316    c = r.getRightChild().getRightChild()
317    self.assert_( c.getType() == libsbml.AST_INTEGER )
318    self.assert_( c.getInteger() == 3 )
319    self.assert_( c.getNumChildren() == 0 )
320    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
321    pass
322
323  def test_SBML_C_parseL3Formula_8(self):
324    r = libsbml.parseL3Formula("(1 - 2) * 3")
325    self.assert_( r.getType() == libsbml.AST_TIMES )
326    self.assert_( r.getCharacter() == '*' )
327    self.assert_( r.getNumChildren() == 2 )
328    c = r.getLeftChild()
329    self.assert_( c.getType() == libsbml.AST_MINUS )
330    self.assert_( c.getCharacter() == '-' )
331    self.assert_( c.getNumChildren() == 2 )
332    c = r.getRightChild()
333    self.assert_( c.getType() == libsbml.AST_INTEGER )
334    self.assert_( c.getInteger() == 3 )
335    self.assert_( c.getNumChildren() == 0 )
336    c = r.getLeftChild().getLeftChild()
337    self.assert_( c.getType() == libsbml.AST_INTEGER )
338    self.assert_( c.getInteger() == 1 )
339    self.assert_( c.getNumChildren() == 0 )
340    c = r.getLeftChild().getRightChild()
341    self.assert_( c.getType() == libsbml.AST_INTEGER )
342    self.assert_( c.getInteger() == 2 )
343    self.assert_( c.getNumChildren() == 0 )
344    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
345    pass
346
347  def test_SBML_C_parseL3Formula_9(self):
348    r = libsbml.parseL3Formula("1 + -2 / 3")
349    self.assert_( r.getType() == libsbml.AST_PLUS )
350    self.assert_( r.getCharacter() == '+' )
351    self.assert_( r.getNumChildren() == 2 )
352    c = r.getLeftChild()
353    self.assert_( c.getType() == libsbml.AST_INTEGER )
354    self.assert_( c.getInteger() == 1 )
355    self.assert_( c.getNumChildren() == 0 )
356    c = r.getRightChild()
357    self.assert_( c.getType() == libsbml.AST_DIVIDE )
358    self.assert_( c.getCharacter() == '/' )
359    self.assert_( c.getNumChildren() == 2 )
360    c = c.getLeftChild()
361    self.assert_( c.getType() == libsbml.AST_MINUS )
362    self.assert_( c.getCharacter() == '-' )
363    self.assert_( c.getNumChildren() == 1 )
364    c = c.getLeftChild()
365    self.assert_( c.getType() == libsbml.AST_INTEGER )
366    self.assert_( c.getInteger() == 2 )
367    self.assert_( c.getNumChildren() == 0 )
368    c = r.getRightChild().getRightChild()
369    self.assert_( c.getType() == libsbml.AST_INTEGER )
370    self.assert_( c.getInteger() == 3 )
371    self.assert_( c.getNumChildren() == 0 )
372    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
373    pass
374
375  def test_SBML_C_parseL3Formula_arguments(self):
376    r = libsbml.parseL3Formula("sin(x,y)")
377    self.assert_( r == None )
378    self.assert_((  "Error when parsing input 'sin(x,y)' at position 8:  The function 'sin' takes exactly one argument, but 2 were found." == libsbml.getLastParseL3Error() ))
379    r = libsbml.parseL3Formula("delay(x)")
380    self.assert_( r == None )
381    self.assert_((  "Error when parsing input 'delay(x)' at position 8:  The function 'delay' takes exactly two arguments, but 1 were found." == libsbml.getLastParseL3Error() ))
382    r = libsbml.parseL3Formula("piecewise()")
383    self.assert_( r == None )
384    self.assert_((  "Error when parsing input 'piecewise()' at position 11:  The function 'piecewise' takes at least one argument, but none were found." == libsbml.getLastParseL3Error() ))
385    r = libsbml.parseL3Formula("gt(x)")
386    self.assert_( r == None )
387    self.assert_((  "Error when parsing input 'gt(x)' at position 5:  The function 'gt' takes at least two arguments, but 1 were found." == libsbml.getLastParseL3Error() ))
388    r = libsbml.parseL3Formula("minus()")
389    self.assert_( r == None )
390    self.assert_((  "Error when parsing input 'minus()' at position 7:  The function 'minus' takes exactly one or two arguments, but 0 were found." == libsbml.getLastParseL3Error() ))
391    r = libsbml.parseL3Formula("root(x, y, z)")
392    self.assert_( r == None )
393    self.assert_((  "Error when parsing input 'root(x, y, z)' at position 13:  The function 'root' takes exactly one or two arguments, but 3 were found." == libsbml.getLastParseL3Error() ))
394    r = libsbml.parseL3Formula("power()")
395    self.assert_( r == None )
396    self.assert_((  "Error when parsing input 'power()' at position 7:  The function 'power' takes exactly two arguments, but 0 were found." == libsbml.getLastParseL3Error() ))
397    pass
398
399  def test_SBML_C_parseL3Formula_avogadrosettings(self):
400    r = libsbml.parseL3Formula("avogadro")
401    self.assert_( r.getType() == libsbml.AST_NAME_AVOGADRO )
402    self.assert_( r.getNumChildren() == 0 )
403    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
404    settings = libsbml.getDefaultL3ParserSettings()
405    settings.setParseAvogadroCsymbol(False)
406    self.assert_( settings.getParseAvogadroCsymbol() == False )
407    r = libsbml.parseL3FormulaWithSettings("avogadro", settings)
408    self.assert_( r.getType() == libsbml.AST_NAME )
409    self.assert_((  "avogadro" == r.getName() ))
410    self.assert_( r.getNumChildren() == 0 )
411    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
412    settings.setParseAvogadroCsymbol(True)
413    self.assert_( settings.getParseAvogadroCsymbol() == True )
414    r = libsbml.parseL3FormulaWithSettings("avogadro", settings)
415    self.assert_( r.getType() == libsbml.AST_NAME_AVOGADRO )
416    self.assert_( r.getNumChildren() == 0 )
417    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
418    _dummyList = [ settings ]; _dummyList[:] = []; del _dummyList
419    pass
420
421  def test_SBML_C_parseL3Formula_collapseminussettings1(self):
422    r = libsbml.parseL3Formula("--4.4")
423    self.assert_( r.getType() == libsbml.AST_MINUS )
424    self.assert_( r.getNumChildren() == 1 )
425    c = r.getLeftChild()
426    self.assert_( c.getType() == libsbml.AST_MINUS )
427    self.assert_( c.getNumChildren() == 1 )
428    c = c.getLeftChild()
429    self.assert_( c.getType() == libsbml.AST_REAL )
430    self.assert_( c.getReal() == 4.4 )
431    self.assert_( c.getNumChildren() == 0 )
432    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
433    settings = libsbml.getDefaultL3ParserSettings()
434    settings.setParseCollapseMinus(True)
435    self.assert_( settings.getParseCollapseMinus() == True )
436    r = libsbml.parseL3FormulaWithSettings("--4.4", settings)
437    self.assert_( r.getType() == libsbml.AST_REAL )
438    self.assert_( r.getReal() == 4.4 )
439    self.assert_( r.getNumChildren() == 0 )
440    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
441    settings.setParseCollapseMinus(False)
442    self.assert_( settings.getParseCollapseMinus() == False )
443    r = libsbml.parseL3FormulaWithSettings("--4.4", settings)
444    self.assert_( r.getType() == libsbml.AST_MINUS )
445    self.assert_( r.getNumChildren() == 1 )
446    c = r.getLeftChild()
447    self.assert_( c.getType() == libsbml.AST_MINUS )
448    self.assert_( c.getNumChildren() == 1 )
449    c = c.getLeftChild()
450    self.assert_( c.getType() == libsbml.AST_REAL )
451    self.assert_( c.getReal() == 4.4 )
452    self.assert_( c.getNumChildren() == 0 )
453    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
454    _dummyList = [ settings ]; _dummyList[:] = []; del _dummyList
455    pass
456
457  def test_SBML_C_parseL3Formula_collapseminussettings2(self):
458    r = libsbml.parseL3Formula("--x")
459    self.assert_( r.getType() == libsbml.AST_MINUS )
460    self.assert_( r.getNumChildren() == 1 )
461    c = r.getLeftChild()
462    self.assert_( c.getType() == libsbml.AST_MINUS )
463    self.assert_( c.getNumChildren() == 1 )
464    c = c.getLeftChild()
465    self.assert_( c.getType() == libsbml.AST_NAME )
466    self.assert_((  "x" == c.getName() ))
467    self.assert_( c.getNumChildren() == 0 )
468    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
469    settings = libsbml.getDefaultL3ParserSettings()
470    settings.setParseCollapseMinus(True)
471    self.assert_( settings.getParseCollapseMinus() == True )
472    r = libsbml.parseL3FormulaWithSettings("--x", settings)
473    self.assert_( r.getType() == libsbml.AST_NAME )
474    self.assert_((  "x" == r.getName() ))
475    self.assert_( r.getNumChildren() == 0 )
476    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
477    settings.setParseCollapseMinus(False)
478    self.assert_( settings.getParseCollapseMinus() == False )
479    r = libsbml.parseL3FormulaWithSettings("--x", settings)
480    self.assert_( r.getType() == libsbml.AST_MINUS )
481    self.assert_( r.getNumChildren() == 1 )
482    c = r.getLeftChild()
483    self.assert_( c.getType() == libsbml.AST_MINUS )
484    self.assert_( c.getNumChildren() == 1 )
485    c = c.getLeftChild()
486    self.assert_( c.getType() == libsbml.AST_NAME )
487    self.assert_((  "x" == c.getName() ))
488    self.assert_( c.getNumChildren() == 0 )
489    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
490    _dummyList = [ settings ]; _dummyList[:] = []; del _dummyList
491    pass
492
493  def test_SBML_C_parseL3Formula_collapseminussettings3(self):
494    r = libsbml.parseL3Formula("x---4.4")
495    self.assert_( r.getType() == libsbml.AST_MINUS )
496    self.assert_( r.getNumChildren() == 2 )
497    c = r.getLeftChild()
498    self.assert_( c.getType() == libsbml.AST_NAME )
499    self.assert_((  "x" == c.getName() ))
500    self.assert_( c.getNumChildren() == 0 )
501    c = r.getRightChild()
502    self.assert_( c.getType() == libsbml.AST_MINUS )
503    self.assert_( c.getNumChildren() == 1 )
504    c = c.getLeftChild()
505    self.assert_( c.getType() == libsbml.AST_MINUS )
506    self.assert_( c.getNumChildren() == 1 )
507    c = c.getLeftChild()
508    self.assert_( c.getType() == libsbml.AST_REAL )
509    self.assert_( c.getReal() == 4.4 )
510    self.assert_( c.getNumChildren() == 0 )
511    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
512    settings = libsbml.getDefaultL3ParserSettings()
513    settings.setParseCollapseMinus(True)
514    self.assert_( settings.getParseCollapseMinus() == True )
515    r = libsbml.parseL3FormulaWithSettings("x---4.4", settings)
516    self.assert_( r.getType() == libsbml.AST_MINUS )
517    self.assert_( r.getNumChildren() == 2 )
518    c = r.getLeftChild()
519    self.assert_( c.getType() == libsbml.AST_NAME )
520    self.assert_((  "x" == c.getName() ))
521    self.assert_( c.getNumChildren() == 0 )
522    c = r.getRightChild()
523    self.assert_( c.getType() == libsbml.AST_REAL )
524    self.assert_( c.getReal() == 4.4 )
525    self.assert_( c.getNumChildren() == 0 )
526    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
527    settings.setParseCollapseMinus(False)
528    self.assert_( settings.getParseCollapseMinus() == False )
529    r = libsbml.parseL3FormulaWithSettings("x---4.4", settings)
530    self.assert_( r.getType() == libsbml.AST_MINUS )
531    self.assert_( r.getNumChildren() == 2 )
532    c = r.getLeftChild()
533    self.assert_( c.getType() == libsbml.AST_NAME )
534    self.assert_((  "x" == c.getName() ))
535    self.assert_( c.getNumChildren() == 0 )
536    c = r.getRightChild()
537    self.assert_( c.getType() == libsbml.AST_MINUS )
538    self.assert_( c.getNumChildren() == 1 )
539    c = c.getLeftChild()
540    self.assert_( c.getType() == libsbml.AST_MINUS )
541    self.assert_( c.getNumChildren() == 1 )
542    c = c.getLeftChild()
543    self.assert_( c.getType() == libsbml.AST_REAL )
544    self.assert_( c.getReal() == 4.4 )
545    self.assert_( c.getNumChildren() == 0 )
546    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
547    _dummyList = [ settings ]; _dummyList[:] = []; del _dummyList
548    pass
549
550  def test_SBML_C_parseL3Formula_collapseminussettings4(self):
551    r = libsbml.parseL3Formula("x---y")
552    self.assert_( r.getType() == libsbml.AST_MINUS )
553    self.assert_( r.getNumChildren() == 2 )
554    c = r.getLeftChild()
555    self.assert_( c.getType() == libsbml.AST_NAME )
556    self.assert_((  "x" == c.getName() ))
557    self.assert_( c.getNumChildren() == 0 )
558    c = r.getRightChild()
559    self.assert_( c.getType() == libsbml.AST_MINUS )
560    self.assert_( c.getNumChildren() == 1 )
561    c = c.getLeftChild()
562    self.assert_( c.getType() == libsbml.AST_MINUS )
563    self.assert_( c.getNumChildren() == 1 )
564    c = c.getLeftChild()
565    self.assert_( c.getType() == libsbml.AST_NAME )
566    self.assert_((  "y" == c.getName() ))
567    self.assert_( c.getNumChildren() == 0 )
568    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
569    settings = libsbml.getDefaultL3ParserSettings()
570    settings.setParseCollapseMinus(True)
571    self.assert_( settings.getParseCollapseMinus() == True )
572    r = libsbml.parseL3FormulaWithSettings("x---y", settings)
573    self.assert_( r.getType() == libsbml.AST_MINUS )
574    self.assert_( r.getNumChildren() == 2 )
575    c = r.getLeftChild()
576    self.assert_( c.getType() == libsbml.AST_NAME )
577    self.assert_((  "x" == c.getName() ))
578    self.assert_( c.getNumChildren() == 0 )
579    c = r.getRightChild()
580    self.assert_( c.getType() == libsbml.AST_NAME )
581    self.assert_((  "y" == c.getName() ))
582    self.assert_( c.getNumChildren() == 0 )
583    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
584    settings.setParseCollapseMinus(False)
585    self.assert_( settings.getParseCollapseMinus() == False )
586    r = libsbml.parseL3FormulaWithSettings("x---y", settings)
587    self.assert_( r.getType() == libsbml.AST_MINUS )
588    self.assert_( r.getNumChildren() == 2 )
589    c = r.getLeftChild()
590    self.assert_( c.getType() == libsbml.AST_NAME )
591    self.assert_((  "x" == c.getName() ))
592    self.assert_( c.getNumChildren() == 0 )
593    c = r.getRightChild()
594    self.assert_( c.getType() == libsbml.AST_MINUS )
595    self.assert_( c.getNumChildren() == 1 )
596    c = c.getLeftChild()
597    self.assert_( c.getType() == libsbml.AST_MINUS )
598    self.assert_( c.getNumChildren() == 1 )
599    c = c.getLeftChild()
600    self.assert_( c.getType() == libsbml.AST_NAME )
601    self.assert_((  "y" == c.getName() ))
602    self.assert_( c.getNumChildren() == 0 )
603    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
604    _dummyList = [ settings ]; _dummyList[:] = []; del _dummyList
605    pass
606
607  def test_SBML_C_parseL3Formula_collapseminussettings5(self):
608    settings = libsbml.getDefaultL3ParserSettings()
609    settings.setParseCollapseMinus(True)
610    self.assert_( settings.getParseCollapseMinus() == True )
611    r = libsbml.parseL3FormulaWithSettings("---4", settings)
612    self.assert_( r.getType() == libsbml.AST_INTEGER )
613    self.assert_( r.getInteger() == -4 )
614    self.assert_( r.getNumChildren() == 0 )
615    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
616    r = libsbml.parseL3FormulaWithSettings("---(3/8)", settings)
617    self.assert_( r.getType() == libsbml.AST_RATIONAL )
618    self.assert_( r.getNumerator() == -3 )
619    self.assert_( r.getDenominator() == 8 )
620    self.assert_( r.getNumChildren() == 0 )
621    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
622    r = libsbml.parseL3FormulaWithSettings("---(-3/8)", settings)
623    self.assert_( r.getType() == libsbml.AST_RATIONAL )
624    self.assert_( r.getNumerator() == 3 )
625    self.assert_( r.getDenominator() == 8 )
626    self.assert_( r.getNumChildren() == 0 )
627    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
628    r = libsbml.parseL3FormulaWithSettings("---4.4", settings)
629    self.assert_( r.getType() == libsbml.AST_REAL )
630    self.assert_( r.getReal() == -4.4 )
631    self.assert_( r.getNumChildren() == 0 )
632    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
633    r = libsbml.parseL3FormulaWithSettings("---4e-3", settings)
634    self.assert_( r.getType() == libsbml.AST_REAL_E )
635    self.assert_( r.getMantissa() == -4 )
636    self.assert_( r.getExponent() == -3 )
637    self.assert_( r.getNumChildren() == 0 )
638    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
639    r = libsbml.parseL3FormulaWithSettings("---.4", settings)
640    self.assert_( r.getType() == libsbml.AST_REAL )
641    self.assert_( r.getReal() == -.4 )
642    self.assert_( r.getNumChildren() == 0 )
643    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
644    _dummyList = [ settings ]; _dummyList[:] = []; del _dummyList
645    pass
646
647  def test_SBML_C_parseL3Formula_constants1(self):
648    r = libsbml.parseL3Formula("true")
649    self.assert_( r.getType() == libsbml.AST_CONSTANT_TRUE )
650    self.assert_( r.getNumChildren() == 0 )
651    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
652    pass
653
654  def test_SBML_C_parseL3Formula_constants10(self):
655    r = libsbml.parseL3Formula("notanumber")
656    self.assert_( r.getType() == libsbml.AST_REAL )
657    self.assert_( isnan(r.getReal()) == 1 )
658    self.assert_( r.getNumChildren() == 0 )
659    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
660    pass
661
662  def test_SBML_C_parseL3Formula_constants11(self):
663    r = libsbml.parseL3Formula("nan")
664    self.assert_( r.getType() == libsbml.AST_REAL )
665    self.assert_( isnan(r.getReal()) == 1 )
666    self.assert_( r.getNumChildren() == 0 )
667    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
668    pass
669
670  def test_SBML_C_parseL3Formula_constants12(self):
671    r = libsbml.parseL3Formula("NaN")
672    self.assert_( r.getType() == libsbml.AST_REAL )
673    self.assert_( isnan(r.getReal()) == 1 )
674    self.assert_( r.getNumChildren() == 0 )
675    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
676    pass
677
678  def test_SBML_C_parseL3Formula_constants2(self):
679    r = libsbml.parseL3Formula("false")
680    self.assert_( r.getType() == libsbml.AST_CONSTANT_FALSE )
681    self.assert_( r.getNumChildren() == 0 )
682    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
683    pass
684
685  def test_SBML_C_parseL3Formula_constants3(self):
686    r = libsbml.parseL3Formula("pi")
687    self.assert_( r.getType() == libsbml.AST_CONSTANT_PI )
688    self.assert_( r.getNumChildren() == 0 )
689    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
690    pass
691
692  def test_SBML_C_parseL3Formula_constants4(self):
693    r = libsbml.parseL3Formula("exponentiale")
694    self.assert_( r.getType() == libsbml.AST_CONSTANT_E )
695    self.assert_( r.getNumChildren() == 0 )
696    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
697    pass
698
699  def test_SBML_C_parseL3Formula_constants5(self):
700    r = libsbml.parseL3Formula("avogadro")
701    self.assert_( r.getType() == libsbml.AST_NAME_AVOGADRO )
702    self.assert_( r.getNumChildren() == 0 )
703    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
704    pass
705
706  def test_SBML_C_parseL3Formula_constants6(self):
707    r = libsbml.parseL3Formula("time")
708    self.assert_( r.getType() == libsbml.AST_NAME_TIME )
709    self.assert_( r.getNumChildren() == 0 )
710    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
711    pass
712
713  def test_SBML_C_parseL3Formula_constants7(self):
714    r = libsbml.parseL3Formula("inf")
715    self.assert_( r.getType() == libsbml.AST_REAL )
716    self.assert_( util_isInf(r.getReal()) == True )
717    self.assert_( r.getNumChildren() == 0 )
718    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
719    pass
720
721  def test_SBML_C_parseL3Formula_constants8(self):
722    r = libsbml.parseL3Formula("infinity")
723    self.assert_( r.getType() == libsbml.AST_REAL )
724    self.assert_( util_isInf(r.getReal()) == True )
725    self.assert_( r.getNumChildren() == 0 )
726    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
727    pass
728
729  def test_SBML_C_parseL3Formula_constants9(self):
730    r = libsbml.parseL3Formula("INF")
731    self.assert_( r.getType() == libsbml.AST_REAL )
732    self.assert_( util_isInf(r.getReal()) == True )
733    self.assert_( r.getNumChildren() == 0 )
734    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
735    pass
736
737  def test_SBML_C_parseL3Formula_e1(self):
738    r = libsbml.parseL3Formula("2.001e+5")
739    self.assert_( r.getType() == libsbml.AST_REAL_E )
740    self.assert_( r.getMantissa() == 2.001 )
741    self.assert_( r.getExponent() == 5 )
742    self.assert_( r.getNumChildren() == 0 )
743    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
744    pass
745
746  def test_SBML_C_parseL3Formula_e2(self):
747    r = libsbml.parseL3Formula(".001e+5")
748    self.assert_( r.getType() == libsbml.AST_REAL_E )
749    self.assert_( r.getMantissa() == .001 )
750    self.assert_( r.getExponent() == 5 )
751    self.assert_( r.getNumChildren() == 0 )
752    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
753    pass
754
755  def test_SBML_C_parseL3Formula_e3(self):
756    r = libsbml.parseL3Formula(".001e-5")
757    self.assert_( r.getType() == libsbml.AST_REAL_E )
758    self.assert_( r.getMantissa() == .001 )
759    self.assert_( r.getExponent() == -5 )
760    self.assert_( r.getNumChildren() == 0 )
761    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
762    pass
763
764  def test_SBML_C_parseL3Formula_e4(self):
765    r = libsbml.parseL3Formula("2.e-005")
766    self.assert_( r.getType() == libsbml.AST_REAL_E )
767    self.assert_( r.getMantissa() == 2 )
768    self.assert_( r.getExponent() == -5 )
769    self.assert_( r.getNumChildren() == 0 )
770    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
771    pass
772
773  def test_SBML_C_parseL3Formula_e5(self):
774    r = libsbml.parseL3Formula(".e+5")
775    self.assert_( r == None )
776    self.assert_((  "Error when parsing input '.e+5' at position 1:  syntax error, unexpected $undefined" == libsbml.getLastParseL3Error() ))
777    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
778    pass
779
780  def test_SBML_C_parseL3Formula_logic1(self):
781    r = libsbml.parseL3Formula("1 && 2 == 3")
782    self.assert_( r.getType() == libsbml.AST_LOGICAL_AND )
783    self.assert_((  "and" == r.getName() ))
784    self.assert_( r.getNumChildren() == 2 )
785    c = r.getLeftChild()
786    self.assert_( c.getType() == libsbml.AST_INTEGER )
787    self.assert_( c.getInteger() == 1 )
788    self.assert_( c.getNumChildren() == 0 )
789    c = r.getRightChild()
790    self.assert_( c.getType() == libsbml.AST_RELATIONAL_EQ )
791    self.assert_((  "eq" == c.getName() ))
792    self.assert_( c.getNumChildren() == 2 )
793    c = c.getLeftChild()
794    self.assert_( c.getType() == libsbml.AST_INTEGER )
795    self.assert_( c.getInteger() == 2 )
796    self.assert_( c.getNumChildren() == 0 )
797    c = r.getRightChild().getRightChild()
798    self.assert_( c.getType() == libsbml.AST_INTEGER )
799    self.assert_( c.getInteger() == 3 )
800    self.assert_( c.getNumChildren() == 0 )
801    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
802    pass
803
804  def test_SBML_C_parseL3Formula_logic2(self):
805    r = libsbml.parseL3Formula("(1 && 2) == 3")
806    self.assert_( r.getType() == libsbml.AST_RELATIONAL_EQ )
807    self.assert_((  "eq" == r.getName() ))
808    self.assert_( r.getNumChildren() == 2 )
809    c = r.getLeftChild()
810    self.assert_( c.getType() == libsbml.AST_LOGICAL_AND )
811    self.assert_((  "and" == c.getName() ))
812    self.assert_( c.getNumChildren() == 2 )
813    c = r.getRightChild()
814    self.assert_( c.getType() == libsbml.AST_INTEGER )
815    self.assert_( c.getInteger() == 3 )
816    self.assert_( c.getNumChildren() == 0 )
817    c = r.getLeftChild().getLeftChild()
818    self.assert_( c.getType() == libsbml.AST_INTEGER )
819    self.assert_( c.getInteger() == 1 )
820    self.assert_( c.getNumChildren() == 0 )
821    c = r.getLeftChild().getRightChild()
822    self.assert_( c.getType() == libsbml.AST_INTEGER )
823    self.assert_( c.getInteger() == 2 )
824    self.assert_( c.getNumChildren() == 0 )
825    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
826    pass
827
828  def test_SBML_C_parseL3Formula_modelPresent1(self):
829    model = libsbml.Model(3,1)
830    p = model.createParameter()
831    p.setId( "infinity")
832    r = libsbml.parseL3FormulaWithModel("infinity", model)
833    self.assert_( r.getType() == libsbml.AST_NAME )
834    self.assert_((  "infinity" == r.getName() ))
835    self.assert_( r.getNumChildren() == 0 )
836    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
837    pass
838
839  def test_SBML_C_parseL3Formula_modelPresent2(self):
840    model = libsbml.Model(3,1)
841    p = model.createSpecies()
842    p.setId( "true")
843    r = libsbml.parseL3FormulaWithModel("true", model)
844    self.assert_( r.getType() == libsbml.AST_NAME )
845    self.assert_((  "true" == r.getName() ))
846    self.assert_( r.getNumChildren() == 0 )
847    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
848    pass
849
850  def test_SBML_C_parseL3Formula_modelPresent3(self):
851    model = libsbml.Model(3,1)
852    p = model.createCompartment()
853    p.setId( "NaN")
854    r = libsbml.parseL3FormulaWithModel("NaN", model)
855    self.assert_( r.getType() == libsbml.AST_NAME )
856    self.assert_((  "NaN" == r.getName() ))
857    self.assert_( r.getNumChildren() == 0 )
858    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
859    pass
860
861  def test_SBML_C_parseL3Formula_modelPresent4(self):
862    model = libsbml.Model(3,1)
863    p = model.createReaction()
864    p.setId( "pi")
865    r = libsbml.parseL3FormulaWithModel("pi", model)
866    self.assert_( r.getType() == libsbml.AST_NAME )
867    self.assert_((  "pi" == r.getName() ))
868    self.assert_( r.getNumChildren() == 0 )
869    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
870    pass
871
872  def test_SBML_C_parseL3Formula_modelPresent5(self):
873    model = libsbml.Model(3,1)
874    p = model.createReaction()
875    sr = p.createProduct()
876    sr.setId( "avogadro")
877    r = libsbml.parseL3FormulaWithModel("avogadro", model)
878    self.assert_( r.getType() == libsbml.AST_NAME )
879    self.assert_((  "avogadro" == r.getName() ))
880    self.assert_( r.getNumChildren() == 0 )
881    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
882    pass
883
884  def test_SBML_C_parseL3Formula_modelPresent6(self):
885    model = libsbml.Model(3,1)
886    p = model.createReaction()
887    sr = p.createProduct()
888    sr.setId( "AVOGADRO")
889    r = libsbml.parseL3FormulaWithModel("avogadro", model)
890    self.assert_( r.getType() == libsbml.AST_NAME_AVOGADRO )
891    self.assert_((  "avogadro" == r.getName() ))
892    self.assert_( r.getNumChildren() == 0 )
893    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
894    pass
895
896  def test_SBML_C_parseL3Formula_modelPresent7(self):
897    model = libsbml.Model(3,1)
898    p = model.createFunctionDefinition()
899    p.setId( "sin")
900    r = libsbml.parseL3FormulaWithModel("sin(x, y)", model)
901    self.assert_( r.getType() == libsbml.AST_FUNCTION )
902    self.assert_((  "sin" == r.getName() ))
903    self.assert_( r.getNumChildren() == 2 )
904    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
905    pass
906
907  def test_SBML_C_parseL3Formula_modulo(self):
908    r = libsbml.parseL3Formula("x % y")
909    self.assert_((  "piecewise(x - y * ceil(x / y), xor(lt(x, 0), lt(y, 0)), x - y * floor(x / y))" == libsbml.formulaToString(r) ))
910    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
911    pass
912
913  def test_SBML_C_parseL3Formula_negInf(self):
914    r = libsbml.parseL3Formula("-inf")
915    self.assert_( r.getType() == libsbml.AST_MINUS )
916    self.assert_( r.getCharacter() == '-' )
917    self.assert_( r.getNumChildren() == 1 )
918    c = r.getLeftChild()
919    self.assert_( c.getType() == libsbml.AST_REAL )
920    self.assert_( util_isInf(c.getReal()) == True )
921    self.assert_( c.getNumChildren() == 0 )
922    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
923    pass
924
925  def test_SBML_C_parseL3Formula_negZero(self):
926    r = libsbml.parseL3Formula("-0.0")
927    self.assert_( r.getType() == libsbml.AST_MINUS )
928    self.assert_( r.getCharacter() == '-' )
929    self.assert_( r.getNumChildren() == 1 )
930    c = r.getLeftChild()
931    self.assert_( c.getType() == libsbml.AST_REAL )
932    self.assert_( c.getReal() == 0 )
933    self.assert_( c.getNumChildren() == 0 )
934    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
935    pass
936
937  def test_SBML_C_parseL3Formula_oddMathML1(self):
938    r = libsbml.parseL3Formula("sqrt(3)")
939    self.assert_( r.getType() == libsbml.AST_FUNCTION_ROOT )
940    self.assert_( r.getNumChildren() == 2 )
941    c = r.getLeftChild()
942    self.assert_( c.getType() == libsbml.AST_INTEGER )
943    self.assert_( c.getInteger() == 2 )
944    self.assert_( c.getNumChildren() == 0 )
945    c = r.getRightChild()
946    self.assert_( c.getType() == libsbml.AST_INTEGER )
947    self.assert_( c.getInteger() == 3 )
948    self.assert_( c.getNumChildren() == 0 )
949    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
950    pass
951
952  def test_SBML_C_parseL3Formula_oddMathML2(self):
953    r = libsbml.parseL3Formula("sqr(3)")
954    self.assert_( r.getType() == libsbml.AST_FUNCTION_POWER )
955    self.assert_( r.getNumChildren() == 2 )
956    c = r.getLeftChild()
957    self.assert_( c.getType() == libsbml.AST_INTEGER )
958    self.assert_( c.getInteger() == 3 )
959    self.assert_( c.getNumChildren() == 0 )
960    c = r.getRightChild()
961    self.assert_( c.getType() == libsbml.AST_INTEGER )
962    self.assert_( c.getInteger() == 2 )
963    self.assert_( c.getNumChildren() == 0 )
964    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
965    pass
966
967  def test_SBML_C_parseL3Formula_oddMathML3(self):
968    r = libsbml.parseL3Formula("log10(3)")
969    self.assert_( r.getType() == libsbml.AST_FUNCTION_LOG )
970    self.assert_( r.getNumChildren() == 2 )
971    c = r.getLeftChild()
972    self.assert_( c.getType() == libsbml.AST_INTEGER )
973    self.assert_( c.getInteger() == 10 )
974    self.assert_( c.getNumChildren() == 0 )
975    c = r.getRightChild()
976    self.assert_( c.getType() == libsbml.AST_INTEGER )
977    self.assert_( c.getInteger() == 3 )
978    self.assert_( c.getNumChildren() == 0 )
979    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
980    pass
981
982  def test_SBML_C_parseL3Formula_oddMathML4(self):
983    r = libsbml.parseL3Formula("log(4.4, 3)")
984    self.assert_( r.getType() == libsbml.AST_FUNCTION_LOG )
985    self.assert_( r.getNumChildren() == 2 )
986    c = r.getLeftChild()
987    self.assert_( c.getType() == libsbml.AST_REAL )
988    self.assert_( c.getReal() == 4.4 )
989    self.assert_( c.getNumChildren() == 0 )
990    c = r.getRightChild()
991    self.assert_( c.getType() == libsbml.AST_INTEGER )
992    self.assert_( c.getInteger() == 3 )
993    self.assert_( c.getNumChildren() == 0 )
994    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
995    pass
996
997  def test_SBML_C_parseL3Formula_oddMathML5(self):
998    r = libsbml.parseL3Formula("root(1.1, 3)")
999    self.assert_( r.getType() == libsbml.AST_FUNCTION_ROOT )
1000    self.assert_( r.getNumChildren() == 2 )
1001    c = r.getLeftChild()
1002    self.assert_( c.getType() == libsbml.AST_REAL )
1003    self.assert_( c.getReal() == 1.1 )
1004    self.assert_( c.getNumChildren() == 0 )
1005    c = r.getRightChild()
1006    self.assert_( c.getType() == libsbml.AST_INTEGER )
1007    self.assert_( c.getInteger() == 3 )
1008    self.assert_( c.getNumChildren() == 0 )
1009    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
1010    pass
1011
1012  def test_SBML_C_parseL3Formula_parselogsettings(self):
1013    r = libsbml.parseL3Formula("log(4.4)")
1014    self.assert_( r.getType() == libsbml.AST_FUNCTION_LOG )
1015    self.assert_( r.getNumChildren() == 2 )
1016    c = r.getLeftChild()
1017    self.assert_( c.getType() == libsbml.AST_INTEGER )
1018    self.assert_( c.getInteger() == 10 )
1019    self.assert_( c.getNumChildren() == 0 )
1020    c = r.getRightChild()
1021    self.assert_( c.getType() == libsbml.AST_REAL )
1022    self.assert_( c.getReal() == 4.4 )
1023    self.assert_( c.getNumChildren() == 0 )
1024    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
1025    settings = libsbml.L3ParserSettings()
1026    settings.setParseLog(libsbml.L3P_PARSE_LOG_AS_LN)
1027    self.assert_( settings.getParseLog() == libsbml.L3P_PARSE_LOG_AS_LN )
1028    r = libsbml.parseL3FormulaWithSettings("log(4.4)", settings)
1029    self.assert_( r.getType() == libsbml.AST_FUNCTION_LN )
1030    self.assert_( r.getNumChildren() == 1 )
1031    c = r.getLeftChild()
1032    self.assert_( c.getType() == libsbml.AST_REAL )
1033    self.assert_( c.getReal() == 4.4 )
1034    self.assert_( c.getNumChildren() == 0 )
1035    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
1036    settings.setParseLog(libsbml.L3P_PARSE_LOG_AS_LOG10)
1037    self.assert_( settings.getParseLog() == libsbml.L3P_PARSE_LOG_AS_LOG10 )
1038    r = libsbml.parseL3FormulaWithSettings("log(4.4)", settings)
1039    self.assert_( r.getType() == libsbml.AST_FUNCTION_LOG )
1040    self.assert_( r.getNumChildren() == 2 )
1041    c = r.getLeftChild()
1042    self.assert_( c.getType() == libsbml.AST_INTEGER )
1043    self.assert_( c.getInteger() == 10 )
1044    self.assert_( c.getNumChildren() == 0 )
1045    c = r.getRightChild()
1046    self.assert_( c.getType() == libsbml.AST_REAL )
1047    self.assert_( c.getReal() == 4.4 )
1048    self.assert_( c.getNumChildren() == 0 )
1049    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
1050    settings.setParseLog(libsbml.L3P_PARSE_LOG_AS_ERROR)
1051    self.assert_( settings.getParseLog() == libsbml.L3P_PARSE_LOG_AS_ERROR )
1052    r = libsbml.parseL3FormulaWithSettings("log(4.4)", settings)
1053    self.assert_( r == None )
1054    self.assert_((  "Error when parsing input 'log(4.4)' at position 8:  Writing a function as 'log(x)' was legal in the L1 parser, but translated as the natural log, not the base-10 log.  This construct is disallowed entirely as being ambiguous, and you are encouraged instead to use 'ln(x)', 'log10(x)', or 'log(base, x)'." == libsbml.getLastParseL3Error() ))
1055    _dummyList = [ settings ]; _dummyList[:] = []; del _dummyList
1056    pass
1057
1058  def test_SBML_C_parseL3Formula_precedence(self):
1059    root = libsbml.parseL3Formula("a && b == !(c - d * e^-f) ")
1060    self.assert_( root.getType() == libsbml.AST_LOGICAL_AND )
1061    self.assert_((  "and" == root.getName() ))
1062    self.assert_( root.getNumChildren() == 2 )
1063    left = root.getLeftChild()
1064    self.assert_( left.getType() == libsbml.AST_NAME )
1065    self.assert_((  "a" == left.getName() ))
1066    self.assert_( left.getNumChildren() == 0 )
1067    right = root.getRightChild()
1068    self.assert_( right.getType() == libsbml.AST_RELATIONAL_EQ )
1069    self.assert_((  "eq" == right.getName() ))
1070    self.assert_( right.getNumChildren() == 2 )
1071    left = right.getLeftChild()
1072    self.assert_( left.getType() == libsbml.AST_NAME )
1073    self.assert_((  "b" == left.getName() ))
1074    self.assert_( left.getNumChildren() == 0 )
1075    right = right.getRightChild()
1076    self.assert_( right.getType() == libsbml.AST_LOGICAL_NOT )
1077    self.assert_((  "not" == right.getName() ))
1078    self.assert_( right.getNumChildren() == 1 )
1079    right = right.getLeftChild()
1080    self.assert_( right.getType() == libsbml.AST_MINUS )
1081    self.assert_( right.getCharacter() == '-' )
1082    self.assert_( right.getNumChildren() == 2 )
1083    left = right.getLeftChild()
1084    self.assert_( left.getType() == libsbml.AST_NAME )
1085    self.assert_((  "c" == left.getName() ))
1086    self.assert_( left.getNumChildren() == 0 )
1087    right = right.getRightChild()
1088    self.assert_( right.getType() == libsbml.AST_TIMES )
1089    self.assert_( right.getCharacter() == '*' )
1090    self.assert_( right.getNumChildren() == 2 )
1091    left = right.getLeftChild()
1092    self.assert_( left.getType() == libsbml.AST_NAME )
1093    self.assert_((  "d" == left.getName() ))
1094    self.assert_( left.getNumChildren() == 0 )
1095    right = right.getRightChild()
1096    self.assert_( right.getType() == libsbml.AST_POWER )
1097    self.assert_( right.getCharacter() == '^' )
1098    self.assert_( right.getNumChildren() == 2 )
1099    left = right.getLeftChild()
1100    self.assert_( left.getType() == libsbml.AST_NAME )
1101    self.assert_((  "e" == left.getName() ))
1102    self.assert_( left.getNumChildren() == 0 )
1103    right = right.getRightChild()
1104    self.assert_( right.getType() == libsbml.AST_MINUS )
1105    self.assert_( right.getCharacter() == '-' )
1106    self.assert_( right.getNumChildren() == 1 )
1107    left = right.getLeftChild()
1108    self.assert_( left.getType() == libsbml.AST_NAME )
1109    self.assert_((  "f" == left.getName() ))
1110    self.assert_( left.getNumChildren() == 0 )
1111    _dummyList = [ root ]; _dummyList[:] = []; del _dummyList
1112    pass
1113
1114  def test_SBML_C_parseL3Formula_rational1(self):
1115    r = libsbml.parseL3Formula("(3/4)")
1116    self.assert_( r.getType() == libsbml.AST_RATIONAL )
1117    self.assert_( r.getNumerator() == 3 )
1118    self.assert_( r.getDenominator() == 4 )
1119    self.assert_( r.getNumChildren() == 0 )
1120    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
1121    pass
1122
1123  def test_SBML_C_parseL3Formula_rational2(self):
1124    r = libsbml.parseL3Formula("(3/4) mL")
1125    self.assert_( r.getType() == libsbml.AST_RATIONAL )
1126    self.assert_( r.getNumerator() == 3 )
1127    self.assert_( r.getDenominator() == 4 )
1128    self.assert_((  "mL" == r.getUnits() ))
1129    self.assert_( r.getNumChildren() == 0 )
1130    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
1131    pass
1132
1133  def test_SBML_C_parseL3Formula_rational3(self):
1134    r = libsbml.parseL3Formula("3/4")
1135    self.assert_( r.getType() == libsbml.AST_DIVIDE )
1136    self.assert_( r.getCharacter() == '/' )
1137    self.assert_( r.getNumChildren() == 2 )
1138    c = r.getLeftChild()
1139    self.assert_( c.getType() == libsbml.AST_INTEGER )
1140    self.assert_( c.getInteger() == 3 )
1141    self.assert_( c.getNumChildren() == 0 )
1142    c = r.getRightChild()
1143    self.assert_( c.getType() == libsbml.AST_INTEGER )
1144    self.assert_( c.getInteger() == 4 )
1145    self.assert_( c.getNumChildren() == 0 )
1146    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
1147    pass
1148
1149  def test_SBML_C_parseL3Formula_rational4(self):
1150    r = libsbml.parseL3Formula("(3/x)")
1151    self.assert_( r.getType() == libsbml.AST_DIVIDE )
1152    self.assert_( r.getCharacter() == '/' )
1153    self.assert_( r.getNumChildren() == 2 )
1154    c = r.getLeftChild()
1155    self.assert_( c.getType() == libsbml.AST_INTEGER )
1156    self.assert_( c.getInteger() == 3 )
1157    self.assert_( c.getNumChildren() == 0 )
1158    c = r.getRightChild()
1159    self.assert_( c.getType() == libsbml.AST_NAME )
1160    self.assert_((  "x" == c.getName() ))
1161    self.assert_( c.getNumChildren() == 0 )
1162    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
1163    pass
1164
1165  def test_SBML_C_parseL3Formula_rational5(self):
1166    r = libsbml.parseL3Formula("(3/4.4)")
1167    self.assert_( r.getType() == libsbml.AST_DIVIDE )
1168    self.assert_( r.getCharacter() == '/' )
1169    self.assert_( r.getNumChildren() == 2 )
1170    c = r.getLeftChild()
1171    self.assert_( c.getType() == libsbml.AST_INTEGER )
1172    self.assert_( c.getInteger() == 3 )
1173    self.assert_( c.getNumChildren() == 0 )
1174    c = r.getRightChild()
1175    self.assert_( c.getType() == libsbml.AST_REAL )
1176    self.assert_( c.getReal() == 4.4 )
1177    self.assert_( c.getNumChildren() == 0 )
1178    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
1179    pass
1180
1181  def test_SBML_C_parseL3Formula_rational6(self):
1182    r = libsbml.parseL3Formula("3/4 ml")
1183    self.assert_( r.getType() == libsbml.AST_DIVIDE )
1184    self.assert_( r.getCharacter() == '/' )
1185    self.assert_( r.getNumChildren() == 2 )
1186    c = r.getLeftChild()
1187    self.assert_( c.getType() == libsbml.AST_INTEGER )
1188    self.assert_( c.getInteger() == 3 )
1189    self.assert_( c.getNumChildren() == 0 )
1190    c = r.getRightChild()
1191    self.assert_( c.getType() == libsbml.AST_INTEGER )
1192    self.assert_( c.getInteger() == 4 )
1193    self.assert_((  "ml" == c.getUnits() ))
1194    self.assert_( c.getNumChildren() == 0 )
1195    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
1196    pass
1197
1198  def test_SBML_C_parseL3Formula_rational7(self):
1199    r = libsbml.parseL3Formula("(3/4.4) ml")
1200    self.assert_( r == None )
1201    self.assert_((  "Error when parsing input '(3/4.4) ml' at position 10:  syntax error, unexpected element name" == libsbml.getLastParseL3Error() ))
1202    pass
1203
1204  def test_SBML_C_parseL3Formula_targetl2settings(self):
1205    r = libsbml.parseL3Formula("4 mL")
1206    self.assert_( r.getType() == libsbml.AST_INTEGER )
1207    self.assert_( r.getInteger() == 4 )
1208    self.assert_((  "mL" == r.getUnits() ))
1209    self.assert_( r.getNumChildren() == 0 )
1210    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
1211    r = libsbml.parseL3Formula("avogadro")
1212    self.assert_( r.getType() == libsbml.AST_NAME_AVOGADRO )
1213    self.assert_( r.getNumChildren() == 0 )
1214    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
1215    settings = libsbml.getDefaultL3ParserSettings()
1216    settings.setParseUnits(False)
1217    settings.setParseAvogadroCsymbol(False)
1218    self.assert_( settings.getParseUnits() == False )
1219    self.assert_( settings.getParseAvogadroCsymbol() == False )
1220    r = libsbml.parseL3FormulaWithSettings("4 mL", settings)
1221    self.assert_( r == None )
1222    self.assert_((  "Error when parsing input '4 mL' at position 4:  The ability to associate units with numbers has been disabled." == libsbml.getLastParseL3Error() ))
1223    r = libsbml.parseL3FormulaWithSettings("avogadro", settings)
1224    self.assert_( r.getType() == libsbml.AST_NAME )
1225    self.assert_((  "avogadro" == r.getName() ))
1226    self.assert_( r.getNumChildren() == 0 )
1227    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
1228    settings.setParseUnits(True)
1229    settings.setParseAvogadroCsymbol(True)
1230    self.assert_( settings.getParseUnits() == True )
1231    self.assert_( settings.getParseAvogadroCsymbol() == True )
1232    r = libsbml.parseL3FormulaWithSettings("4 mL", settings)
1233    self.assert_( r.getType() == libsbml.AST_INTEGER )
1234    self.assert_( r.getInteger() == 4 )
1235    self.assert_((  "mL" == r.getUnits() ))
1236    self.assert_( r.getNumChildren() == 0 )
1237    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
1238    r = libsbml.parseL3FormulaWithSettings("avogadro", settings)
1239    self.assert_( r.getType() == libsbml.AST_NAME_AVOGADRO )
1240    self.assert_( r.getNumChildren() == 0 )
1241    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
1242    _dummyList = [ settings ]; _dummyList[:] = []; del _dummyList
1243    pass
1244
1245  def test_SBML_C_parseL3Formula_unitssettings(self):
1246    r = libsbml.parseL3Formula("4 mL")
1247    self.assert_( r.getType() == libsbml.AST_INTEGER )
1248    self.assert_( r.getInteger() == 4 )
1249    self.assert_((  "mL" == r.getUnits() ))
1250    self.assert_( r.getNumChildren() == 0 )
1251    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
1252    settings = libsbml.getDefaultL3ParserSettings()
1253    settings.setParseUnits(False)
1254    self.assert_( settings.getParseUnits() == False )
1255    r = libsbml.parseL3FormulaWithSettings("4 mL", settings)
1256    self.assert_( r == None )
1257    self.assert_((  "Error when parsing input '4 mL' at position 4:  The ability to associate units with numbers has been disabled." == libsbml.getLastParseL3Error() ))
1258    settings.setParseUnits(True)
1259    self.assert_( settings.getParseUnits() == True )
1260    r = libsbml.parseL3FormulaWithSettings("4 mL", settings)
1261    self.assert_( r.getType() == libsbml.AST_INTEGER )
1262    self.assert_( r.getInteger() == 4 )
1263    self.assert_((  "mL" == r.getUnits() ))
1264    self.assert_( r.getNumChildren() == 0 )
1265    _dummyList = [ r ]; _dummyList[:] = []; del _dummyList
1266    _dummyList = [ settings ]; _dummyList[:] = []; del _dummyList
1267    pass
1268
1269def suite():
1270  suite = unittest.TestSuite()
1271  suite.addTest(unittest.makeSuite(TestL3FormulaParserC))
1272
1273  return suite
1274
1275if __name__ == "__main__":
1276  if unittest.TextTestRunner(verbosity=1).run(suite()).wasSuccessful() :
1277    sys.exit(0)
1278  else:
1279    sys.exit(1)
1280