From 89660e6321eef77995135a6d46d419da604b6362 Mon Sep 17 00:00:00 2001 From: Sarah Keating Date: Mon, 23 Dec 2024 16:15:17 +0000 Subject: [PATCH] more thorough testing --- .../math/test/TestRefactoringFunctions.cpp | 407 ++++++++++++++++-- 1 file changed, 380 insertions(+), 27 deletions(-) diff --git a/src/sbml/math/test/TestRefactoringFunctions.cpp b/src/sbml/math/test/TestRefactoringFunctions.cpp index 3725290c1..a16cba0dc 100644 --- a/src/sbml/math/test/TestRefactoringFunctions.cpp +++ b/src/sbml/math/test/TestRefactoringFunctions.cpp @@ -59,49 +59,388 @@ using namespace std; LIBSBML_CPP_NAMESPACE_USE +static bool +equals(const char* expected, const char* actual) +{ + if (!strcmp(expected, actual)) return true; + + printf("\nStrings are not equal:\n"); + printf("Expected:\n[%s]\n", expected); + printf("Actual:\n[%s]\n", actual); + + return false; +} + + +static bool +formulas_equal(const char* expected, ASTNode* actual) +{ + return equals(expected, SBML_formulaToL3String(actual)); +} /** @endcond */ CK_CPPSTART -START_TEST(test_refactor_numbers) +START_TEST(test_refactor_numbers_integer) { ASTNode *n = readMathMLFromString( "" - " " - " " " 1 " - " 4.0 " - " 4.1 2 " - " 4.1 2 " - " " "" ); - ASTNodeLevels node_levels = n->getListOfNodesWithLevel(); - - printNodeLevels(node_levels); fail_unless(n != NULL); - fail_unless(n->getNumChildren() == 2); - fail_unless(n->getChild(0)->getChild(1)->getType() == AST_RATIONAL); - //fail_unless(n->getChild(1)->getType() == AST_REAL); - //fail_unless(n->getChild(2)->getType() == AST_REAL_E); - //fail_unless(n->getChild(3)->getType() == AST_RATIONAL); - - //n->refactorNumbers(); - - //fail_unless(n->getChild(0)->getType() == AST_REAL); - //fail_unless(n->getChild(1)->getType() == AST_REAL); - //fail_unless(n->getChild(2)->getType() == AST_REAL); - //fail_unless(n->getChild(3)->getType() == AST_REAL); - //fail_unless(util_isEqual(n->getChild(0)->getValue(), 1.0)); - //fail_unless(util_isEqual(n->getChild(1)->getValue(), 4.0)); - //fail_unless(util_isEqual(n->getChild(2)->getValue(), 410.0)); - //fail_unless(util_isEqual(n->getChild(3)->getValue(), 2.05)); + fail_unless(n->getType() == AST_INTEGER); + + n->refactorNumbers(); + + fail_unless(n->getType() == AST_REAL); + fail_unless(util_isEqual(n->getValue(), 1.0)); } END_TEST +START_TEST(test_refactor_numbers_real) +{ + ASTNode* n = readMathMLFromString( + "" + " 4.0 " + "" + ); + + fail_unless(n != NULL); + fail_unless(n->getType() == AST_REAL); + + n->refactorNumbers(); + + fail_unless(n->getType() == AST_REAL); + fail_unless(util_isEqual(n->getValue(), 4.0)); +} +END_TEST + +START_TEST(test_refactor_numbers_e_notation) +{ + ASTNode* n = readMathMLFromString( + "" + " 4.1 2 " + "" + ); + + fail_unless(n != NULL); + fail_unless(n->getType() == AST_REAL_E); + + n->refactorNumbers(); + + fail_unless(n->getType() == AST_REAL); + fail_unless(util_isEqual(n->getValue(), 410)); +} +END_TEST + +START_TEST(test_refactor_numbers_rational) +{ + ASTNode* n = readMathMLFromString( + "" + " 4 2 " + "" + ); + + fail_unless(n != NULL); + fail_unless(n->getType() == AST_RATIONAL); + + n->refactorNumbers(); + fail_unless(n->getType() == AST_REAL); + fail_unless(util_isEqual(n->getValue(), 2.0)); +} +END_TEST + +START_TEST(test_refactor_numbers_encompass_unary_minus_1) +{ + ASTNode* n = readMathMLFromString( + "" + " " + " " + " 4.0 " + " " + "" + ); + + fail_unless(n != NULL); + fail_unless(n->getType() == AST_MINUS); + fail_unless(n->getNumChildren() == 1); + + // replace -(4) with -4 + n->encompassUnaryMinus(); + + fail_unless(n->getType() == AST_REAL); + fail_unless(util_isEqual(n->getValue(), -4.0)); +} +END_TEST + +START_TEST(test_refactor_numbers_encompass_unary_minus_2) +{ + ASTNode* n = readMathMLFromString( + "" + " " + " " + " " + " " + " 4.0 " + " x " + " " + " " + "" + ); + + fail_unless(n != NULL); + fail_unless(n->getType() == AST_MINUS); + fail_unless(n->getNumChildren() == 1); + + // replace -(2*a) with -2*a or -(2/a) with -2/a + n->encompassUnaryMinus(); + + fail_unless(n->getType() == AST_TIMES); + fail_unless(n->getNumChildren() == 2); + + fail_unless(util_isEqual(n->getChild(0)->getValue(), -4.0)); + fail_unless(n->getChild(1)->getType() == AST_NAME); +} +END_TEST + +START_TEST(test_refactor_numbers_encompass_unary_minus_3) +{ + ASTNode* n = readMathMLFromString( + "" + " " + " " + " " + " " + " a " + " b " + " " + " " + "" + ); + + fail_unless(n != NULL); + fail_unless(n->getType() == AST_MINUS); + fail_unless(n->getNumChildren() == 1); + + // replace -(a*b) with -1*a*b + n->encompassUnaryMinus(); + + fail_unless(n->getType() == AST_TIMES); + fail_unless(n->getNumChildren() == 3); + + fail_unless(util_isEqual(n->getChild(0)->getValue(), -1.0)); + fail_unless(n->getChild(1)->getType() == AST_NAME); + fail_unless(n->getChild(2)->getType() == AST_NAME); +} +END_TEST + +START_TEST(test_refactor_numbers_encompass_unary_minus_4) +{ + ASTNode* n = readMathMLFromString( + "" + " " + " " + " " + " " + " a " + " b " + " " + " " + "" + ); + + fail_unless(n != NULL); + fail_unless(n->getType() == AST_MINUS); + fail_unless(n->getNumChildren() == 1); + + // replace -(a/b) with -1*a/b + n->encompassUnaryMinus(); + + fail_unless(n->getType() == AST_DIVIDE); + fail_unless(n->getNumChildren() == 2); + + fail_unless(n->getChild(0)->getType() == AST_TIMES); + fail_unless(util_isEqual(n->getChild(0)->getChild(0)->getValue(), -1.0)); + fail_unless(n->getChild(0)->getChild(1)->getType() == AST_NAME); + fail_unless(n->getChild(1)->getType() == AST_NAME); +} +END_TEST + +START_TEST(test_refactor_create_non_binary_tree_1) +{ + ASTNode* n = readMathMLFromString( + "" + " " + " " + " a " + " b " + " c " + " d " + " " + "" + ); + + fail_unless(n != NULL); + fail_unless(n->getType() == AST_TIMES); + fail_unless(n->getNumChildren() == 2); + fail_unless(n->getChild(0)->getType() == AST_TIMES); + fail_unless(n->getChild(1)->getType() == AST_NAME); + fail_unless(n->getChild(0)->getChild(0)->getType() == AST_TIMES); + fail_unless(n->getChild(0)->getChild(1)->getType() == AST_NAME); + + n->createNonBinaryTree(); + + fail_unless(n->getType() == AST_TIMES); + fail_unless(n->getNumChildren() == 4); + + fail_unless(n->getChild(0)->getType() == AST_NAME); + fail_unless(n->getChild(1)->getType() == AST_NAME); + fail_unless(n->getChild(2)->getType() == AST_NAME); + fail_unless(n->getChild(3)->getType() == AST_NAME); +} +END_TEST + +START_TEST(test_refactor_create_non_binary_tree_2) +{ + ASTNode* n = readMathMLFromString( + "" + " " + " " + " a " + " b " + " c " + " " + "" + ); + + fail_unless(n != NULL); + fail_unless(n->getType() == AST_PLUS); + fail_unless(n->getNumChildren() == 2); + fail_unless(n->getChild(0)->getType() == AST_PLUS); + fail_unless(n->getChild(1)->getType() == AST_NAME); + fail_unless(n->getChild(0)->getChild(0)->getType() == AST_NAME); + fail_unless(n->getChild(0)->getChild(1)->getType() == AST_NAME); + + n->createNonBinaryTree(); + + fail_unless(n->getType() == AST_PLUS); + fail_unless(n->getNumChildren() == 3); + + fail_unless(n->getChild(0)->getType() == AST_NAME); + fail_unless(n->getChild(1)->getType() == AST_NAME); + fail_unless(n->getChild(2)->getType() == AST_NAME); +} +END_TEST + +START_TEST(test_refactor_reorder_arguments_1) +{ + ASTNode* n = readMathMLFromString( + "" + " " + " " + " 4.3 " + " 2.8 " + " " + "" + ); + + fail_unless(n != NULL); + fail_unless(n->getType() == AST_PLUS); + fail_unless(n->getNumChildren() == 2); + fail_unless(formulas_equal("4.3 + 2.8", n)); + + n->reorderArguments(); + + fail_unless(n->getType() == AST_REAL); + fail_unless(n->getNumChildren() == 0); + fail_unless(util_isEqual(n->getValue(), 7.1)); + fail_unless(formulas_equal("7.1", n)); + +} +END_TEST + +START_TEST(test_refactor_reorder_arguments_2) +{ + ASTNode* n = readMathMLFromString( + "" + " " + " " + " a " + " 2.8 " + " " + "" + ); + + fail_unless(n != NULL); + fail_unless(n->getType() == AST_PLUS); + fail_unless(n->getNumChildren() == 2); + fail_unless(formulas_equal("a + 2.8", n)); + + n->reorderArguments(); + + fail_unless(n->getType() == AST_PLUS); + fail_unless(n->getNumChildren() == 2); + fail_unless(formulas_equal("2.8 + a", n)); + +} +END_TEST + +START_TEST(test_refactor_reorder_arguments_3) +{ + ASTNode* n = readMathMLFromString( + "" + " " + " " + " 1 " + " a " + " " + "" + ); + + fail_unless(n != NULL); + fail_unless(n->getType() == AST_TIMES); + fail_unless(n->getNumChildren() == 2); + fail_unless(formulas_equal("1 * a", n)); + + n->reorderArguments(); + + fail_unless(n->getType() == AST_NAME); + fail_unless(n->getNumChildren() == 0); + fail_unless(formulas_equal("a", n)); + +} +END_TEST + +START_TEST(test_refactor_reorder_arguments_4) +{ + ASTNode* n = readMathMLFromString( + "" + " " + " " + " a " + " a " + " " + "" + ); + + fail_unless(n != NULL); + fail_unless(n->getType() == AST_MINUS); + fail_unless(n->getNumChildren() == 2); + fail_unless(formulas_equal("a - a", n)); + + n->reorderArguments(); + + fail_unless(n->getType() == AST_REAL); + fail_unless(n->getNumChildren() == 0); + fail_unless(formulas_equal("0", n)); + fail_unless(util_isEqual(n->getValue(), 0.0)); + +} +END_TEST Suite * create_suite_TestRefactoringFunctions() @@ -109,8 +448,22 @@ create_suite_TestRefactoringFunctions() Suite *suite = suite_create("TestRefactoringFunctions"); TCase *tcase = tcase_create("TestRefactoringFunctions"); - tcase_add_test(tcase, test_refactor_numbers); + //tcase_add_test(tcase, test_refactor_numbers_integer); + ////tcase_add_test(tcase, test_refactor_numbers_real); + //tcase_add_test(tcase, test_refactor_numbers_e_notation); + //tcase_add_test(tcase, test_refactor_numbers_rational); + //tcase_add_test(tcase, test_refactor_numbers_encompass_unary_minus_1); + //tcase_add_test(tcase, test_refactor_numbers_encompass_unary_minus_2); + //tcase_add_test(tcase, test_refactor_numbers_encompass_unary_minus_3); + //tcase_add_test(tcase, test_refactor_numbers_encompass_unary_minus_4); + //tcase_add_test(tcase, test_refactor_create_non_binary_tree_1); + //tcase_add_test(tcase, test_refactor_create_non_binary_tree_2); + tcase_add_test(tcase, test_refactor_reorder_arguments_1); + tcase_add_test(tcase, test_refactor_reorder_arguments_2); + tcase_add_test(tcase, test_refactor_reorder_arguments_3); + tcase_add_test(tcase, test_refactor_reorder_arguments_4); + // TESTED SIMPLIFY UP TO A + A suite_add_tcase(suite, tcase);