Example #1
0
TEST(IfTest, VersionAfterThenElseWithSingleAnyVar) {
  bool ok;
  Int i = any_int("I");
  If branch(i < 5);
  branch.track(i);

  ok = branch.begin_then();
  EXPECT_TRUE(ok);

  i = i + any_int("A");

  EXPECT_EQ(VZERO + 1, i.get_version());

  ok = branch.begin_else();
  EXPECT_TRUE(ok);

  EXPECT_EQ(VZERO + 2, i.get_version());

  i = i + any_int("A");

  EXPECT_EQ(VZERO + 3, i.get_version());

  branch.end();

  // version increase due to join operation
  EXPECT_EQ(VZERO + 4, i.get_version());
}
Example #2
0
TEST(VersionTest, InitWithValue) {
    Int a = 3;
    Int b = a + 4;

    EXPECT_EQ(0, a.get_version());
    EXPECT_EQ(0, b.get_version());
}
Example #3
0
TEST(VersionTest, SelfAssignmentAfterInit) {
    Int a = 3;
    Int b = any_int("B");
    Char c = 'c';

    EXPECT_EQ(0, a.get_version());
    EXPECT_EQ(0, b.get_version());
    EXPECT_EQ(0, c.get_version());

    a = a;
    b = b;
    c = c;

    EXPECT_EQ(0, a.get_version());
    EXPECT_EQ(0, b.get_version());
    EXPECT_EQ(0, c.get_version());
}
Example #4
0
TEST(VersionTest, InitWithVarRequiringCast) {
    Bool a = any_bool("A");
    Char b = any_char("B");
    Int c = b;

    EXPECT_EQ(0, a.get_version());
    EXPECT_EQ(0, b.get_version());
    EXPECT_EQ(0, c.get_version());
}
Example #5
0
TEST(VersionTest, InitWithAny) {
    Bool a = any_bool("A");
    Char b = any_char("B");
    Int c = any_int("C");

    EXPECT_EQ(0, a.get_version());
    EXPECT_EQ(0, b.get_version());
    EXPECT_EQ(0, c.get_version());
}
Example #6
0
TEST(VersionTest, InitWithConcrete) {
    Bool a = true;
    Bool b = true;
    Char c = 'a';
    Int d = 3;

    EXPECT_EQ(0, a.get_version());
    EXPECT_EQ(0, b.get_version());
    EXPECT_EQ(0, c.get_version());
    EXPECT_EQ(0, d.get_version());
}
Example #7
0
TEST(LoopTest, VersionAfterUnwind1xWithSingleVarWithAny) {
  bool ok;
  Int i = any_int("I");
  Loop loop(1u);
  loop.track(i);

  // 1x
  ok = loop.unwind(i < 5);
  EXPECT_TRUE(ok);

  i = i + any_int("A");

  EXPECT_EQ(VZERO + 1, i.get_version());

  // 2x
  ok = loop.unwind(any_bool("ANY"));
  EXPECT_FALSE(ok);

  // version increase due to join operation
  EXPECT_EQ(VZERO + 2, i.get_version());
}
Example #8
0
TEST(VersionTest, SelfAssignmentAfterOperations) {
    Int a = 3;
    Int b = any_int("B");
    Char c = 'c';

    EXPECT_EQ(0, a.get_version());
    EXPECT_EQ(0, b.get_version());
    EXPECT_EQ(0, c.get_version());

    // some operations
    a = a + b + c;
    b = a + b + c;
    b = 5;
    c = c + 'x';
    c = 'y';
    c = 'z' + c;

    EXPECT_EQ(1, a.get_version());
    EXPECT_EQ(2, b.get_version());
    EXPECT_EQ(3, c.get_version());

    a = a;
    b = b;
    c = c;

    EXPECT_EQ(1, a.get_version());
    EXPECT_EQ(2, b.get_version());
    EXPECT_EQ(3, c.get_version());
}
Example #9
0
TEST(IfTest, VersionAfterThenWithExtraVar) {
  bool ok;
  Int i = any_int("I");
  Int j = any_int("J");

  If branch(i < 5);
  branch.track(i);
  branch.track(j);

  ok = branch.begin_then();
  EXPECT_TRUE(ok);

  i = i + 1;

  EXPECT_EQ(VZERO + 1, i.get_version());
  EXPECT_EQ(VZERO, j.get_version());

  branch.end();

  // version increase due to join operation
  EXPECT_EQ(VZERO + 2, i.get_version());
  EXPECT_EQ(VZERO, j.get_version());
}
Example #10
0
TEST(IfTest, VersionAfterThenElseWithExtraVar) {
  bool ok;
  Int i = any_int("I");
  Int j = any_int("J");

  If branch(i < 5);
  branch.track(i);
  branch.track(j);

  ok = branch.begin_then();
  EXPECT_TRUE(ok);

  i = i + 1;

  EXPECT_EQ(VZERO + 1, i.get_version());

  EXPECT_EQ(VZERO, j.get_version());

  ok = branch.begin_else();
  EXPECT_TRUE(ok);

  EXPECT_EQ(VZERO + 2, i.get_version());

  // j has not been modified inside the "then" branch.
  EXPECT_EQ(VZERO, j.get_version());

  i = i + 2;

  EXPECT_EQ(VZERO + 3, i.get_version());
  EXPECT_EQ(VZERO, j.get_version());

  branch.end();

  // version increase due to join operation
  EXPECT_EQ(VZERO + 4, i.get_version());

  // j has been neither modified inside the "then" nor "else" branch.
  EXPECT_EQ(VZERO, j.get_version());
}
Example #11
0
TEST(VersionTest, GetVersion) {
    Int a = 3;
    Int b = any_int("B");
    Char c = 'c';

    EXPECT_EQ(0, a.get_version());
    EXPECT_EQ(0, b.get_version());
    EXPECT_EQ(0, c.get_version());

    a = b + 2 + c;

    EXPECT_EQ(1, a.get_version());
    EXPECT_EQ(0, b.get_version());
    EXPECT_EQ(0, c.get_version());

    a = 4 + b + c;

    EXPECT_EQ(2, a.get_version());
    EXPECT_EQ(0, b.get_version());
    EXPECT_EQ(0, c.get_version());

    c = a + b;

    EXPECT_EQ(2, a.get_version());
    EXPECT_EQ(0, b.get_version());
    EXPECT_EQ(1, c.get_version());

    b = 5;

    EXPECT_EQ(2, a.get_version());
    EXPECT_EQ(1, b.get_version());
    EXPECT_EQ(1, c.get_version());

    b = a;

    EXPECT_EQ(2, a.get_version());
    EXPECT_EQ(2, b.get_version());
    EXPECT_EQ(1, c.get_version());

    b = c;

    EXPECT_EQ(2, a.get_version());
    EXPECT_EQ(3, b.get_version());
    EXPECT_EQ(1, c.get_version());
}
Example #12
0
TEST(VersionTest, InitWithValueRequiringCast) {
    Int a = make_value<char>('a');

    EXPECT_EQ(0, a.get_version());
}