1# @file    TestASTNode.rb
2# @brief   ASTNode 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/math/test/TestASTNode.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 TestASTNode < Test::Unit::TestCase
35
36  @@DBL_EPSILON =  2.2204460492503131e-16
37  def test_ASTNode_addChild1
38    node = LibSBML::ASTNode.new()
39    c1 = LibSBML::ASTNode.new()
40    c2 = LibSBML::ASTNode.new()
41    c1_1 = LibSBML::ASTNode.new()
42    i = 0
43    node.setType(LibSBML::AST_LOGICAL_AND)
44    c1.setName( "a")
45    c2.setName( "b")
46    node.addChild(c1)
47    node.addChild(c2)
48    assert( node.getNumChildren() == 2 )
49    assert ((  "and(a, b)" == LibSBML::formulaToString(node) ))
50    c1_1.setName( "d")
51    i = node.addChild(c1_1)
52    assert( i == LibSBML::LIBSBML_OPERATION_SUCCESS )
53    assert( node.getNumChildren() == 3 )
54    assert ((  "and(a, b, d)" == LibSBML::formulaToString(node) ))
55    assert ((  "a" == node.getChild(0).getName() ))
56    assert ((  "b" == node.getChild(1).getName() ))
57    assert ((  "d" == node.getChild(2).getName() ))
58    node = nil
59  end
60
61  def test_ASTNode_addSemanticsAnnotation
62    ann = LibSBML::XMLNode.new()
63    node = LibSBML::ASTNode.new()
64    i = 0
65    i = node.addSemanticsAnnotation(ann)
66    assert( i == LibSBML::LIBSBML_OPERATION_SUCCESS )
67    assert( node.getNumSemanticsAnnotations() == 1 )
68    i = node.addSemanticsAnnotation(nil)
69    assert( i == LibSBML::LIBSBML_OPERATION_FAILED )
70    assert( node.getNumSemanticsAnnotations() == 1 )
71    node = nil
72  end
73
74  def test_ASTNode_avogadro
75    n = LibSBML::ASTNode.new()
76    n.setType(LibSBML::AST_NAME_AVOGADRO)
77    n.setName( "NA")
78    assert ((  "NA" == n.getName() ))
79    val = n.getReal()
80    assert( val == 6.02214179e23 )
81    assert( true == n.isConstant() )
82    n = nil
83  end
84
85  def test_ASTNode_avogadro_bug
86    n = LibSBML::ASTNode.new()
87    n.setName( "NA")
88    n.setType(LibSBML::AST_NAME_AVOGADRO)
89    assert ((  "NA" == n.getName() ))
90    val = n.getReal()
91    assert( val == 6.02214179e23 )
92    assert( true == n.isConstant() )
93    n = nil
94  end
95
96  def test_ASTNode_canonicalizeConstants
97    n = LibSBML::ASTNode.new()
98    n.setName( "ExponentialE")
99    assert_equal true, n.isName()
100    n.canonicalize()
101    assert( n.getType() == LibSBML::AST_CONSTANT_E )
102    n.setType(LibSBML::AST_NAME)
103    n.setName( "False")
104    assert_equal true, n.isName()
105    n.canonicalize()
106    assert( n.getType() == LibSBML::AST_CONSTANT_FALSE )
107    n.setType(LibSBML::AST_NAME)
108    n.setName( "Pi")
109    assert_equal true, n.isName()
110    n.canonicalize()
111    assert( n.getType() == LibSBML::AST_CONSTANT_PI )
112    n.setType(LibSBML::AST_NAME)
113    n.setName( "True")
114    assert_equal true, n.isName()
115    n.canonicalize()
116    assert( n.getType() == LibSBML::AST_CONSTANT_TRUE )
117    n.setType(LibSBML::AST_NAME)
118    n.setName( "Foo")
119    assert_equal true, n.isName()
120    n.canonicalize()
121    assert_equal true, n.isName()
122    n = nil
123  end
124
125  def test_ASTNode_canonicalizeFunctions
126    n = LibSBML::ASTNode.new(LibSBML::AST_FUNCTION)
127    n.setName( "abs")
128    assert( n.getType() == LibSBML::AST_FUNCTION )
129    n.canonicalize()
130    assert( n.getType() == LibSBML::AST_FUNCTION_ABS )
131    n.setType(LibSBML::AST_FUNCTION)
132    n.setName( "arccos")
133    assert( n.getType() == LibSBML::AST_FUNCTION )
134    n.canonicalize()
135    assert( n.getType() == LibSBML::AST_FUNCTION_ARCCOS )
136    n.setType(LibSBML::AST_FUNCTION)
137    n.setName( "arccosh")
138    assert( n.getType() == LibSBML::AST_FUNCTION )
139    n.canonicalize()
140    assert( n.getType() == LibSBML::AST_FUNCTION_ARCCOSH )
141    n.setType(LibSBML::AST_FUNCTION)
142    n.setName( "arccot")
143    assert( n.getType() == LibSBML::AST_FUNCTION )
144    n.canonicalize()
145    assert( n.getType() == LibSBML::AST_FUNCTION_ARCCOT )
146    n.setType(LibSBML::AST_FUNCTION)
147    n.setName( "arccoth")
148    assert( n.getType() == LibSBML::AST_FUNCTION )
149    n.canonicalize()
150    assert( n.getType() == LibSBML::AST_FUNCTION_ARCCOTH )
151    n.setType(LibSBML::AST_FUNCTION)
152    n.setName( "arccsc")
153    assert( n.getType() == LibSBML::AST_FUNCTION )
154    n.canonicalize()
155    assert( n.getType() == LibSBML::AST_FUNCTION_ARCCSC )
156    n.setType(LibSBML::AST_FUNCTION)
157    n.setName( "arccsch")
158    assert( n.getType() == LibSBML::AST_FUNCTION )
159    n.canonicalize()
160    assert( n.getType() == LibSBML::AST_FUNCTION_ARCCSCH )
161    n.setType(LibSBML::AST_FUNCTION)
162    n.setName( "arcsec")
163    assert( n.getType() == LibSBML::AST_FUNCTION )
164    n.canonicalize()
165    assert( n.getType() == LibSBML::AST_FUNCTION_ARCSEC )
166    n.setType(LibSBML::AST_FUNCTION)
167    n.setName( "arcsech")
168    assert( n.getType() == LibSBML::AST_FUNCTION )
169    n.canonicalize()
170    assert( n.getType() == LibSBML::AST_FUNCTION_ARCSECH )
171    n.setType(LibSBML::AST_FUNCTION)
172    n.setName( "arcsin")
173    assert( n.getType() == LibSBML::AST_FUNCTION )
174    n.canonicalize()
175    assert( n.getType() == LibSBML::AST_FUNCTION_ARCSIN )
176    n.setType(LibSBML::AST_FUNCTION)
177    n.setName( "arcsinh")
178    assert( n.getType() == LibSBML::AST_FUNCTION )
179    n.canonicalize()
180    assert( n.getType() == LibSBML::AST_FUNCTION_ARCSINH )
181    n.setType(LibSBML::AST_FUNCTION)
182    n.setName( "arctan")
183    assert( n.getType() == LibSBML::AST_FUNCTION )
184    n.canonicalize()
185    assert( n.getType() == LibSBML::AST_FUNCTION_ARCTAN )
186    n.setType(LibSBML::AST_FUNCTION)
187    n.setName( "arctanh")
188    assert( n.getType() == LibSBML::AST_FUNCTION )
189    n.canonicalize()
190    assert( n.getType() == LibSBML::AST_FUNCTION_ARCTANH )
191    n.setType(LibSBML::AST_FUNCTION)
192    n.setName( "ceiling")
193    assert( n.getType() == LibSBML::AST_FUNCTION )
194    n.canonicalize()
195    assert( n.getType() == LibSBML::AST_FUNCTION_CEILING )
196    n.setType(LibSBML::AST_FUNCTION)
197    n.setName( "cos")
198    assert( n.getType() == LibSBML::AST_FUNCTION )
199    n.canonicalize()
200    assert( n.getType() == LibSBML::AST_FUNCTION_COS )
201    n.setType(LibSBML::AST_FUNCTION)
202    n.setName( "cosh")
203    assert( n.getType() == LibSBML::AST_FUNCTION )
204    n.canonicalize()
205    assert( n.getType() == LibSBML::AST_FUNCTION_COSH )
206    n.setType(LibSBML::AST_FUNCTION)
207    n.setName( "cot")
208    assert( n.getType() == LibSBML::AST_FUNCTION )
209    n.canonicalize()
210    assert( n.getType() == LibSBML::AST_FUNCTION_COT )
211    n.setType(LibSBML::AST_FUNCTION)
212    n.setName( "coth")
213    assert( n.getType() == LibSBML::AST_FUNCTION )
214    n.canonicalize()
215    assert( n.getType() == LibSBML::AST_FUNCTION_COTH )
216    n.setType(LibSBML::AST_FUNCTION)
217    n.setName( "csc")
218    assert( n.getType() == LibSBML::AST_FUNCTION )
219    n.canonicalize()
220    assert( n.getType() == LibSBML::AST_FUNCTION_CSC )
221    n.setType(LibSBML::AST_FUNCTION)
222    n.setName( "csch")
223    assert( n.getType() == LibSBML::AST_FUNCTION )
224    n.canonicalize()
225    assert( n.getType() == LibSBML::AST_FUNCTION_CSCH )
226    n.setType(LibSBML::AST_FUNCTION)
227    n.setName( "exp")
228    assert( n.getType() == LibSBML::AST_FUNCTION )
229    n.canonicalize()
230    assert( n.getType() == LibSBML::AST_FUNCTION_EXP )
231    n.setType(LibSBML::AST_FUNCTION)
232    n.setName( "factorial")
233    assert( n.getType() == LibSBML::AST_FUNCTION )
234    n.canonicalize()
235    assert( n.getType() == LibSBML::AST_FUNCTION_FACTORIAL )
236    n.setType(LibSBML::AST_FUNCTION)
237    n.setName( "floor")
238    assert( n.getType() == LibSBML::AST_FUNCTION )
239    n.canonicalize()
240    assert( n.getType() == LibSBML::AST_FUNCTION_FLOOR )
241    n.setType(LibSBML::AST_FUNCTION)
242    n.setName( "lambda")
243    assert( n.getType() == LibSBML::AST_FUNCTION )
244    n.canonicalize()
245    assert( n.getType() == LibSBML::AST_LAMBDA )
246    n.setType(LibSBML::AST_FUNCTION)
247    n.setName( "ln")
248    assert( n.getType() == LibSBML::AST_FUNCTION )
249    n.canonicalize()
250    assert( n.getType() == LibSBML::AST_FUNCTION_LN )
251    n.setType(LibSBML::AST_FUNCTION)
252    n.setName( "log")
253    assert( n.getType() == LibSBML::AST_FUNCTION )
254    n.canonicalize()
255    assert( n.getType() == LibSBML::AST_FUNCTION_LOG )
256    n.setType(LibSBML::AST_FUNCTION)
257    n.setName( "piecewise")
258    assert( n.getType() == LibSBML::AST_FUNCTION )
259    n.canonicalize()
260    assert( n.getType() == LibSBML::AST_FUNCTION_PIECEWISE )
261    n.setType(LibSBML::AST_FUNCTION)
262    n.setName( "power")
263    assert( n.getType() == LibSBML::AST_FUNCTION )
264    n.canonicalize()
265    assert( n.getType() == LibSBML::AST_FUNCTION_POWER )
266    n.setType(LibSBML::AST_FUNCTION)
267    n.setName( "root")
268    assert( n.getType() == LibSBML::AST_FUNCTION )
269    n.canonicalize()
270    assert( n.getType() == LibSBML::AST_FUNCTION_ROOT )
271    n.setType(LibSBML::AST_FUNCTION)
272    n.setName( "sec")
273    assert( n.getType() == LibSBML::AST_FUNCTION )
274    n.canonicalize()
275    assert( n.getType() == LibSBML::AST_FUNCTION_SEC )
276    n.setType(LibSBML::AST_FUNCTION)
277    n.setName( "sech")
278    assert( n.getType() == LibSBML::AST_FUNCTION )
279    n.canonicalize()
280    assert( n.getType() == LibSBML::AST_FUNCTION_SECH )
281    n.setType(LibSBML::AST_FUNCTION)
282    n.setName( "sin")
283    assert( n.getType() == LibSBML::AST_FUNCTION )
284    n.canonicalize()
285    assert( n.getType() == LibSBML::AST_FUNCTION_SIN )
286    n.setType(LibSBML::AST_FUNCTION)
287    n.setName( "sinh")
288    assert( n.getType() == LibSBML::AST_FUNCTION )
289    n.canonicalize()
290    assert( n.getType() == LibSBML::AST_FUNCTION_SINH )
291    n.setType(LibSBML::AST_FUNCTION)
292    n.setName( "tan")
293    assert( n.getType() == LibSBML::AST_FUNCTION )
294    n.canonicalize()
295    assert( n.getType() == LibSBML::AST_FUNCTION_TAN )
296    n.setType(LibSBML::AST_FUNCTION)
297    n.setName( "tanh")
298    assert( n.getType() == LibSBML::AST_FUNCTION )
299    n.canonicalize()
300    assert( n.getType() == LibSBML::AST_FUNCTION_TANH )
301    n.setType(LibSBML::AST_FUNCTION)
302    n.setName( "Foo")
303    assert( n.getType() == LibSBML::AST_FUNCTION )
304    n.canonicalize()
305    assert( n.getType() == LibSBML::AST_FUNCTION )
306    n = nil
307  end
308
309  def test_ASTNode_canonicalizeFunctionsL1
310    n = LibSBML::ASTNode.new(LibSBML::AST_FUNCTION)
311    n.setName( "acos")
312    assert( n.getType() == LibSBML::AST_FUNCTION )
313    n.canonicalize()
314    assert( n.getType() == LibSBML::AST_FUNCTION_ARCCOS )
315    n.setType(LibSBML::AST_FUNCTION)
316    n.setName( "asin")
317    assert( n.getType() == LibSBML::AST_FUNCTION )
318    n.canonicalize()
319    assert( n.getType() == LibSBML::AST_FUNCTION_ARCSIN )
320    n.setType(LibSBML::AST_FUNCTION)
321    n.setName( "atan")
322    assert( n.getType() == LibSBML::AST_FUNCTION )
323    n.canonicalize()
324    assert( n.getType() == LibSBML::AST_FUNCTION_ARCTAN )
325    n.setType(LibSBML::AST_FUNCTION)
326    n.setName( "ceil")
327    assert( n.getType() == LibSBML::AST_FUNCTION )
328    n.canonicalize()
329    assert( n.getType() == LibSBML::AST_FUNCTION_CEILING )
330    n.setType(LibSBML::AST_FUNCTION)
331    n.setName( "pow")
332    assert( n.getType() == LibSBML::AST_FUNCTION )
333    n.canonicalize()
334    assert( n.getType() == LibSBML::AST_FUNCTION_POWER )
335    n = nil
336    n = LibSBML::ASTNode.new(LibSBML::AST_FUNCTION)
337    n.setName( "log")
338    c = LibSBML::ASTNode.new()
339    c.setName( "x")
340    n.addChild(c)
341    assert( n.getType() == LibSBML::AST_FUNCTION )
342    assert( n.getNumChildren() == 1 )
343    n.canonicalize()
344    assert( n.getType() == LibSBML::AST_FUNCTION_LN )
345    assert( n.getNumChildren() == 1 )
346    n.setType(LibSBML::AST_FUNCTION)
347    c = LibSBML::ASTNode.new()
348    c.setName( "y")
349    n.addChild(c)
350    assert( n.getType() == LibSBML::AST_FUNCTION )
351    assert( n.getNumChildren() == 2 )
352    n.canonicalize()
353    assert( n.getType() == LibSBML::AST_FUNCTION_LOG )
354    n = nil
355    n = LibSBML::ASTNode.new(LibSBML::AST_FUNCTION)
356    n.setName( "log10")
357    c = LibSBML::ASTNode.new()
358    c.setName( "x")
359    n.addChild(c)
360    assert( n.getType() == LibSBML::AST_FUNCTION )
361    assert( n.getNumChildren() == 1 )
362    n.canonicalize()
363    assert( n.getType() == LibSBML::AST_FUNCTION_LOG )
364    assert( n.getNumChildren() == 2 )
365    c = n.getLeftChild()
366    assert( c.getType() == LibSBML::AST_INTEGER )
367    assert( c.getInteger() == 10 )
368    c = n.getRightChild()
369    assert( c.getType() == LibSBML::AST_NAME )
370    assert ((  "x" == c.getName() ))
371    n = nil
372    n = LibSBML::ASTNode.new(LibSBML::AST_FUNCTION)
373    n.setName( "sqr")
374    c = LibSBML::ASTNode.new()
375    c.setName( "x")
376    n.addChild(c)
377    assert( n.getType() == LibSBML::AST_FUNCTION )
378    assert( n.getNumChildren() == 1 )
379    n.canonicalize()
380    assert( n.getType() == LibSBML::AST_FUNCTION_POWER )
381    assert( n.getNumChildren() == 2 )
382    c = n.getLeftChild()
383    assert( c.getType() == LibSBML::AST_NAME )
384    assert ((  "x" == c.getName() ))
385    c = n.getRightChild()
386    assert( c.getType() == LibSBML::AST_INTEGER )
387    assert( c.getInteger() == 2 )
388    n = nil
389    n = LibSBML::ASTNode.new(LibSBML::AST_FUNCTION)
390    n.setName( "sqrt")
391    c = LibSBML::ASTNode.new()
392    c.setName( "x")
393    n.addChild(c)
394    assert( n.getType() == LibSBML::AST_FUNCTION )
395    assert( n.getNumChildren() == 1 )
396    n.canonicalize()
397    assert( n.getType() == LibSBML::AST_FUNCTION_ROOT )
398    assert( n.getNumChildren() == 2 )
399    c = n.getLeftChild()
400    assert( c.getType() == LibSBML::AST_INTEGER )
401    assert( c.getInteger() == 2 )
402    c = n.getRightChild()
403    assert( c.getType() == LibSBML::AST_NAME )
404    assert ((  "x" == c.getName() ))
405    n = nil
406  end
407
408  def test_ASTNode_canonicalizeLogical
409    n = LibSBML::ASTNode.new(LibSBML::AST_FUNCTION)
410    n.setName( "and")
411    assert( n.getType() == LibSBML::AST_FUNCTION )
412    n.canonicalize()
413    assert( n.getType() == LibSBML::AST_LOGICAL_AND )
414    n.setType(LibSBML::AST_FUNCTION)
415    n.setName( "not")
416    assert( n.getType() == LibSBML::AST_FUNCTION )
417    n.canonicalize()
418    assert( n.getType() == LibSBML::AST_LOGICAL_NOT )
419    n.setType(LibSBML::AST_FUNCTION)
420    n.setName( "or")
421    assert( n.getType() == LibSBML::AST_FUNCTION )
422    n.canonicalize()
423    assert( n.getType() == LibSBML::AST_LOGICAL_OR )
424    n.setType(LibSBML::AST_FUNCTION)
425    n.setName( "xor")
426    assert( n.getType() == LibSBML::AST_FUNCTION )
427    n.canonicalize()
428    assert( n.getType() == LibSBML::AST_LOGICAL_XOR )
429    n.setType(LibSBML::AST_FUNCTION)
430    n = nil
431  end
432
433  def test_ASTNode_canonicalizeRelational
434    n = LibSBML::ASTNode.new(LibSBML::AST_FUNCTION)
435    n.setName( "eq")
436    assert( n.getType() == LibSBML::AST_FUNCTION )
437    n.canonicalize()
438    assert( n.getType() == LibSBML::AST_RELATIONAL_EQ )
439    n.setType(LibSBML::AST_FUNCTION)
440    n.setName( "geq")
441    assert( n.getType() == LibSBML::AST_FUNCTION )
442    n.canonicalize()
443    assert( n.getType() == LibSBML::AST_RELATIONAL_GEQ )
444    n.setType(LibSBML::AST_FUNCTION)
445    n.setName( "gt")
446    assert( n.getType() == LibSBML::AST_FUNCTION )
447    n.canonicalize()
448    assert( n.getType() == LibSBML::AST_RELATIONAL_GT )
449    n.setType(LibSBML::AST_FUNCTION)
450    n.setName( "leq")
451    assert( n.getType() == LibSBML::AST_FUNCTION )
452    n.canonicalize()
453    assert( n.getType() == LibSBML::AST_RELATIONAL_LEQ )
454    n.setType(LibSBML::AST_FUNCTION)
455    n.setName( "lt")
456    assert( n.getType() == LibSBML::AST_FUNCTION )
457    n.canonicalize()
458    assert( n.getType() == LibSBML::AST_RELATIONAL_LT )
459    n.setType(LibSBML::AST_FUNCTION)
460    n.setName( "neq")
461    assert( n.getType() == LibSBML::AST_FUNCTION )
462    n.canonicalize()
463    assert( n.getType() == LibSBML::AST_RELATIONAL_NEQ )
464    n.setType(LibSBML::AST_FUNCTION)
465    n = nil
466  end
467
468  def test_ASTNode_children
469    parent = LibSBML::ASTNode.new()
470    left = LibSBML::ASTNode.new()
471    right = LibSBML::ASTNode.new()
472    right2 = LibSBML::ASTNode.new()
473    parent.setType(LibSBML::AST_PLUS)
474    left.setValue(1)
475    right.setValue(2)
476    right2.setValue(3)
477    parent.addChild(left)
478    parent.addChild(right)
479    assert( parent.getNumChildren() == 2 )
480    assert( left.getNumChildren() == 0 )
481    assert( right.getNumChildren() == 0 )
482    assert( parent.getLeftChild() == left )
483    assert( parent.getRightChild() == right )
484    assert( parent.getChild(0) == left )
485    assert( parent.getChild(1) == right )
486    assert( parent.getChild(2) == nil )
487    parent.addChild(right2)
488    assert( parent.getNumChildren() == 3 )
489    assert( left.getNumChildren() == 0 )
490    assert( right.getNumChildren() == 0 )
491    assert( right2.getNumChildren() == 0 )
492    assert( parent.getLeftChild() == left )
493    assert( parent.getRightChild() == right2 )
494    assert( parent.getChild(0) == left )
495    assert( parent.getChild(1) == right )
496    assert( parent.getChild(2) == right2 )
497    assert( parent.getChild(3) == nil )
498    parent = nil
499  end
500
501  def test_ASTNode_create
502    n = LibSBML::ASTNode.new()
503    ea = LibSBML::EventAssignment.new(2,4)
504    assert( n.getType() == LibSBML::AST_UNKNOWN )
505    assert( n.getCharacter() == "\0" )
506    assert( n.getName() == nil )
507    assert( n.getInteger() == 0 )
508    assert( n.getExponent() == 0 )
509    assert( n.getNumChildren() == 0 )
510    assert( n.getParentSBMLObject() == nil )
511    ea = nil
512    n = nil
513  end
514
515  def test_ASTNode_deepCopy_1
516    node = LibSBML::ASTNode.new()
517    node.setCharacter( '+')
518    node.addChild(LibSBML::ASTNode.new())
519    node.addChild(LibSBML::ASTNode.new())
520    node.getLeftChild().setValue(1)
521    node.getRightChild().setValue(2)
522    assert( node.getType() == LibSBML::AST_PLUS )
523    assert( node.getCharacter() == '+' )
524    assert( node.getNumChildren() == 2 )
525    child = node.getLeftChild()
526    assert( child.getType() == LibSBML::AST_INTEGER )
527    assert( child.getInteger() == 1 )
528    assert( child.getNumChildren() == 0 )
529    child = node.getRightChild()
530    assert( child.getType() == LibSBML::AST_INTEGER )
531    assert( child.getInteger() == 2 )
532    assert( child.getNumChildren() == 0 )
533    copy = node.deepCopy()
534    assert( copy != node )
535    assert( copy.getType() == LibSBML::AST_PLUS )
536    assert( copy.getCharacter() == '+' )
537    assert( copy.getNumChildren() == 2 )
538    child = copy.getLeftChild()
539    assert( child != node.getLeftChild() )
540    assert( child.getType() == LibSBML::AST_INTEGER )
541    assert( child.getInteger() == 1 )
542    assert( child.getNumChildren() == 0 )
543    child = copy.getRightChild()
544    assert( child != node.getRightChild() )
545    assert( child.getType() == LibSBML::AST_INTEGER )
546    assert( child.getInteger() == 2 )
547    assert( child.getNumChildren() == 0 )
548    node = nil
549    copy = nil
550  end
551
552  def test_ASTNode_deepCopy_2
553    node = LibSBML::ASTNode.new()
554    node.setName( "Foo")
555    assert( node.getType() == LibSBML::AST_NAME )
556    assert ((  "Foo" == node.getName() ))
557    assert( node.getNumChildren() == 0 )
558    copy = node.deepCopy()
559    assert( copy != node )
560    assert( copy.getType() == LibSBML::AST_NAME )
561    assert ((  "Foo" == copy.getName() ))
562    assert( copy.getNumChildren() == 0 )
563    node = nil
564    copy = nil
565  end
566
567  def test_ASTNode_deepCopy_3
568    node = LibSBML::ASTNode.new(LibSBML::AST_FUNCTION)
569    node.setName( "Foo")
570    assert( node.getType() == LibSBML::AST_FUNCTION )
571    assert ((  "Foo" == node.getName() ))
572    assert( node.getNumChildren() == 0 )
573    copy = node.deepCopy()
574    assert( copy != node )
575    assert( copy.getType() == LibSBML::AST_FUNCTION )
576    assert ((  "Foo" == copy.getName() ))
577    assert( copy.getNumChildren() == 0 )
578    node = nil
579    copy = nil
580  end
581
582  def test_ASTNode_deepCopy_4
583    node = LibSBML::ASTNode.new(LibSBML::AST_FUNCTION_ABS)
584    node.setName( "ABS")
585    assert( node.getType() == LibSBML::AST_FUNCTION_ABS )
586    assert ((  "ABS" == node.getName() ))
587    assert( node.getNumChildren() == 0 )
588    copy = node.deepCopy()
589    assert( copy != node )
590    assert( copy.getType() == LibSBML::AST_FUNCTION_ABS )
591    assert ((  "ABS" == copy.getName() ))
592    assert( copy.getNumChildren() == 0 )
593    node = nil
594    copy = nil
595  end
596
597  def test_ASTNode_freeName
598    node = LibSBML::ASTNode.new()
599    i = 0
600    i = node.setName( "a")
601    assert( i == LibSBML::LIBSBML_OPERATION_SUCCESS )
602    assert ((  "a" == LibSBML::formulaToString(node) ))
603    assert ((  "a" == node.getName() ))
604    i = node.freeName()
605    assert( i == LibSBML::LIBSBML_OPERATION_SUCCESS )
606    assert( node.getName() == nil )
607    i = node.freeName()
608    assert( i == LibSBML::LIBSBML_UNEXPECTED_ATTRIBUTE )
609    assert( node.getName() == nil )
610    node.setType(LibSBML::AST_UNKNOWN)
611    i = node.freeName()
612    assert( i == LibSBML::LIBSBML_UNEXPECTED_ATTRIBUTE )
613    assert( node.getName() == nil )
614    node = nil
615  end
616
617  def test_ASTNode_free_NULL
618  end
619
620  def test_ASTNode_getName
621    n = LibSBML::ASTNode.new()
622    n.setName( "foo")
623    assert ((  "foo" == n.getName() ))
624    n.setType(LibSBML::AST_NAME_TIME)
625    assert ((  "foo" == n.getName() ))
626    n.setName(nil)
627    assert( n.getName() == nil )
628    n.setType(LibSBML::AST_CONSTANT_E)
629    assert ((  "exponentiale" == n.getName() ))
630    n.setType(LibSBML::AST_CONSTANT_FALSE)
631    assert ((  "false" == n.getName() ))
632    n.setType(LibSBML::AST_CONSTANT_PI)
633    assert ((  "pi" == n.getName() ))
634    n.setType(LibSBML::AST_CONSTANT_TRUE)
635    assert ((  "true" == n.getName() ))
636    n.setType(LibSBML::AST_LAMBDA)
637    assert ((  "lambda" == n.getName() ))
638    n.setType(LibSBML::AST_FUNCTION)
639    n.setName( "f")
640    assert ((  "f" == n.getName() ))
641    n.setType(LibSBML::AST_FUNCTION_DELAY)
642    assert ((  "f" == n.getName() ))
643    n.setName(nil)
644    assert ((  "delay" == n.getName() ))
645    n.setType(LibSBML::AST_FUNCTION)
646    assert( n.getName() == nil )
647    n.setType(LibSBML::AST_FUNCTION_ABS)
648    assert ((  "abs" == n.getName() ))
649    n.setType(LibSBML::AST_FUNCTION_ARCCOS)
650    assert ((  "arccos" == n.getName() ))
651    n.setType(LibSBML::AST_FUNCTION_TAN)
652    assert ((  "tan" == n.getName() ))
653    n.setType(LibSBML::AST_FUNCTION_TANH)
654    assert ((  "tanh" == n.getName() ))
655    n.setType(LibSBML::AST_LOGICAL_AND)
656    assert ((  "and" == n.getName() ))
657    n.setType(LibSBML::AST_LOGICAL_NOT)
658    assert ((  "not" == n.getName() ))
659    n.setType(LibSBML::AST_LOGICAL_OR)
660    assert ((  "or" == n.getName() ))
661    n.setType(LibSBML::AST_LOGICAL_XOR)
662    assert ((  "xor" == n.getName() ))
663    n.setType(LibSBML::AST_RELATIONAL_EQ)
664    assert ((  "eq" == n.getName() ))
665    n.setType(LibSBML::AST_RELATIONAL_GEQ)
666    assert ((  "geq" == n.getName() ))
667    n.setType(LibSBML::AST_RELATIONAL_LT)
668    assert ((  "lt" == n.getName() ))
669    n.setType(LibSBML::AST_RELATIONAL_NEQ)
670    assert ((  "neq" == n.getName() ))
671    n = nil
672  end
673
674  def test_ASTNode_getPrecedence
675    n = LibSBML::ASTNode.new()
676    n.setType(LibSBML::AST_PLUS)
677    assert( n.getPrecedence() == 2 )
678    n.setType(LibSBML::AST_MINUS)
679    assert( n.getPrecedence() == 2 )
680    n.setType(LibSBML::AST_TIMES)
681    assert( n.getPrecedence() == 3 )
682    n.setType(LibSBML::AST_DIVIDE)
683    assert( n.getPrecedence() == 3 )
684    n.setType(LibSBML::AST_POWER)
685    assert( n.getPrecedence() == 4 )
686    n.setType(LibSBML::AST_MINUS)
687    n.addChild(LibSBML::ASTNode.new(LibSBML::AST_NAME))
688    assert( n.isUMinus() == true )
689    assert( n.getPrecedence() == 5 )
690    n.setType(LibSBML::AST_NAME)
691    assert( n.getPrecedence() == 6 )
692    n.setType(LibSBML::AST_FUNCTION)
693    assert( n.getPrecedence() == 6 )
694    n = nil
695  end
696
697  def test_ASTNode_getReal
698    n = LibSBML::ASTNode.new()
699    n.setType(LibSBML::AST_REAL)
700    n.setValue(1.6)
701    assert( n.getReal() == 1.6 )
702    n.setType(LibSBML::AST_REAL_E)
703    n.setValue(12.3,3)
704    val = (n.getReal() - 12300.0).abs
705    assert( val < @@DBL_EPSILON )
706    n.setType(LibSBML::AST_RATIONAL)
707    n.setValue(1,2)
708    assert( n.getReal() == 0.5 )
709    n = nil
710  end
711
712  def test_ASTNode_insertChild
713    node = LibSBML::ASTNode.new()
714    c1 = LibSBML::ASTNode.new()
715    c2 = LibSBML::ASTNode.new()
716    c3 = LibSBML::ASTNode.new()
717    newc = LibSBML::ASTNode.new()
718    newc1 = LibSBML::ASTNode.new()
719    i = 0
720    node.setType(LibSBML::AST_LOGICAL_AND)
721    c1.setName( "a")
722    c2.setName( "b")
723    c3.setName( "c")
724    node.addChild(c1)
725    node.addChild(c2)
726    node.addChild(c3)
727    assert( node.getNumChildren() == 3 )
728    assert ((  "and(a, b, c)" == LibSBML::formulaToString(node) ))
729    newc.setName( "d")
730    newc1.setName( "e")
731    i = node.insertChild(1,newc)
732    assert( i == LibSBML::LIBSBML_OPERATION_SUCCESS )
733    assert( node.getNumChildren() == 4 )
734    assert ((  "and(a, d, b, c)" == LibSBML::formulaToString(node) ))
735    i = node.insertChild(5,newc)
736    assert( i == LibSBML::LIBSBML_INDEX_EXCEEDS_SIZE )
737    assert( node.getNumChildren() == 4 )
738    assert ((  "and(a, d, b, c)" == LibSBML::formulaToString(node) ))
739    i = node.insertChild(2,newc1)
740    assert( i == LibSBML::LIBSBML_OPERATION_SUCCESS )
741    assert( node.getNumChildren() == 5 )
742    assert ((  "and(a, d, e, b, c)" == LibSBML::formulaToString(node) ))
743    node = nil
744  end
745
746  def test_ASTNode_isLog10
747    n = LibSBML::ASTNode.new()
748    n.setType(LibSBML::AST_FUNCTION)
749    assert( n.isLog10() == false )
750    n.setType(LibSBML::AST_FUNCTION_LOG)
751    assert( n.isLog10() == false )
752    c = LibSBML::ASTNode.new()
753    n.addChild(c)
754    c.setValue(10)
755    assert( n.isLog10() == false )
756    n.addChild(LibSBML::ASTNode.new())
757    assert( n.isLog10() == true )
758    c.setValue(2)
759    assert( n.isLog10() == false )
760    n = nil
761  end
762
763  def test_ASTNode_isSqrt
764    n = LibSBML::ASTNode.new()
765    n.setType(LibSBML::AST_FUNCTION)
766    assert( n.isSqrt() == false )
767    n.setType(LibSBML::AST_FUNCTION_ROOT)
768    assert( n.isSqrt() == false )
769    c = LibSBML::ASTNode.new()
770    n.addChild(c)
771    c.setValue(2)
772    assert( n.isSqrt() == false )
773    n.addChild(LibSBML::ASTNode.new())
774    assert( n.isSqrt() == true )
775    c.setValue(3)
776    assert( n.isSqrt() == false )
777    n = nil
778  end
779
780  def test_ASTNode_isUMinus
781    n = LibSBML::ASTNode.new()
782    n.setType(LibSBML::AST_MINUS)
783    assert( n.isUMinus() == false )
784    n.addChild(LibSBML::ASTNode.new(LibSBML::AST_NAME))
785    assert( n.isUMinus() == true )
786    n = nil
787  end
788
789  def test_ASTNode_no_children
790    node = LibSBML::ASTNode.new()
791    assert( node.getNumChildren() == 0 )
792    assert( node.getLeftChild() == nil )
793    assert( node.getRightChild() == nil )
794    assert( node.getChild(0) == nil )
795    node = nil
796  end
797
798  def test_ASTNode_one_child
799    node = LibSBML::ASTNode.new()
800    child = LibSBML::ASTNode.new()
801    node.addChild(child)
802    assert( node.getNumChildren() == 1 )
803    assert( node.getLeftChild() == child )
804    assert( node.getRightChild() == nil )
805    assert( node.getChild(0) == child )
806    assert( node.getChild(1) == nil )
807    node = nil
808  end
809
810  def test_ASTNode_prependChild1
811    node = LibSBML::ASTNode.new()
812    c1 = LibSBML::ASTNode.new()
813    c2 = LibSBML::ASTNode.new()
814    c1_1 = LibSBML::ASTNode.new()
815    i = 0
816    node.setType(LibSBML::AST_LOGICAL_AND)
817    c1.setName( "a")
818    c2.setName( "b")
819    node.addChild(c1)
820    node.addChild(c2)
821    assert( node.getNumChildren() == 2 )
822    assert ((  "and(a, b)" == LibSBML::formulaToString(node) ))
823    c1_1.setName( "d")
824    i = node.prependChild(c1_1)
825    assert( i == LibSBML::LIBSBML_OPERATION_SUCCESS )
826    assert( node.getNumChildren() == 3 )
827    assert ((  "and(d, a, b)" == LibSBML::formulaToString(node) ))
828    assert ((  "d" == node.getChild(0).getName() ))
829    assert ((  "a" == node.getChild(1).getName() ))
830    assert ((  "b" == node.getChild(2).getName() ))
831    node = nil
832  end
833
834  def test_ASTNode_removeChild
835    node = LibSBML::ASTNode.new()
836    c1 = LibSBML::ASTNode.new()
837    c2 = LibSBML::ASTNode.new()
838    i = 0
839    node.setType(LibSBML::AST_PLUS)
840    c1.setName( "foo")
841    c2.setName( "foo2")
842    node.addChild(c1)
843    node.addChild(c2)
844    assert( node.getNumChildren() == 2 )
845    i = node.removeChild(0)
846    assert( i == LibSBML::LIBSBML_OPERATION_SUCCESS )
847    assert( node.getNumChildren() == 1 )
848    i = node.removeChild(1)
849    assert( i == LibSBML::LIBSBML_INDEX_EXCEEDS_SIZE )
850    assert( node.getNumChildren() == 1 )
851    i = node.removeChild(0)
852    assert( i == LibSBML::LIBSBML_OPERATION_SUCCESS )
853    assert( node.getNumChildren() == 0 )
854    node = nil
855  end
856
857  def test_ASTNode_replaceChild
858    node = LibSBML::ASTNode.new()
859    c1 = LibSBML::ASTNode.new()
860    c2 = LibSBML::ASTNode.new()
861    c3 = LibSBML::ASTNode.new()
862    newc = LibSBML::ASTNode.new()
863    i = 0
864    node.setType(LibSBML::AST_LOGICAL_AND)
865    c1.setName( "a")
866    c2.setName( "b")
867    c3.setName( "c")
868    node.addChild(c1)
869    node.addChild(c2)
870    node.addChild(c3)
871    assert( node.getNumChildren() == 3 )
872    assert ((  "and(a, b, c)" == LibSBML::formulaToString(node) ))
873    newc.setName( "d")
874    i = node.replaceChild(0,newc)
875    assert( i == LibSBML::LIBSBML_OPERATION_SUCCESS )
876    assert( node.getNumChildren() == 3 )
877    assert ((  "and(d, b, c)" == LibSBML::formulaToString(node) ))
878    i = node.replaceChild(3,newc)
879    assert( i == LibSBML::LIBSBML_INDEX_EXCEEDS_SIZE )
880    assert( node.getNumChildren() == 3 )
881    assert ((  "and(d, b, c)" == LibSBML::formulaToString(node) ))
882    i = node.replaceChild(1,c1)
883    assert( i == LibSBML::LIBSBML_OPERATION_SUCCESS )
884    assert( node.getNumChildren() == 3 )
885    assert ((  "and(d, a, c)" == LibSBML::formulaToString(node) ))
886    node = nil
887  end
888
889  def test_ASTNode_setCharacter
890    node = LibSBML::ASTNode.new()
891    node.setName( "foo")
892    assert( node.getType() == LibSBML::AST_NAME )
893    assert( node.getCharacter() == "\0" )
894    assert ((  "foo" == node.getName() ))
895    assert( node.getInteger() == 0 )
896    assert( node.getReal() == 0 )
897    assert( node.getExponent() == 0 )
898    assert( node.getDenominator() == 1 )
899    node.setCharacter( '+')
900    assert( node.getType() == LibSBML::AST_PLUS )
901    assert( node.getCharacter() == '+' )
902    assert( node.getName() == nil )
903    assert( node.getInteger() == 0 )
904    assert( node.getReal() == 0 )
905    assert( node.getExponent() == 0 )
906    assert( node.getDenominator() == 1 )
907    node.setCharacter( '-')
908    assert( node.getType() == LibSBML::AST_MINUS )
909    assert( node.getCharacter() == '-' )
910    assert( node.getName() == nil )
911    assert( node.getInteger() == 0 )
912    assert( node.getReal() == 0 )
913    assert( node.getExponent() == 0 )
914    assert( node.getDenominator() == 1 )
915    node.setCharacter( '*')
916    assert( node.getType() == LibSBML::AST_TIMES )
917    assert( node.getCharacter() == '*' )
918    assert( node.getName() == nil )
919    assert( node.getInteger() == 0 )
920    assert( node.getReal() == 0 )
921    assert( node.getExponent() == 0 )
922    assert( node.getDenominator() == 1 )
923    node.setCharacter( '/')
924    assert( node.getType() == LibSBML::AST_DIVIDE )
925    assert( node.getCharacter() == '/' )
926    assert( node.getName() == nil )
927    assert( node.getInteger() == 0 )
928    assert( node.getReal() == 0 )
929    assert( node.getExponent() == 0 )
930    assert( node.getDenominator() == 1 )
931    node.setCharacter( '^')
932    assert( node.getType() == LibSBML::AST_POWER )
933    assert( node.getCharacter() == '^' )
934    assert( node.getName() == nil )
935    assert( node.getInteger() == 0 )
936    assert( node.getReal() == 0 )
937    assert( node.getExponent() == 0 )
938    assert( node.getDenominator() == 1 )
939    node.setCharacter( '$')
940    assert( node.getType() == LibSBML::AST_UNKNOWN )
941    assert( node.getCharacter() == '$' )
942    assert( node.getName() == nil )
943    assert( node.getInteger() == 0 )
944    assert( node.getReal() == 0 )
945    assert( node.getExponent() == 0 )
946    assert( node.getDenominator() == 1 )
947    node = nil
948  end
949
950  def test_ASTNode_setInteger
951    node = LibSBML::ASTNode.new()
952    node.setName( "foo")
953    assert( node.getType() == LibSBML::AST_NAME )
954    assert ((  "foo" == node.getName() ))
955    assert( node.getCharacter() == "\0" )
956    assert( node.getInteger() == 0 )
957    assert( node.getReal() == 0 )
958    assert( node.getExponent() == 0 )
959    assert( node.getDenominator() == 1 )
960    node.setValue(3.2)
961    assert( node.getType() == LibSBML::AST_REAL )
962    assert( node.getInteger() == 0 )
963    assert( node.getName() == nil )
964    assert( node.getCharacter() == "\0" )
965    assert( node.getReal() == 3.2 )
966    assert( node.getExponent() == 0 )
967    assert( node.getDenominator() == 1 )
968    node.setValue(321)
969    assert( node.getType() == LibSBML::AST_INTEGER )
970    assert( node.getInteger() == 321 )
971    assert( node.getName() == nil )
972    assert( node.getCharacter() == "\0" )
973    assert( node.getReal() == 0 )
974    assert( node.getExponent() == 0 )
975    assert( node.getDenominator() == 1 )
976    node = nil
977  end
978
979  def test_ASTNode_setName
980    name =  "foo";
981    node = LibSBML::ASTNode.new()
982    assert( node.getType() == LibSBML::AST_UNKNOWN )
983    node.setName(name)
984    assert( node.getType() == LibSBML::AST_NAME )
985    assert (( name == node.getName() ))
986    assert( node.getCharacter() == "\0" )
987    assert( node.getInteger() == 0 )
988    assert( node.getReal() == 0 )
989    assert( node.getExponent() == 0 )
990    assert( node.getDenominator() == 1 )
991    if (node.getName() == name)
992    end
993    node.setName(nil)
994    assert( node.getType() == LibSBML::AST_NAME )
995    if (node.getName() != nil)
996    end
997    node.setType(LibSBML::AST_FUNCTION_COS)
998    assert( node.getType() == LibSBML::AST_FUNCTION_COS )
999    assert ((  "cos" == node.getName() ))
1000    assert( node.getCharacter() == "\0" )
1001    assert( node.getInteger() == 0 )
1002    assert( node.getReal() == 0 )
1003    assert( node.getExponent() == 0 )
1004    assert( node.getDenominator() == 1 )
1005    node.setType(LibSBML::AST_PLUS)
1006    node.setName(name)
1007    assert( node.getType() == LibSBML::AST_NAME )
1008    assert (( name == node.getName() ))
1009    assert( node.getCharacter() == '+' )
1010    assert( node.getInteger() == 0 )
1011    assert( node.getReal() == 0 )
1012    assert( node.getExponent() == 0 )
1013    assert( node.getDenominator() == 1 )
1014    node = nil
1015  end
1016
1017  def test_ASTNode_setName_override
1018    node = LibSBML::ASTNode.new(LibSBML::AST_FUNCTION_SIN)
1019    assert ((  "sin" == node.getName() ))
1020    assert( node.getType() == LibSBML::AST_FUNCTION_SIN )
1021    node.setName( "MySinFunc")
1022    assert ((  "MySinFunc" == node.getName() ))
1023    assert( node.getType() == LibSBML::AST_FUNCTION_SIN )
1024    node.setName(nil)
1025    assert ((  "sin" == node.getName() ))
1026    assert( node.getType() == LibSBML::AST_FUNCTION_SIN )
1027    node = nil
1028  end
1029
1030  def test_ASTNode_setReal
1031    node = LibSBML::ASTNode.new()
1032    node.setName( "foo")
1033    assert( node.getType() == LibSBML::AST_NAME )
1034    node.setValue(32.1)
1035    assert( node.getType() == LibSBML::AST_REAL )
1036    assert( node.getInteger() == 0 )
1037    assert( node.getName() == nil )
1038    assert( node.getCharacter() == "\0" )
1039    assert( node.getReal() == 32.1 )
1040    assert( node.getExponent() == 0 )
1041    assert( node.getDenominator() == 1 )
1042    assert( node.getMantissa() == 32.1 )
1043    node.setValue(45,90)
1044    assert( node.getType() == LibSBML::AST_RATIONAL )
1045    assert( node.getInteger() == 45 )
1046    assert( node.getName() == nil )
1047    assert( node.getCharacter() == "\0" )
1048    assert( node.getReal() == 0.5 )
1049    assert( node.getExponent() == 0 )
1050    assert( node.getDenominator() == 90 )
1051    assert( node.getMantissa() == 0 )
1052    node.setValue(32.0,4)
1053    assert( node.getType() == LibSBML::AST_REAL_E )
1054    assert( node.getInteger() == 0 )
1055    assert( node.getName() == nil )
1056    assert( node.getCharacter() == "\0" )
1057    assert( node.getReal() == 320000 )
1058    assert( node.getExponent() == 4 )
1059    assert( node.getDenominator() == 1 )
1060    assert( node.getMantissa() == 32 )
1061    node = nil
1062  end
1063
1064  def test_ASTNode_setType
1065    node = LibSBML::ASTNode.new()
1066    node.setName( "foo")
1067    assert( node.getType() == LibSBML::AST_NAME )
1068    node.setType(LibSBML::AST_FUNCTION)
1069    assert( node.getType() == LibSBML::AST_FUNCTION )
1070    assert ((  "foo" == node.getName() ))
1071    node.setType(LibSBML::AST_NAME)
1072    assert( node.getType() == LibSBML::AST_NAME )
1073    assert ((  "foo" == node.getName() ))
1074    node.setType(LibSBML::AST_INTEGER)
1075    assert( node.getType() == LibSBML::AST_INTEGER )
1076    node.setType(LibSBML::AST_REAL)
1077    assert( node.getType() == LibSBML::AST_REAL )
1078    node.setType(LibSBML::AST_UNKNOWN)
1079    assert( node.getType() == LibSBML::AST_UNKNOWN )
1080    node.setType(LibSBML::AST_PLUS)
1081    assert( node.getType() == LibSBML::AST_PLUS )
1082    assert( node.getCharacter() == '+' )
1083    node.setType(LibSBML::AST_MINUS)
1084    assert( node.getType() == LibSBML::AST_MINUS )
1085    assert( node.getCharacter() == '-' )
1086    node.setType(LibSBML::AST_TIMES)
1087    assert( node.getType() == LibSBML::AST_TIMES )
1088    assert( node.getCharacter() == '*' )
1089    node.setType(LibSBML::AST_DIVIDE)
1090    assert( node.getType() == LibSBML::AST_DIVIDE )
1091    assert( node.getCharacter() == '/' )
1092    node.setType(LibSBML::AST_POWER)
1093    assert( node.getType() == LibSBML::AST_POWER )
1094    assert( node.getCharacter() == '^' )
1095    node = nil
1096  end
1097
1098  def test_ASTNode_swapChildren
1099    node = LibSBML::ASTNode.new()
1100    c1 = LibSBML::ASTNode.new()
1101    c2 = LibSBML::ASTNode.new()
1102    node_1 = LibSBML::ASTNode.new()
1103    c1_1 = LibSBML::ASTNode.new()
1104    c2_1 = LibSBML::ASTNode.new()
1105    i = 0
1106    node.setType(LibSBML::AST_LOGICAL_AND)
1107    c1.setName( "a")
1108    c2.setName( "b")
1109    node.addChild(c1)
1110    node.addChild(c2)
1111    assert( node.getNumChildren() == 2 )
1112    assert ((  "and(a, b)" == LibSBML::formulaToString(node) ))
1113    node_1.setType(LibSBML::AST_LOGICAL_AND)
1114    c1_1.setName( "d")
1115    c2_1.setName( "f")
1116    node_1.addChild(c1_1)
1117    node_1.addChild(c2_1)
1118    assert( node_1.getNumChildren() == 2 )
1119    assert ((  "and(d, f)" == LibSBML::formulaToString(node_1) ))
1120    i = node.swapChildren(node_1)
1121    assert( i == LibSBML::LIBSBML_OPERATION_SUCCESS )
1122    assert( node.getNumChildren() == 2 )
1123    assert ((  "and(d, f)" == LibSBML::formulaToString(node) ))
1124    assert( node_1.getNumChildren() == 2 )
1125    assert ((  "and(a, b)" == LibSBML::formulaToString(node_1) ))
1126    node_1 = nil
1127    node = nil
1128  end
1129
1130  def test_ASTNode_units
1131    n = LibSBML::ASTNode.new()
1132    n.setType(LibSBML::AST_REAL)
1133    n.setValue(1.6)
1134    i = n.setUnits( "mole")
1135    assert( i == LibSBML::LIBSBML_OPERATION_SUCCESS )
1136    assert( n.isSetUnits() == true )
1137    assert ((  "mole" == n.getUnits() ))
1138    i = n.unsetUnits()
1139    assert( i == LibSBML::LIBSBML_OPERATION_SUCCESS )
1140    assert( n.isSetUnits() == false )
1141    assert ((  "" == n.getUnits() ))
1142    i = n.setUnits( "1mole")
1143    assert( i == LibSBML::LIBSBML_INVALID_ATTRIBUTE_VALUE )
1144    assert( n.isSetUnits() == false )
1145    n.setType(LibSBML::AST_FUNCTION)
1146    i = n.setUnits( "mole")
1147    assert( i == LibSBML::LIBSBML_UNEXPECTED_ATTRIBUTE )
1148    assert( n.isSetUnits() == false )
1149    assert ((  "" == n.getUnits() ))
1150    n = nil
1151  end
1152
1153end
1154
1155