OSDN Git Service

2013.10.24
[uclinux-h8/uClinux-dist.git] / lib / bitvector / t / 08_____resize.t
1 #!perl -w
2
3 use strict;
4 no strict "vars";
5
6 use Bit::Vector;
7
8 # ======================================================================
9 #   $set->Resize($elements);
10 # ======================================================================
11
12 print "1..57\n";
13
14 $n = 1;
15
16 $set = Bit::Vector->new(1);
17 if (defined $set)
18 {print "ok $n\n";} else {print "not ok $n\n";}
19 $n++;
20 if (ref($set) eq 'Bit::Vector')
21 {print "ok $n\n";} else {print "not ok $n\n";}
22 $n++;
23 if (${$set} != 0)
24 {print "ok $n\n";} else {print "not ok $n\n";}
25 $n++;
26 eval { ${$set} = 0; };
27 if ($@ =~ /Modification of a read-only value attempted/)
28 {print "ok $n\n";} else {print "not ok $n\n";}
29 $n++;
30
31 eval { $set->Resize(0); };
32 unless ($@)
33 {print "ok $n\n";} else {print "not ok $n\n";}
34 $n++;
35 if (ref($set) eq 'Bit::Vector')
36 {print "ok $n\n";} else {print "not ok $n\n";}
37 $n++;
38 if (${$set} != 0)
39 {print "ok $n\n";} else {print "not ok $n\n";}
40 $n++;
41 eval { ${$set} = 1; };
42 if ($@ =~ /Modification of a read-only value attempted/)
43 {print "ok $n\n";} else {print "not ok $n\n";}
44 $n++;
45
46 $set = Bit::Vector->new(8);
47 if (defined $set)
48 {print "ok $n\n";} else {print "not ok $n\n";}
49 $n++;
50 if (ref($set) eq 'Bit::Vector')
51 {print "ok $n\n";} else {print "not ok $n\n";}
52 $n++;
53 if (${$set} != 0)
54 {print "ok $n\n";} else {print "not ok $n\n";}
55 $n++;
56 $old = ${$set};
57 if (${$set} == $old)
58 {print "ok $n\n";} else {print "not ok $n\n";}
59 $n++;
60
61 $set->Resize(65536);
62 if (defined $set)
63 {print "ok $n\n";} else {print "not ok $n\n";}
64 $n++;
65 if (ref($set) eq 'Bit::Vector')
66 {print "ok $n\n";} else {print "not ok $n\n";}
67 $n++;
68 if (${$set} != 0)
69 {print "ok $n\n";} else {print "not ok $n\n";}
70 $n++;
71 if (${$set} != $old)
72 {print "ok $n\n";} else {print "not ok $n\n";}
73 $n++;
74 $old = ${$set};
75 if (${$set} == $old)
76 {print "ok $n\n";} else {print "not ok $n\n";}
77 $n++;
78 if ($set->Size() == 65536)
79 {print "ok $n\n";} else {print "not ok $n\n";}
80 $n++;
81
82 $set->Resize(4090);
83 if (defined $set)
84 {print "ok $n\n";} else {print "not ok $n\n";}
85 $n++;
86 if (ref($set) eq 'Bit::Vector')
87 {print "ok $n\n";} else {print "not ok $n\n";}
88 $n++;
89 if (${$set} != 0)
90 {print "ok $n\n";} else {print "not ok $n\n";}
91 $n++;
92 if (${$set} == $old)
93 {print "ok $n\n";} else {print "not ok $n\n";}
94 $n++;
95 if ($set->Size() == 4090)
96 {print "ok $n\n";} else {print "not ok $n\n";}
97 $n++;
98
99 $set->Resize(4096);
100 if (defined $set)
101 {print "ok $n\n";} else {print "not ok $n\n";}
102 $n++;
103 if (ref($set) eq 'Bit::Vector')
104 {print "ok $n\n";} else {print "not ok $n\n";}
105 $n++;
106 if (${$set} != 0)
107 {print "ok $n\n";} else {print "not ok $n\n";}
108 $n++;
109 if (${$set} == $old)
110 {print "ok $n\n";} else {print "not ok $n\n";}
111 $n++;
112 if ($set->Size() == 4096)
113 {print "ok $n\n";} else {print "not ok $n\n";}
114 $n++;
115
116 $set->Resize(&binomial(49,6));
117 if (defined $set)
118 {print "ok $n\n";} else {print "not ok $n\n";}
119 $n++;
120 if (ref($set) eq 'Bit::Vector')
121 {print "ok $n\n";} else {print "not ok $n\n";}
122 $n++;
123 if (${$set} != 0)
124 {print "ok $n\n";} else {print "not ok $n\n";}
125 $n++;
126 if (${$set} != $old)
127 {print "ok $n\n";} else {print "not ok $n\n";}
128 $n++;
129 $old = ${$set};
130 if (${$set} == $old)
131 {print "ok $n\n";} else {print "not ok $n\n";}
132 $n++;
133 if ($set->Size() == &binomial(49,6))
134 {print "ok $n\n";} else {print "not ok $n\n";}
135 $n++;
136
137 $limit = 65536;
138 $count = 24;
139
140 $set->Resize($limit);
141 if (defined $set)
142 {print "ok $n\n";} else {print "not ok $n\n";}
143 $n++;
144 if (ref($set) eq 'Bit::Vector')
145 {print "ok $n\n";} else {print "not ok $n\n";}
146 $n++;
147 if (${$set} != 0)
148 {print "ok $n\n";} else {print "not ok $n\n";}
149 $n++;
150 if (${$set} == $old)
151 {print "ok $n\n";} else {print "not ok $n\n";}
152 $n++;
153 if ($set->Size() == $limit)
154 {print "ok $n\n";} else {print "not ok $n\n";}
155 $n++;
156
157 $inv = Bit::Vector->new($limit);
158
159 $inv->Fill();
160
161 $set->Bit_On(0);
162 $inv->Bit_Off(0);
163
164 @fib = ( 0, 1 );
165
166 while (1)
167 {
168     $index  = ( $fib[0] + $fib[1] );
169     $fib[0] = $fib[1];
170     $fib[1] = $index;
171     last if $index >= $limit;
172     $set->Bit_On($index);
173     $inv->Bit_Off($index);
174 }
175
176 if ($set->Norm() == $count)
177 {print "ok $n\n";} else {print "not ok $n\n";}
178 $n++;
179 if ($limit - $inv->Norm() == $count)
180 {print "ok $n\n";} else {print "not ok $n\n";}
181 $n++;
182
183 $set->Resize($limit * 2);
184 if (defined $set)
185 {print "ok $n\n";} else {print "not ok $n\n";}
186 $n++;
187 if (ref($set) eq 'Bit::Vector')
188 {print "ok $n\n";} else {print "not ok $n\n";}
189 $n++;
190 if (${$set} != 0)
191 {print "ok $n\n";} else {print "not ok $n\n";}
192 $n++;
193 if (${$set} != $old)
194 {print "ok $n\n";} else {print "not ok $n\n";}
195 $n++;
196 if ($set->Size() == $limit * 2)
197 {print "ok $n\n";} else {print "not ok $n\n";}
198 $n++;
199
200 if ($set->Norm() == $count)
201 {print "ok $n\n";} else {print "not ok $n\n";}
202 $n++;
203
204 $inv->Resize($limit * 2);
205 if (defined $inv)
206 {print "ok $n\n";} else {print "not ok $n\n";}
207 $n++;
208 if (ref($inv) eq 'Bit::Vector')
209 {print "ok $n\n";} else {print "not ok $n\n";}
210 $n++;
211 if (${$inv} != 0)
212 {print "ok $n\n";} else {print "not ok $n\n";}
213 $n++;
214 if ($inv->Size() == $limit * 2)
215 {print "ok $n\n";} else {print "not ok $n\n";}
216 $n++;
217
218 if ($limit - $inv->Norm() == $count)
219 {print "ok $n\n";} else {print "not ok $n\n";}
220 $n++;
221
222 $inv->Complement($inv);
223
224 if ($inv->Norm() == $limit + $count)
225 {print "ok $n\n";} else {print "not ok $n\n";}
226 $n++;
227
228 if ($set->inclusion($inv))
229 {print "ok $n\n";} else {print "not ok $n\n";}
230 $n++;
231
232 $set->ExclusiveOr($inv,$set);
233
234 if ($set->Norm() == $limit)
235 {print "ok $n\n";} else {print "not ok $n\n";}
236 $n++;
237
238 if ($set->Min() == $limit)
239 {print "ok $n\n";} else {print "not ok $n\n";}
240 $n++;
241
242 if ($set->Max() == (($limit * 2) - 1))
243 {print "ok $n\n";} else {print "not ok $n\n";}
244 $n++;
245
246 exit;
247
248 sub binomial
249 {
250     my($n,$k) = @_;
251     my($prod) = 1;
252     my($j) = 0;
253
254     if (($n <= 0) || ($k <= 0) || ($n <= $k)) { return(1); }
255     if ($k > $n - $k) { $k = $n - $k; }
256     while ($j < $k)
257     {
258         $prod *= $n--;
259         $prod /= ++$j;
260     }
261     return(int($prod + 0.5));
262 }
263
264 __END__
265