static void test_sub_expr() { char c_str[100] = "4 - x"; total++; cout << "test_sub_expr:\t\t\t\t"; Math_Parser *p = new Math_Parser(c_str); Expression *e = p->Parse_Expression(); if (!dynamic_cast<Term_Expr *>(e)) { cout << "FAIL\r\n"; delete p; delete e; return; } Term_Expr *t = dynamic_cast<Term_Expr *>(e); if (!dynamic_cast<Constant *>(t->LHS)) { cout << "FAIL\r\n"; delete p; delete e; return; } Constant *c = dynamic_cast<Constant *>(t->LHS); if (c->getValue() != 4 || !dynamic_cast<Sub_Expr *>(t->RHS)) { cout << "FAIL\r\n"; delete p; delete e; return; } Sub_Expr *m = dynamic_cast<Sub_Expr *>(t->RHS); if (!dynamic_cast<Term_Expr *>(m->RHS)) { cout << "FAIL\r\n"; delete p; delete e; return; } t = dynamic_cast<Term_Expr *>(m->RHS); if (!dynamic_cast<Variable *>(t->LHS) || t->RHS != NULL) { cout << "FAIL\r\n"; delete p; delete e; return; } Variable *v = dynamic_cast<Variable *>(t->LHS); if (v->toString() != "x") { cout << "FAIL\r\n"; delete p; delete e; return; } if (e->toString() != "4 - x") { cout << "FAIL\r\n"; delete p; delete e; return; } cout << "PASS\r\n"; passed++; delete p; delete e; return; }