inline void linearizeDynamics(const Matrix<X_DIM>& xBar, const Matrix<U_DIM>& uBar, Matrix<X_DIM>& c, Matrix<X_DIM, X_DIM>& A, Matrix<X_DIM, U_DIM>& B, SymmetricMatrix<X_DIM>& M, unsigned int flag) { if (flag & COMPUTE_c) c = f(xBar, uBar); if (flag & COMPUTE_A) A = dfdx(f, xBar, uBar); if (flag & COMPUTE_B) B = dfdu(f, xBar, uBar); if (flag & COMPUTE_M) M = varM(xBar, uBar); }
TEST_F(UnifiedVarRenamerTests, WhenUseDebugNamesIsFalseDoNotUseDebugNames) { // Set-up the module. // // int g; // from debug info // int h; // // void test(int p, int m) { // p has name from debug info // int a; // int b; // from debug info // } // ShPtr<Variable> varG(Variable::create("g", IntType::create(32))); module->addGlobalVar(varG); module->addDebugNameForVar(varG, varG->getName()); ShPtr<Variable> varH(Variable::create("h", IntType::create(32))); module->addGlobalVar(varH); ShPtr<Variable> varP(Variable::create("p", IntType::create(32))); testFunc->addParam(varP); module->addDebugNameForVar(varP, varP->getName()); ShPtr<Variable> varM(Variable::create("m", IntType::create(32))); testFunc->addParam(varM); ShPtr<Variable> varA(Variable::create("a", IntType::create(32))); testFunc->addLocalVar(varA); ShPtr<Variable> varB(Variable::create("b", IntType::create(32))); testFunc->addLocalVar(varB); module->addDebugNameForVar(varB, varB->getName()); ShPtr<VarDefStmt> varDefB(VarDefStmt::create(varB)); ShPtr<VarDefStmt> varDefA(VarDefStmt::create(varA, ShPtr<Expression>(), varDefB)); testFunc->setBody(varDefA); // Setup the renamer (do not use debug names). INSTANTIATE_VAR_NAME_GEN_AND_VAR_RENAMER(UnifiedVarRenamer, false); // Do the renaming. varRenamer->renameVars(module); // We expect the following output: // // int g1; // int g2; // // void test(int a1, int a2) { // int v1; // int v2; // } // // Globals: VarSet globalVarsSet(module->getGlobalVars()); ASSERT_EQ(2, globalVarsSet.size()); // We have to sort the variables to ease the checking. VarVector globalVarsVector(globalVarsSet.begin(), globalVarsSet.end()); sortByName(globalVarsVector); ShPtr<Variable> var1(globalVarsVector[0]); EXPECT_EQ("g1", var1->getName()); ShPtr<Variable> var2(globalVarsVector[1]); EXPECT_EQ("g2", var2->getName()); // Parameters: VarVector params(testFunc->getParams()); ASSERT_EQ(2, params.size()); ShPtr<Variable> par1(params.front()); EXPECT_EQ("a1", par1->getName()); ShPtr<Variable> par2(params.back()); EXPECT_EQ("a2", par2->getName()); // Locals: EXPECT_EQ("v1", varDefA->getVar()->getName()); EXPECT_EQ("v2", varDefB->getVar()->getName()); }