Disable unittests/ADT/BitVectorTest on PPC Darwin.
[oota-llvm.git] / unittests / ADT / BitVectorTest.cpp
1 //===- llvm/unittest/ADT/BitVectorTest.cpp - BitVector tests --------------===//
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 #ifndef XFAIL
11 #include "llvm/ADT/BitVector.h"
12 #include "gtest/gtest.h"
13
14 using namespace llvm;
15
16 namespace {
17
18 TEST(BitVectorTest, TrivialOperation) {
19   BitVector Vec;
20   EXPECT_EQ(0U, Vec.count());
21   EXPECT_EQ(0U, Vec.size());
22   EXPECT_FALSE(Vec.any());
23   EXPECT_TRUE(Vec.none());
24   EXPECT_TRUE(Vec.empty());
25
26   Vec.resize(5, true);
27   EXPECT_EQ(5U, Vec.count());
28   EXPECT_EQ(5U, Vec.size());
29   EXPECT_TRUE(Vec.any());
30   EXPECT_FALSE(Vec.none());
31   EXPECT_FALSE(Vec.empty());
32
33   Vec.resize(11);
34   EXPECT_EQ(5U, Vec.count());
35   EXPECT_EQ(11U, Vec.size());
36   EXPECT_TRUE(Vec.any());
37   EXPECT_FALSE(Vec.none());
38   EXPECT_FALSE(Vec.empty());
39
40   BitVector Inv = ~Vec;
41   EXPECT_EQ(6U, Inv.count());
42   EXPECT_EQ(11U, Inv.size());
43   EXPECT_TRUE(Inv.any());
44   EXPECT_FALSE(Inv.none());
45   EXPECT_FALSE(Inv.empty());
46
47   EXPECT_FALSE(Inv == Vec);
48   EXPECT_TRUE(Inv != Vec);
49   Vec = ~Vec;
50   EXPECT_TRUE(Inv == Vec);
51   EXPECT_FALSE(Inv != Vec);
52
53   // Add some "interesting" data to Vec.
54   Vec.resize(23, true);
55   Vec.resize(25, false);
56   Vec.resize(26, true);
57   Vec.resize(29, false);
58   Vec.resize(33, true);
59   Vec.resize(61, false);
60   unsigned Count = 0;
61   for (unsigned i = Vec.find_first(); i != -1u; i = Vec.find_next(i)) {
62     ++Count;
63     EXPECT_TRUE(Vec[i]);
64     EXPECT_TRUE(Vec.test(i));
65   }
66   EXPECT_EQ(Count, Vec.count());
67   EXPECT_EQ(Count, 23u);
68   EXPECT_FALSE(Vec[0]);
69   EXPECT_TRUE(Vec[32]);
70   EXPECT_FALSE(Vec[60]);
71
72   BitVector Copy = Vec;
73   BitVector Alt(3, false);
74   Alt.resize(6, true);
75   std::swap(Alt, Vec);
76   EXPECT_TRUE(Copy == Alt);
77   EXPECT_TRUE(Vec.size() == 6);
78   EXPECT_TRUE(Vec.count() == 3);
79   EXPECT_TRUE(Vec.find_first() == 3);
80   std::swap(Copy, Vec);
81
82   // Add some more "interesting" data.
83   Vec.resize(68, true);
84   Vec.resize(78, false);
85   Vec.resize(89, true);
86   Vec.resize(90, false);
87   Vec.resize(91, true);
88   Vec.resize(130, false);
89   Count = 0;
90   for (unsigned i = Vec.find_first(); i != -1u; i = Vec.find_next(i)) {
91     ++Count;
92     EXPECT_TRUE(Vec[i]);
93     EXPECT_TRUE(Vec.test(i));
94   }
95   EXPECT_EQ(Count, Vec.count());
96   EXPECT_EQ(Count, 42u);
97   EXPECT_FALSE(Vec[0]);
98   EXPECT_TRUE(Vec[32]);
99   EXPECT_FALSE(Vec[60]);
100   EXPECT_FALSE(Vec[129]);
101
102   Vec.flip(60);
103   EXPECT_TRUE(Vec[60]);
104   EXPECT_EQ(Count + 1, Vec.count());
105   Vec.flip(60);
106   EXPECT_FALSE(Vec[60]);
107   EXPECT_EQ(Count, Vec.count());
108
109   Vec.reset(32);
110   EXPECT_FALSE(Vec[32]);
111   EXPECT_EQ(Count - 1, Vec.count());
112   Vec.set(32);
113   EXPECT_TRUE(Vec[32]);
114   EXPECT_EQ(Count, Vec.count());
115
116   Vec.flip();
117   EXPECT_EQ(Vec.size() - Count, Vec.count());
118
119   Vec.reset();
120   EXPECT_EQ(0U, Vec.count());
121   EXPECT_EQ(130U, Vec.size());
122   EXPECT_FALSE(Vec.any());
123   EXPECT_TRUE(Vec.none());
124   EXPECT_FALSE(Vec.empty());
125
126   Inv = ~BitVector();
127   EXPECT_EQ(0U, Inv.count());
128   EXPECT_EQ(0U, Inv.size());
129   EXPECT_FALSE(Inv.any());
130   EXPECT_TRUE(Inv.none());
131   EXPECT_TRUE(Inv.empty());
132
133   Vec.clear();
134   EXPECT_EQ(0U, Vec.count());
135   EXPECT_EQ(0U, Vec.size());
136   EXPECT_FALSE(Vec.any());
137   EXPECT_TRUE(Vec.none());
138   EXPECT_TRUE(Vec.empty());
139 }
140
141 }
142 #endif