Beispiel #1
0
// get or create value
Pointer getPointer(Module *M, const char *name, int64_t off)
{
    Value *va;

    MapVector<TestPointer, Pointer>::iterator E = valueMap.end();
    Pointer& p = valueMap[TestPointer(name, off)];

    // if the last operation increased the size of valueMap, then
    // the pointer does not exist
    if (E != valueMap.end()) {
        // use always the same llvm value
        std::map<const char *, Value *>::iterator VI = llvmValues.find(name);
        if (VI == llvmValues.end()) {
            if (strcmp(name, "null") == 0)
                va = ConstantPointerNull::get(llvm::Type::getInt32PtrTy(M->getContext()));
            else
                va = new GlobalVariable(*M, IntegerType::get(M->getContext(), 32),
                                        false,
                                        GlobalValue::CommonLinkage, 0 , name);
            llvmValues.insert(std::make_pair(name, va));
        } else {
            va = VI->second;
        }

	// copy it to map (p is reference)
        p = Pointer(va, off);
    }

    return p;
}
Beispiel #2
0
TEST(MapVectorTest, insert) {
  MapVector<int, int> MV;
  std::pair<MapVector<int, int>::iterator, bool> R;

  R = MV.insert(std::make_pair(1, 2));
  ASSERT_EQ(R.first, MV.begin());
  EXPECT_EQ(R.first->first, 1);
  EXPECT_EQ(R.first->second, 2);
  EXPECT_TRUE(R.second);

  R = MV.insert(std::make_pair(1, 3));
  ASSERT_EQ(R.first, MV.begin());
  EXPECT_EQ(R.first->first, 1);
  EXPECT_EQ(R.first->second, 2);
  EXPECT_FALSE(R.second);

  R = MV.insert(std::make_pair(4, 5));
  ASSERT_NE(R.first, MV.end());
  EXPECT_EQ(R.first->first, 4);
  EXPECT_EQ(R.first->second, 5);
  EXPECT_TRUE(R.second);

  EXPECT_EQ(MV.size(), 2u);
  EXPECT_EQ(MV[1], 2);
  EXPECT_EQ(MV[4], 5);
}
Beispiel #3
0
TEST(MapVectorTest, remove_if) {
  MapVector<int, int> MV;

  MV.insert(std::make_pair(1, 11));
  MV.insert(std::make_pair(2, 12));
  MV.insert(std::make_pair(3, 13));
  MV.insert(std::make_pair(4, 14));
  MV.insert(std::make_pair(5, 15));
  MV.insert(std::make_pair(6, 16));
  ASSERT_EQ(MV.size(), 6u);

  MV.remove_if([](const std::pair<int, int> &Val) { return Val.second % 2; });
  ASSERT_EQ(MV.size(), 3u);
  ASSERT_EQ(MV.find(1), MV.end());
  ASSERT_EQ(MV.find(3), MV.end());
  ASSERT_EQ(MV.find(5), MV.end());
  ASSERT_EQ(MV[2], 12);
  ASSERT_EQ(MV[4], 14);
  ASSERT_EQ(MV[6], 16);
}
Beispiel #4
0
TEST(MapVectorTest, erase) {
  MapVector<int, int> MV;

  MV.insert(std::make_pair(1, 2));
  MV.insert(std::make_pair(3, 4));
  MV.insert(std::make_pair(5, 6));
  ASSERT_EQ(MV.size(), 3u);

  MV.erase(MV.find(1));
  ASSERT_EQ(MV.size(), 2u);
  ASSERT_EQ(MV.find(1), MV.end());
  ASSERT_EQ(MV[3], 4);
  ASSERT_EQ(MV[5], 6);
}