Ejemplo n.º 1
0
TEST_F(GuardObjectTest, SharedTests) {
  shared_object<int> so1; //Default Constructor
  ASSERT_FALSE(so1.initialized()); //default initialization test

  int val = 0;
  so1 = 1; //object assignment
  ASSERT_TRUE(so1.initialized(val)); //atomic assignment & initialization test
  ASSERT_TRUE(val == 1);

  val = 2;
  shared_object<int> so2(val); //object copy constructor
  val = 1;
  ASSERT_TRUE(so2.initialized(val));
  ASSERT_TRUE(val == 2);

  so1.reset(); //reset
  ASSERT_FALSE(so1.initialized());
  so1.reset(); //reset is idempotent

  so1 = so2; //assignment between referenced objects
  ASSERT_TRUE(so1.initialized());
  ASSERT_TRUE(so1 == 2);

  so2 = 3;
  shared_object<int> so3(so2); //shared_object copy constructor
  ASSERT_TRUE(so3.initialized());
  val = so3; //implicit cast to copy
  ASSERT_TRUE(val == 3);
  ASSERT_TRUE(so2 == 3); //Shared reference is also modified
  ASSERT_TRUE(so1 == 2); //Separate reference is not modified

  so2 = so3; //Avoid deadlock in self-assignment
  ASSERT_TRUE(so2 == 3);
}
Ejemplo n.º 2
0
TEST_F(GuardObjectTest, UnlockTests) {
  shared_object<int> so1; //Default Constructor
  ASSERT_FALSE(so1.initialized()); //default initialization test
  {
    unlock_object<int> so1_unlock1(so1); //successful unlock
    ASSERT_TRUE(static_cast<bool>(so1_unlock1));

    unlock_object<int> so1_unlock2(so1, true); //prevented try_unlock
    ASSERT_FALSE(static_cast<bool>(so1_unlock2));

    *so1_unlock1 = 1; //object assignment
  } //delete one empty and one held unlock_object instance
  int val = 0;
  ASSERT_TRUE(so1.initialized(val)); //condition for unlock_object construction
  ASSERT_TRUE(val == 1);

  shared_object<int> so2(2); //Default Constructor
  {
    unlock_object<int> so_unlock3(so1); //successful unlock
    ASSERT_TRUE(static_cast<bool>(so_unlock3));
    ASSERT_TRUE(*so_unlock3 == 1);

    so_unlock3.reset(so2); //reset with argument
    ASSERT_TRUE(static_cast<bool>(so_unlock3));
    ASSERT_TRUE(*so_unlock3 == 2);

    so_unlock3.reset(so2); //reset is idempotent
    ASSERT_TRUE(static_cast<bool>(so_unlock3));
    ASSERT_TRUE(*so_unlock3 == 2);
  }
}
Ejemplo n.º 3
0
TEST(generateExpression, integrate_ode) {
  static const bool user_facing = true;
  std::stringstream msgs;

  stan::lang::integrate_ode so; // null ctor should work and not raise error

  std::string integration_function_name = "bar";
  std::string system_function_name = "foo";
  stan::lang::variable y0("y0_var_name");
  y0.set_type(stan::lang::bare_array_type(stan::lang::double_type()));
  stan::lang::variable t0("t0_var_name");
  t0.set_type(stan::lang::double_type());
  stan::lang::variable ts("ts_var_name");
  ts.set_type(stan::lang::bare_array_type(stan::lang::double_type()));
  stan::lang::variable theta("theta_var_name");
  theta.set_type(stan::lang::bare_array_type(stan::lang::double_type()));
  stan::lang::variable x("x_var_name");
  x.set_type(stan::lang::bare_array_type(stan::lang::double_type()));
  stan::lang::variable x_int("x_int_var_name");
  x.set_type(stan::lang::bare_array_type(stan::lang::int_type()));
  stan::lang::integrate_ode so2(integration_function_name, system_function_name,
                    y0, t0, ts, theta, x, x_int);
  stan::lang::expression e1(so2);

  generate_expression(e1, user_facing, msgs);
  EXPECT_EQ(msgs.str(),
            "bar(foo_functor__(), y0_var_name, t0_var_name, ts_var_name, "
            "theta_var_name, x_var_name, x_int_var_name, pstream__)");

}
Ejemplo n.º 4
0
void Genetic::normal_cross(Answer * fa, Answer * mo) { // 常规交叉法
  int pos = rand() % ncity;
  // std::cout << "pos: " << pos << std::endl;
  Answer so1(*fa);
  Answer so2(*mo);
  double rev = Answer::rand_0_1();
  if (rev < 0.8) {
    fa->reverse();
    mo->reverse();
  }

  int * fa_occur = new int[ncity];
  int * mo_occur = new int[ncity];
  for (size_t i = 0; i < ncity; i++) {
    fa_occur[i] = mo_occur[i] = 0;
  }

  for (size_t i = 0; i < pos; i++) {
    // std::cout << (*fa)[i] << ' ' << (*mo)[i] << std::endl;
    so1.setAt(i, (*fa)[i]);
    so2.setAt(i, (*mo)[i]);
    // std::cout << so1[i] << ' ' << so2[i] << std::endl;
    fa_occur[ so1[i] ] = 1;
    mo_occur[ so2[i] ] = 1;
  }

  int mpos = pos;
  for (size_t i = 0; i < ncity && (pos < ncity || mpos < ncity); i++) {
    // when pos or mpos < ncity, loop should not stop
    if (!fa_occur[ (*mo)[i] ]) {
      so1.setAt(pos++, (*mo)[i]);
      fa_occur[ (*mo)[i] ] = 1;
    }

    if (!mo_occur[ (*fa)[i] ]) {
      so2.setAt(mpos++, (*fa)[i]);
      mo_occur[ (*fa)[i] ] = 1;
    }
  }

  delete [] fa_occur;
  delete [] mo_occur;
  *fa = so1;
  *mo = so2;
}
Ejemplo n.º 5
0
TEST(generateExpression, algebra_solver) {
  static const bool user_facing = true;
  std::stringstream msgs;

  stan::lang::algebra_solver so;  // null ctor should work and not raise error
  std::string system_function_name = "bronzino";
  stan::lang::variable y("y_var_name");
  y.set_type(stan::lang::vector_type());
  stan::lang::variable theta("theta_var_name");
  theta.set_type(stan::lang::vector_type());
  stan::lang::variable x_r("x_r_r_var_name");
  x_r.set_type(stan::lang::bare_array_type(stan::lang::double_type()));
  stan::lang::variable x_i("x_i_var_name");
  x_i.set_type(stan::lang::bare_array_type(stan::lang::int_type()));
  stan::lang::algebra_solver so2(system_function_name, y, theta, x_r, x_i);
  stan::lang::expression e1 = so2;

  generate_expression(e1, user_facing, msgs);
  EXPECT_EQ(msgs.str(),
            "algebra_solver(bronzino_functor__(), y_var_name, "
            "theta_var_name, x_r_r_var_name, x_i_var_name, pstream__)");
}