TEST(generateExpression, index_op) { static const bool user_facing = true; std::stringstream msgs; // expr: row_vector stan::lang::double_literal dblLit(5.1); dblLit.string_ = "5.1"; stan::lang::expression e1 = dblLit; std::vector<stan::lang::expression> elements; elements.push_back(e1); elements.push_back(e1); stan::lang::row_vector_expr rv1(elements); stan::lang::expression e2 = rv1; // dimensions: vector of vector of dimensions std::vector<std::vector<stan::lang::expression> > dimss; std::vector<stan::lang::expression> dim; dim.push_back(stan::lang::int_literal(1)); dimss.push_back(dim); stan::lang::index_op i_op(e2, dimss); stan::lang::expression e3 = i_op; // result is index into row_vector generate_expression(e3, user_facing, msgs); EXPECT_NE(msgs.str().find("stan::math::to_row_vector"), std::string::npos); EXPECT_NE(msgs.str().find("stan::math::array_builder<double"), std::string::npos); EXPECT_NE(msgs.str().find("add(5.1).array()"), std::string::npos); EXPECT_NE(msgs.str().find("[1]"), std::string::npos); }
/* Execute 1 CPU cycle. */ void cpu_step(cpu_state* state) { state->meta.old_pc = state->pc; /* Fetch instruction, increase PC. */ state->i = *(instr*)(&state->m[state->pc]); state->pc += 4; /* Call function pointer table entry */ (*op_table[i_op(state->i)])(state); /* Update cycles. */ ++state->meta.cycles; ++state->meta.target_cycles; }