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