/// /// @file TestReadMathML.cs /// @brief Read MathML unit tests /// @author Frank Bergmann (Csharp conversion) /// @author Akiya Jouraku (Csharp conversion) /// @author Ben Bornstein /// /// $Id: TestReadMathML.cs 8704 2009-01-04 02:26:05Z mhucka $ /// $HeadURL: https://sbml.svn.sourceforge.net/svnroot/sbml/trunk/libsbml/src/bindings/csharp/test/math/TestReadMathML.cs $ /// /// This test file was converted from src/sbml/test/TestReadMathML.cpp /// with the help of conversion sciprt (ctest_converter.pl). /// /// */ namespace LibSBMLCSTest { using libsbml; using System.IO; public class TestReadMathML { public class AssertionError : System.Exception { public AssertionError() : base() { } } static void assertTrue(bool condition) { if (condition == true) { return; } throw new AssertionError(); } static void assertEquals(object a, object b) { if ( (a == null) && (b == null) ) { return; } else if (a.Equals(b)) { return; } throw new AssertionError(); } static void assertNotEquals(object a, object b) { if ( (a == null) && (b == null) ) { throw new AssertionError(); } else if (a.Equals(b)) { throw new AssertionError(); } } static void assertEquals(bool a, bool b) { if ( a == b ) { return; } throw new AssertionError(); } static void assertNotEquals(bool a, bool b) { if ( a != b ) { return; } throw new AssertionError(); } static void assertEquals(int a, int b) { if ( a == b ) { return; } throw new AssertionError(); } static void assertNotEquals(int a, int b) { if ( a != b ) { return; } throw new AssertionError(); } public double util_NaN() { double z = 0.0; return 0.0/z; } public double util_PosInf() { double z = 0.0; return 1.0/z; } public double util_NegInf() { double z = 0.0; return -1.0/z; } public bool util_isInf(double x) { return ( (x == util_PosInf()) || (x == util_NegInf()) ); } private string F; private ASTNode N; public string MATHML_FOOTER() { return ""; } public string MATHML_HEADER() { return "\n"; } public string XML_HEADER() { return "\n"; } public bool isNan(double x) { return x != x; } public string wrapMathML(string s) { string r = XML_HEADER(); r += MATHML_HEADER(); r += s; r += MATHML_FOOTER(); return r; } public string wrapXML(string s) { string r = XML_HEADER(); r += s; return r; } public void setUp() { N = null; F = null; } public void tearDown() { F = null; } public void test_element_abs() { string s = wrapMathML(" x "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "abs(x)" == F )); } public void test_element_and() { string s = wrapMathML(" a b c " ); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "and(a, b, c)" == F )); } public void test_element_arccos() { string s = wrapMathML(" x "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "acos(x)" == F )); } public void test_element_arccosh() { string s = wrapMathML(" x "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "arccosh(x)" == F )); } public void test_element_arccot() { string s = wrapMathML(" x "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "arccot(x)" == F )); } public void test_element_arccoth() { string s = wrapMathML(" x "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "arccoth(x)" == F )); } public void test_element_arccsc() { string s = wrapMathML(" x "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "arccsc(x)" == F )); } public void test_element_arccsch() { string s = wrapMathML(" x "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "arccsch(x)" == F )); } public void test_element_arcsec() { string s = wrapMathML(" x "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "arcsec(x)" == F )); } public void test_element_arcsech() { string s = wrapMathML(" x "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "arcsech(x)" == F )); } public void test_element_arcsin() { string s = wrapMathML(" x "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "asin(x)" == F )); } public void test_element_arcsinh() { string s = wrapMathML(" x "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "arcsinh(x)" == F )); } public void test_element_arctan() { string s = wrapMathML(" x "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "atan(x)" == F )); } public void test_element_arctanh() { string s = wrapMathML(" x "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "arctanh(x)" == F )); } public void test_element_bug_apply_ci_1() { string s = wrapMathML("" + " Y " + " 1 " + ""); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); assertTrue( N.getType() == libsbml.AST_FUNCTION ); assertTrue(( "Y" == N.getName() )); assertTrue( N.getNumChildren() == 1 ); ASTNode c = N.getLeftChild(); assertTrue( c != null ); assertTrue( c.getType() == libsbml.AST_REAL ); assertTrue( c.getReal() == 1 ); assertTrue( c.getNumChildren() == 0 ); } public void test_element_bug_apply_ci_2() { string s = wrapMathML("" + " Y " + " t " + ""); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); assertTrue( N.getType() == libsbml.AST_FUNCTION ); assertTrue(( "Y" == N.getName() )); assertTrue( N.getNumChildren() == 1 ); ASTNode c = N.getLeftChild(); assertTrue( c != null ); assertTrue( c.getType() == libsbml.AST_NAME_TIME ); assertTrue(( "t" == c.getName() )); assertTrue( c.getNumChildren() == 0 ); } public void test_element_bug_cn_e_notation_1() { string s = wrapMathML(" 2 -8 "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); assertTrue( N.getType() == libsbml.AST_REAL_E ); assertTrue( N.getMantissa() == 2.0 ); assertTrue( N.getExponent() == -8.0 ); assertTrue( N.getNumChildren() == 0 ); } public void test_element_bug_cn_e_notation_2() { string s = wrapMathML(" -3 4 "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); assertTrue( N.getType() == libsbml.AST_REAL_E ); assertTrue( N.getMantissa() == -3.0 ); assertTrue( N.getExponent() == 4.0 ); assertTrue( N.getNumChildren() == 0 ); } public void test_element_bug_cn_e_notation_3() { string s = wrapMathML(" -6 -1 "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); assertTrue( N.getType() == libsbml.AST_REAL_E ); assertTrue( N.getMantissa() == -6.0 ); assertTrue( N.getExponent() == -1.0 ); assertTrue( N.getNumChildren() == 0 ); } public void test_element_bug_cn_integer_negative() { string s = wrapMathML(" -7 "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); assertTrue( N.getType() == libsbml.AST_INTEGER ); assertTrue( N.getInteger() == -7 ); assertTrue( N.getNumChildren() == 0 ); } public void test_element_bug_csymbol_1() { string s = wrapMathML("" + " " + " time" + " 5000" + ""); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); assertTrue( N.getType() == libsbml.AST_RELATIONAL_GT ); assertTrue( N.getNumChildren() == 2 ); ASTNode c = N.getLeftChild(); assertTrue( c != null ); assertTrue( c.getType() == libsbml.AST_NAME_TIME ); assertTrue(( "time" == c.getName() )); assertTrue( c.getNumChildren() == 0 ); c = N.getRightChild(); assertTrue( c != null ); assertTrue( c.getType() == libsbml.AST_REAL ); assertTrue( c.getReal() == 5000 ); assertTrue( c.getNumChildren() == 0 ); } public void test_element_bug_csymbol_delay_1() { string s = wrapMathML("" + " my_delay " + " x " + " 0.1 " + "\n"); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); assertTrue( N.getType() == libsbml.AST_FUNCTION_DELAY ); assertTrue(( "my_delay" == N.getName() )); assertTrue( N.getNumChildren() == 2 ); ASTNode c = N.getLeftChild(); assertTrue( c != null ); assertTrue( c.getType() == libsbml.AST_NAME ); assertTrue(( "x" == c.getName() )); assertTrue( c.getNumChildren() == 0 ); c = N.getRightChild(); assertTrue( c != null ); assertTrue( c.getType() == libsbml.AST_REAL ); assertTrue( c.getReal() == 0.1 ); assertTrue( c.getNumChildren() == 0 ); } public void test_element_bug_math_xmlns() { string s = wrapXML("" + " " + " 1 2" + " " + ""); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "1 + 2" == F )); } public void test_element_ceiling() { string s = wrapMathML(" 1.6 "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "ceil(1.6)" == F )); } public void test_element_ci() { string s = wrapMathML(" x "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); assertTrue( N.getType() == libsbml.AST_NAME ); assertTrue(( "x" == N.getName() )); assertTrue( N.getNumChildren() == 0 ); } public void test_element_ci_surrounding_spaces_bug() { string s = wrapMathML(" s "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); assertTrue( N.getType() == libsbml.AST_NAME ); assertTrue(( "s" == N.getName() )); assertTrue( N.getNumChildren() == 0 ); } public void test_element_cn_default() { string s = wrapMathML(" 12345.7 "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); assertTrue( N.getType() == libsbml.AST_REAL ); assertTrue( N.getReal() == 12345.7 ); assertTrue( N.getNumChildren() == 0 ); } public void test_element_cn_e_notation() { string s = wrapMathML(" 12.3 5 "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); assertTrue( N.getType() == libsbml.AST_REAL_E ); assertTrue( N.getMantissa() == 12.3 ); assertTrue( N.getExponent() == 5 ); assertTrue( N.getNumChildren() == 0 ); } public void test_element_cn_integer() { string s = wrapMathML(" 12345 "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); assertTrue( N.getType() == libsbml.AST_INTEGER ); assertTrue( N.getInteger() == 12345 ); assertTrue( N.getNumChildren() == 0 ); } public void test_element_cn_rational() { string s = wrapMathML(" 12342 2342342 " ); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); assertTrue( N.getType() == libsbml.AST_RATIONAL ); assertTrue( N.getNumerator() == 12342 ); assertTrue( N.getDenominator() == 2342342 ); assertTrue( N.getNumChildren() == 0 ); } public void test_element_cn_real() { string s = wrapMathML(" 12345.7 "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); assertTrue( N.getType() == libsbml.AST_REAL ); assertTrue( N.getReal() == 12345.7 ); assertTrue( N.getNumChildren() == 0 ); } public void test_element_constants_exponentiale() { string s = wrapMathML(""); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); assertTrue( N.getType() == libsbml.AST_CONSTANT_E ); assertTrue( N.getNumChildren() == 0 ); } public void test_element_constants_false() { string s = wrapMathML(""); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); assertTrue( N.getType() == libsbml.AST_CONSTANT_FALSE ); assertTrue( N.getNumChildren() == 0 ); } public void test_element_constants_infinity() { string s = wrapMathML(""); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); assertTrue( N.getType() == libsbml.AST_REAL ); assertTrue( util_isInf(N.getReal()) == true ); assertTrue( N.getNumChildren() == 0 ); } public void test_element_constants_notanumber() { string s = wrapMathML(""); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); assertTrue( N.getType() == libsbml.AST_REAL ); assertEquals( true, isNan(N.getReal()) ); assertTrue( N.getNumChildren() == 0 ); } public void test_element_constants_pi() { string s = wrapMathML(""); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); assertTrue( N.getType() == libsbml.AST_CONSTANT_PI ); assertTrue( N.getNumChildren() == 0 ); } public void test_element_constants_true() { string s = wrapMathML(""); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); assertTrue( N.getType() == libsbml.AST_CONSTANT_TRUE ); assertTrue( N.getNumChildren() == 0 ); } public void test_element_cos() { string s = wrapMathML(" x "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "cos(x)" == F )); } public void test_element_cosh() { string s = wrapMathML(" x "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "cosh(x)" == F )); } public void test_element_cot() { string s = wrapMathML(" x "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "cot(x)" == F )); } public void test_element_coth() { string s = wrapMathML(" x "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "coth(x)" == F )); } public void test_element_csc() { string s = wrapMathML(" x "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "csc(x)" == F )); } public void test_element_csch() { string s = wrapMathML(" x "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "csch(x)" == F )); } public void test_element_csymbol_delay_1() { string s = wrapMathML(" delay "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); assertTrue( N.getType() == libsbml.AST_FUNCTION_DELAY ); assertTrue(( "delay" == N.getName() )); assertTrue( N.getNumChildren() == 0 ); } public void test_element_csymbol_delay_2() { string s = wrapMathML("" + " my_delay " + " x " + " 0.1 " + "\n"); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "my_delay(x, 0.1)" == F )); } public void test_element_csymbol_delay_3() { string s = wrapMathML("" + " " + " " + " delay " + " P " + " delta_t " + " \n" + " q " + "\n"); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "pow(delay(P, delta_t), q)" == F )); } public void test_element_csymbol_time() { string s = wrapMathML(" t "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); assertTrue( N.getType() == libsbml.AST_NAME_TIME ); assertTrue(( "t" == N.getName() )); assertTrue( N.getNumChildren() == 0 ); } public void test_element_eq() { string s = wrapMathML(" a b c " ); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "eq(a, b, c)" == F )); } public void test_element_exp() { string s = wrapMathML(" x "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "exp(x)" == F )); } public void test_element_factorial() { string s = wrapMathML(" 5 "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "factorial(5)" == F )); } public void test_element_floor() { string s = wrapMathML(" 1.2 "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "floor(1.2)" == F )); } public void test_element_function_call_1() { string s = wrapMathML(" foo x "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "foo(x)" == F )); } public void test_element_function_call_2() { string s = wrapMathML(" 1 " + " f x " + ""); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "1 + f(x)" == F )); } public void test_element_geq() { string s = wrapMathML(" 1 x 0 " ); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "geq(1, x, 0)" == F )); } public void test_element_gt() { string s = wrapMathML(" " + " 1 " + ""); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "gt(INF, INF - 1)" == F )); } public void test_element_lambda() { string s = wrapMathML("" + " x " + " " + " x 1 " + " " + ""); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "lambda(x, sin(x + 1))" == F )); } public void test_element_leq() { string s = wrapMathML(" 0 x 1 " ); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "leq(0, x, 1)" == F )); } public void test_element_ln() { string s = wrapMathML(" a "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "log(a)" == F )); } public void test_element_log_1() { string s = wrapMathML(" 3 " + " x " + ""); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "log(3, x)" == F )); } public void test_element_log_2() { string s = wrapMathML(" x "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "log10(x)" == F )); } public void test_element_lt() { string s = wrapMathML(" " + " 1" + ""); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "lt(INF - INF, 1)" == F )); } public void test_element_math() { string s = wrapXML("" ); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); assertTrue( N.getType() == libsbml.AST_UNKNOWN ); } public void test_element_neq() { string s = wrapMathML(" " ); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "neq(NaN, NaN)" == F )); } public void test_element_not() { string s = wrapMathML(" TooShabby "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "not(TooShabby)" == F )); } public void test_element_operator_plus() { string s = wrapMathML(" 1 2 3 " ); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "1 + 2 + 3" == F )); } public void test_element_operator_times() { string s = wrapMathML(" x y z " ); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "x * y * z" == F )); } public void test_element_or() { string s = wrapMathML(" a b c d " ); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "or(a, b, c, d)" == F )); } public void test_element_piecewise() { string s = wrapMathML("" + " " + " x " + " x 0 " + " " + " " + " 0" + " x 0 " + " " + " " + " x" + " x 0 " + " " + ""); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "piecewise(-x, lt(x, 0), 0, eq(x, 0), x, gt(x, 0))" == F )); } public void test_element_piecewise_otherwise() { string s = wrapMathML("" + " " + " 0" + " x 0 " + " " + " " + " x" + " " + ""); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "piecewise(0, lt(x, 0), x)" == F )); } public void test_element_power() { string s = wrapMathML(" x 3 "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "pow(x, 3)" == F )); } public void test_element_root_1() { string s = wrapMathML(" 3 " + " a " + ""); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "root(3, a)" == F )); } public void test_element_root_2() { string s = wrapMathML(" a "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "sqrt(a)" == F )); } public void test_element_sec() { string s = wrapMathML(" x "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "sec(x)" == F )); } public void test_element_sech() { string s = wrapMathML(" x "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "sech(x)" == F )); } public void test_element_sin() { string s = wrapMathML(" x "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "sin(x)" == F )); } public void test_element_sinh() { string s = wrapMathML(" x "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "sinh(x)" == F )); } public void test_element_tan() { string s = wrapMathML(" x "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "tan(x)" == F )); } public void test_element_tanh() { string s = wrapMathML(" x "); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "tanh(x)" == F )); } public void test_element_xor() { string s = wrapMathML(" a b b a " ); N = libsbml.readMathMLFromString(s); assertTrue( N != null ); F = libsbml.formulaToString(N); assertTrue(( "xor(a, b, b, a)" == F )); } } }