• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.
TEST(SmallPtrSetTest,GrowthTest)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 
TEST(SmallPtrSetTest,SwapTest)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