Home | History | Annotate | Download | only in ADT
      1 //===- llvm/unittest/ADT/DenseMapMap.cpp - DenseMap unit tests --*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 #include "gtest/gtest.h"
     11 #include "llvm/ADT/DenseMap.h"
     12 
     13 using namespace llvm;
     14 
     15 namespace {
     16 
     17 // Test fixture
     18 class DenseMapTest : public testing::Test {
     19 protected:
     20   DenseMap<uint32_t, uint32_t> uintMap;
     21   DenseMap<uint32_t *, uint32_t *> uintPtrMap;
     22   uint32_t dummyInt;
     23 };
     24 
     25 // Empty map tests
     26 TEST_F(DenseMapTest, EmptyIntMapTest) {
     27   // Size tests
     28   EXPECT_EQ(0u, uintMap.size());
     29   EXPECT_TRUE(uintMap.empty());
     30 
     31   // Iterator tests
     32   EXPECT_TRUE(uintMap.begin() == uintMap.end());
     33 
     34   // Lookup tests
     35   EXPECT_FALSE(uintMap.count(0u));
     36   EXPECT_TRUE(uintMap.find(0u) == uintMap.end());
     37   EXPECT_EQ(0u, uintMap.lookup(0u));
     38 }
     39 
     40 // Empty map tests for pointer map
     41 TEST_F(DenseMapTest, EmptyPtrMapTest) {
     42   // Size tests
     43   EXPECT_EQ(0u, uintPtrMap.size());
     44   EXPECT_TRUE(uintPtrMap.empty());
     45 
     46   // Iterator tests
     47   EXPECT_TRUE(uintPtrMap.begin() == uintPtrMap.end());
     48 
     49   // Lookup tests
     50   EXPECT_FALSE(uintPtrMap.count(&dummyInt));
     51   EXPECT_TRUE(uintPtrMap.find(&dummyInt) == uintPtrMap.begin());
     52   EXPECT_EQ(0, uintPtrMap.lookup(&dummyInt));
     53 }
     54 
     55 // Constant map tests
     56 TEST_F(DenseMapTest, ConstEmptyMapTest) {
     57   const DenseMap<uint32_t, uint32_t> & constUintMap = uintMap;
     58   const DenseMap<uint32_t *, uint32_t *> & constUintPtrMap = uintPtrMap;
     59   EXPECT_EQ(0u, constUintMap.size());
     60   EXPECT_EQ(0u, constUintPtrMap.size());
     61   EXPECT_TRUE(constUintMap.empty());
     62   EXPECT_TRUE(constUintPtrMap.empty());
     63   EXPECT_TRUE(constUintMap.begin() == constUintMap.end());
     64   EXPECT_TRUE(constUintPtrMap.begin() == constUintPtrMap.end());
     65 }
     66 
     67 // A map with a single entry
     68 TEST_F(DenseMapTest, SingleEntryMapTest) {
     69   uintMap[0] = 1;
     70 
     71   // Size tests
     72   EXPECT_EQ(1u, uintMap.size());
     73   EXPECT_FALSE(uintMap.begin() == uintMap.end());
     74   EXPECT_FALSE(uintMap.empty());
     75 
     76   // Iterator tests
     77   DenseMap<uint32_t, uint32_t>::iterator it = uintMap.begin();
     78   EXPECT_EQ(0u, it->first);
     79   EXPECT_EQ(1u, it->second);
     80   ++it;
     81   EXPECT_TRUE(it == uintMap.end());
     82 
     83   // Lookup tests
     84   EXPECT_TRUE(uintMap.count(0u));
     85   EXPECT_TRUE(uintMap.find(0u) == uintMap.begin());
     86   EXPECT_EQ(1u, uintMap.lookup(0u));
     87   EXPECT_EQ(1u, uintMap[0]);
     88 }
     89 
     90 // Test clear() method
     91 TEST_F(DenseMapTest, ClearTest) {
     92   uintMap[0] = 1;
     93   uintMap.clear();
     94 
     95   EXPECT_EQ(0u, uintMap.size());
     96   EXPECT_TRUE(uintMap.empty());
     97   EXPECT_TRUE(uintMap.begin() == uintMap.end());
     98 }
     99 
    100 // Test erase(iterator) method
    101 TEST_F(DenseMapTest, EraseTest) {
    102   uintMap[0] = 1;
    103   uintMap.erase(uintMap.begin());
    104 
    105   EXPECT_EQ(0u, uintMap.size());
    106   EXPECT_TRUE(uintMap.empty());
    107   EXPECT_TRUE(uintMap.begin() == uintMap.end());
    108 }
    109 
    110 // Test erase(value) method
    111 TEST_F(DenseMapTest, EraseTest2) {
    112   uintMap[0] = 1;
    113   uintMap.erase(0);
    114 
    115   EXPECT_EQ(0u, uintMap.size());
    116   EXPECT_TRUE(uintMap.empty());
    117   EXPECT_TRUE(uintMap.begin() == uintMap.end());
    118 }
    119 
    120 // Test insert() method
    121 TEST_F(DenseMapTest, InsertTest) {
    122   uintMap.insert(std::make_pair(0u, 1u));
    123   EXPECT_EQ(1u, uintMap.size());
    124   EXPECT_EQ(1u, uintMap[0]);
    125 }
    126 
    127 // Test copy constructor method
    128 TEST_F(DenseMapTest, CopyConstructorTest) {
    129   uintMap[0] = 1;
    130   DenseMap<uint32_t, uint32_t> copyMap(uintMap);
    131 
    132   EXPECT_EQ(1u, copyMap.size());
    133   EXPECT_EQ(1u, copyMap[0]);
    134 }
    135 
    136 // Test assignment operator method
    137 TEST_F(DenseMapTest, AssignmentTest) {
    138   uintMap[0] = 1;
    139   DenseMap<uint32_t, uint32_t> copyMap = uintMap;
    140 
    141   EXPECT_EQ(1u, copyMap.size());
    142   EXPECT_EQ(1u, copyMap[0]);
    143 }
    144 
    145 // A more complex iteration test
    146 TEST_F(DenseMapTest, IterationTest) {
    147   bool visited[100];
    148 
    149   // Insert 100 numbers into the map
    150   for (int i = 0; i < 100; ++i) {
    151     visited[i] = false;
    152     uintMap[i] = 3;
    153   }
    154 
    155   // Iterate over all numbers and mark each one found.
    156   for (DenseMap<uint32_t, uint32_t>::iterator it = uintMap.begin();
    157       it != uintMap.end(); ++it) {
    158     visited[it->first] = true;
    159   }
    160 
    161   // Ensure every number was visited.
    162   for (int i = 0; i < 100; ++i) {
    163     ASSERT_TRUE(visited[i]) << "Entry #" << i << " was never visited";
    164   }
    165 }
    166 
    167 // const_iterator test
    168 TEST_F(DenseMapTest, ConstIteratorTest) {
    169   // Check conversion from iterator to const_iterator.
    170   DenseMap<uint32_t, uint32_t>::iterator it = uintMap.begin();
    171   DenseMap<uint32_t, uint32_t>::const_iterator cit(it);
    172   EXPECT_TRUE(it == cit);
    173 
    174   // Check copying of const_iterators.
    175   DenseMap<uint32_t, uint32_t>::const_iterator cit2(cit);
    176   EXPECT_TRUE(cit == cit2);
    177 }
    178 
    179 }
    180