void AssgNodeTest::testLinks() { AssgNode anode(1); VarNode vnode("x"); OpNode onode("+"); // linkexprnode anode.linkExprNode(&onode); // linkvarnode anode.linkVarNode(&vnode); // getvarnode VarNode* vget = anode.getVarNode(); CPPUNIT_ASSERT_EQUAL(&vnode, vget); string expname = "x"; CPPUNIT_ASSERT_EQUAL(expname, vget->getName()); // getexprnode OpNode* oget = (OpNode*)(anode.getExprNode()); CPPUNIT_ASSERT_EQUAL(&onode, oget); string exponame = "+"; CPPUNIT_ASSERT_EQUAL(exponame, oget->getName()); return; }
void TestOne::testNestedWhileAST() { parser.parse("procedure nestedWhile {while x{ while y{z = 2;}}}"); CPPUNIT_ASSERT(ast->contains("nestedWhile")); ProcNode* procNode = ast->getProcNode("nestedWhile"); CPPUNIT_ASSERT(procNode->hasChildren()); StmtLstNode* stmtLst = procNode->getStmtLstNode(); CPPUNIT_ASSERT(stmtLst->hasChildren()); CPPUNIT_ASSERT(stmtLst->getChildren().at(0)->getNodeType() == WHILE_STMT_); WhileNode* firstWhile = (WhileNode*)stmtLst->getChildren().at(0); CPPUNIT_ASSERT(firstWhile->getChildren().size() == 2); CPPUNIT_ASSERT(firstWhile->getVarNode()->getName() == "x"); CPPUNIT_ASSERT(firstWhile->getStmtNum() == 1); StmtLstNode* firstWhileStmtLst = firstWhile->getStmtLstNode(); CPPUNIT_ASSERT(firstWhileStmtLst->hasChildren()); CPPUNIT_ASSERT(firstWhileStmtLst->getChildren().size() == 1); WhileNode* secondWhile = (WhileNode*)firstWhileStmtLst->getChildren().at(0); CPPUNIT_ASSERT(secondWhile->getChildren().size() == 2); CPPUNIT_ASSERT(secondWhile->getVarNode()->getName() == "y"); CPPUNIT_ASSERT(secondWhile->getStmtNum() == 2); StmtLstNode* secondWhileStmtLst = secondWhile->getStmtLstNode(); CPPUNIT_ASSERT(secondWhileStmtLst->hasChildren()); CPPUNIT_ASSERT(secondWhileStmtLst->getChildren().size() == 1); CPPUNIT_ASSERT(secondWhileStmtLst->getChildren().at(0)->getNodeType() == ASSIGN_STMT_); AssgNode* assign = (AssgNode*)secondWhileStmtLst->getChildren().at(0); CPPUNIT_ASSERT(assign->hasChildren()); CPPUNIT_ASSERT(assign->getChildren().size() == 2); VarNode* modifiedVar = (VarNode*)assign->getChildren().at(0); CPPUNIT_ASSERT(modifiedVar->getName() == "z"); ConstNode* constant = (ConstNode*)assign->getChildren().at(1); CPPUNIT_ASSERT(constant->getName() == "2"); }
// [<type> <name>] void visit( VarNode aNode ) { std::cout << " [" << show( aNode.getType() ) << " " << aNode.getName() << "]"; }