Home | History | Annotate | Download | only in ADT
      1 //===- llvm/unittest/ADT/SmallPtrSetTest.cpp ------------------------------===//
      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 // SmallPtrSet unit tests.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 
     14 #include "gtest/gtest.h"
     15 #include "llvm/ADT/SmallPtrSet.h"
     16 
     17 using namespace llvm;
     18 
     19 // SmallPtrSet swapping test.
     20 TEST(SmallPtrSetTest, GrowthTest) {
     21   int i;
     22   int buf[8];
     23   for(i=0; i<8; ++i) buf[i]=0;
     24 
     25 
     26   SmallPtrSet<int *, 4> s;
     27   typedef SmallPtrSet<int *, 4>::iterator iter;
     28 
     29   s.insert(&buf[0]);
     30   s.insert(&buf[1]);
     31   s.insert(&buf[2]);
     32   s.insert(&buf[3]);
     33   EXPECT_EQ(4U, s.size());
     34 
     35   i = 0;
     36   for(iter I=s.begin(), E=s.end(); I!=E; ++I, ++i)
     37       (**I)++;
     38   EXPECT_EQ(4, i);
     39   for(i=0; i<8; ++i)
     40       EXPECT_EQ(i<4?1:0,buf[i]);
     41 
     42   s.insert(&buf[4]);
     43   s.insert(&buf[5]);
     44   s.insert(&buf[6]);
     45   s.insert(&buf[7]);
     46 
     47   i = 0;
     48   for(iter I=s.begin(), E=s.end(); I!=E; ++I, ++i)
     49       (**I)++;
     50   EXPECT_EQ(8, i);
     51   s.erase(&buf[4]);
     52   s.erase(&buf[5]);
     53   s.erase(&buf[6]);
     54   s.erase(&buf[7]);
     55   EXPECT_EQ(4U, s.size());
     56 
     57   i = 0;
     58   for(iter I=s.begin(), E=s.end(); I!=E; ++I, ++i)
     59       (**I)++;
     60   EXPECT_EQ(4, i);
     61   for(i=0; i<8; ++i)
     62       EXPECT_EQ(i<4?3:1,buf[i]);
     63 
     64   s.clear();
     65   for(i=0; i<8; ++i) buf[i]=0;
     66   for(i=0; i<128; ++i) s.insert(&buf[i%8]); // test repeated entires
     67   EXPECT_EQ(8U, s.size());
     68   for(iter I=s.begin(), E=s.end(); I!=E; ++I, ++i)
     69       (**I)++;
     70   for(i=0; i<8; ++i)
     71       EXPECT_EQ(1,buf[i]);
     72 }
     73 
     74 
     75 TEST(SmallPtrSetTest, SwapTest) {
     76   int buf[10];
     77 
     78   SmallPtrSet<int *, 2> a;
     79   SmallPtrSet<int *, 2> b;
     80 
     81   a.insert(&buf[0]);
     82   a.insert(&buf[1]);
     83   b.insert(&buf[2]);
     84 
     85   std::swap(a, b);
     86 
     87   EXPECT_EQ(1U, a.size());
     88   EXPECT_EQ(2U, b.size());
     89   EXPECT_TRUE(a.count(&buf[2]));
     90   EXPECT_TRUE(b.count(&buf[0]));
     91   EXPECT_TRUE(b.count(&buf[1]));
     92 
     93   b.insert(&buf[3]);
     94   std::swap(a, b);
     95 
     96   EXPECT_EQ(3U, a.size());
     97   EXPECT_EQ(1U, b.size());
     98   EXPECT_TRUE(a.count(&buf[0]));
     99   EXPECT_TRUE(a.count(&buf[1]));
    100   EXPECT_TRUE(a.count(&buf[3]));
    101   EXPECT_TRUE(b.count(&buf[2]));
    102 
    103   std::swap(a, b);
    104 
    105   EXPECT_EQ(1U, a.size());
    106   EXPECT_EQ(3U, b.size());
    107   EXPECT_TRUE(a.count(&buf[2]));
    108   EXPECT_TRUE(b.count(&buf[0]));
    109   EXPECT_TRUE(b.count(&buf[1]));
    110   EXPECT_TRUE(b.count(&buf[3]));
    111 
    112   a.insert(&buf[4]);
    113   a.insert(&buf[5]);
    114   a.insert(&buf[6]);
    115 
    116   std::swap(b, a);
    117 
    118   EXPECT_EQ(3U, a.size());
    119   EXPECT_EQ(4U, b.size());
    120   EXPECT_TRUE(b.count(&buf[2]));
    121   EXPECT_TRUE(b.count(&buf[4]));
    122   EXPECT_TRUE(b.count(&buf[5]));
    123   EXPECT_TRUE(b.count(&buf[6]));
    124   EXPECT_TRUE(a.count(&buf[0]));
    125   EXPECT_TRUE(a.count(&buf[1]));
    126   EXPECT_TRUE(a.count(&buf[3]));
    127 }
    128