Пример #1
0
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;
}