Line data Source code
1 : // Copyright 2012 the V8 project authors. All rights reserved.
2 : // Redistribution and use in source and binary forms, with or without
3 : // modification, are permitted provided that the following conditions are
4 : // met:
5 : //
6 : // * Redistributions of source code must retain the above copyright
7 : // notice, this list of conditions and the following disclaimer.
8 : // * Redistributions in binary form must reproduce the above
9 : // copyright notice, this list of conditions and the following
10 : // disclaimer in the documentation and/or other materials provided
11 : // with the distribution.
12 : // * Neither the name of Google Inc. nor the names of its
13 : // contributors may be used to endorse or promote products derived
14 : // from this software without specific prior written permission.
15 : //
16 : // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17 : // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18 : // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19 : // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20 : // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 : // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 : // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 : // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 : // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 : // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 : // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 :
28 : #include <stdlib.h>
29 :
30 : #include "src/v8.h"
31 :
32 : #include "src/bit-vector.h"
33 : #include "test/cctest/cctest.h"
34 :
35 : namespace v8 {
36 : namespace internal {
37 :
38 26644 : TEST(BitVector) {
39 10 : v8::internal::AccountingAllocator allocator;
40 10 : Zone zone(&allocator, ZONE_NAME);
41 : {
42 5 : BitVector v(15, &zone);
43 : v.Add(1);
44 5 : CHECK(v.Contains(1));
45 : v.Remove(0);
46 5 : CHECK(!v.Contains(0));
47 : v.Add(0);
48 : v.Add(1);
49 5 : BitVector w(15, &zone);
50 : w.Add(1);
51 : v.Intersect(w);
52 5 : CHECK(!v.Contains(0));
53 5 : CHECK(v.Contains(1));
54 : }
55 :
56 : {
57 5 : BitVector v(64, &zone);
58 : v.Add(27);
59 : v.Add(30);
60 : v.Add(31);
61 : v.Add(33);
62 : BitVector::Iterator iter(&v);
63 5 : CHECK_EQ(27, iter.Current());
64 5 : iter.Advance();
65 5 : CHECK_EQ(30, iter.Current());
66 5 : iter.Advance();
67 5 : CHECK_EQ(31, iter.Current());
68 5 : iter.Advance();
69 5 : CHECK_EQ(33, iter.Current());
70 5 : iter.Advance();
71 5 : CHECK(iter.Done());
72 : }
73 :
74 : {
75 5 : BitVector v(15, &zone);
76 : v.Add(0);
77 5 : BitVector w(15, &zone);
78 : w.Add(1);
79 : v.Union(w);
80 5 : CHECK(v.Contains(0));
81 5 : CHECK(v.Contains(1));
82 : }
83 :
84 : {
85 5 : BitVector v(15, &zone);
86 : v.Add(0);
87 5 : BitVector w(15, &zone);
88 : w.CopyFrom(v);
89 5 : CHECK(w.Contains(0));
90 : w.Add(1);
91 5 : BitVector u(w, &zone);
92 5 : CHECK(u.Contains(0));
93 5 : CHECK(u.Contains(1));
94 : v.Union(w);
95 5 : CHECK(v.Contains(0));
96 5 : CHECK(v.Contains(1));
97 : }
98 :
99 : {
100 5 : BitVector v(35, &zone);
101 : v.Add(0);
102 5 : BitVector w(35, &zone);
103 : w.Add(33);
104 : v.Union(w);
105 5 : CHECK(v.Contains(0));
106 5 : CHECK(v.Contains(33));
107 : }
108 :
109 : {
110 5 : BitVector v(35, &zone);
111 : v.Add(32);
112 : v.Add(33);
113 5 : BitVector w(35, &zone);
114 : w.Add(33);
115 : v.Intersect(w);
116 5 : CHECK(!v.Contains(32));
117 5 : CHECK(v.Contains(33));
118 5 : BitVector r(35, &zone);
119 : r.CopyFrom(v);
120 5 : CHECK(!r.Contains(32));
121 5 : CHECK(r.Contains(33));
122 : }
123 :
124 : {
125 5 : BitVector v(35, &zone);
126 : v.Add(32);
127 : v.Add(33);
128 5 : CHECK(v.Contains(32));
129 5 : CHECK(v.Contains(33));
130 5 : CHECK(!v.Contains(22));
131 : CHECK(!v.Contains(34));
132 5 : v.Resize(50, &zone);
133 5 : CHECK(v.Contains(32));
134 5 : CHECK(v.Contains(33));
135 5 : CHECK(!v.Contains(22));
136 5 : CHECK(!v.Contains(34));
137 5 : CHECK(!v.Contains(43));
138 5 : v.Resize(300, &zone);
139 5 : CHECK(v.Contains(32));
140 5 : CHECK(v.Contains(33));
141 5 : CHECK(!v.Contains(22));
142 5 : CHECK(!v.Contains(34));
143 5 : CHECK(!v.Contains(43));
144 5 : CHECK(!v.Contains(243));
145 : }
146 5 : }
147 :
148 : } // namespace internal
149 79917 : } // namespace v8
|