OSDN Git Service

2013.10.24
[uclinux-h8/uClinux-dist.git] / lib / bitvector / t / 12_____string.t
1 #!perl -w
2
3 use strict;
4 no strict "vars";
5
6 use Bit::Vector::Overload;
7
8 $Bit::Vector::CONFIG[2] = 3;
9
10 # ======================================================================
11 #   $vector->to_Hex();
12 #   $vector->from_Hex();
13 #   $vector->to_Enum();
14 #   $vector->from_Enum();
15 # ======================================================================
16
17 print "1..192\n";
18
19 $limit = 100;
20
21 $vec1 = Bit::Vector->new($limit+1);
22 $vec2 = Bit::Vector->new($limit+1);
23
24 $n = 1;
25
26 eval { $vec1->from_Hex("FEDCBA9876543210"); };
27 unless ($@)
28 {print "ok $n\n";} else {print "not ok $n\n";}
29 $n++;
30
31 $str1 = $vec1->to_Hex();
32 if ($str1 =~ /^0*FEDCBA9876543210$/)
33 {print "ok $n\n";} else {print "not ok $n\n";}
34 $n++;
35
36 eval { $vec2->from_Hex("fedcba9876543210"); };
37 unless ($@)
38 {print "ok $n\n";} else {print "not ok $n\n";}
39 $n++;
40
41 $str2 = $vec2->to_Hex();
42 if ($str2 =~ /^0*FEDCBA9876543210$/)
43 {print "ok $n\n";} else {print "not ok $n\n";}
44 $n++;
45
46 eval { $vec1->from_Hex("deadbeef"); };
47 unless ($@)
48 {print "ok $n\n";} else {print "not ok $n\n";}
49 $n++;
50
51 $str1 = $vec1->to_Hex();
52 if ($str1 =~ /^0*DEADBEEF$/)
53 {print "ok $n\n";} else {print "not ok $n\n";}
54 $n++;
55
56 eval { $vec1->from_Hex("dead beef"); };
57 if ($@ =~ /syntax error/)
58 {print "ok $n\n";} else {print "not ok $n\n";}
59 $n++;
60
61 eval { $vec2->from_Hex("beef"); };
62 unless ($@)
63 {print "ok $n\n";} else {print "not ok $n\n";}
64 $n++;
65
66 if ($vec1->equal($vec2))
67 {print "ok $n\n";} else {print "not ok $n\n";}
68 $n++;
69
70 $str1 = $vec1->to_Hex();
71 if ($str1 =~ /^0*BEEF$/)
72 {print "ok $n\n";} else {print "not ok $n\n";}
73 $n++;
74
75 $str2 = $vec2->to_Enum();
76 if ($str2 eq "0-3,5-7,9-13,15")
77 {print "ok $n\n";} else {print "not ok $n\n";}
78 $n++;
79
80 $vec1->Primes();
81
82 $str1 = $vec1->to_Hex();
83 if ($str1 =~ /^0*20208828828208A20A08A28AC$/)
84 {print "ok $n\n";} else {print "not ok $n\n";}
85 $n++;
86
87 $str2 = $vec1->to_Enum();
88 if ($str2 eq
89 "2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97")
90 {print "ok $n\n";} else {print "not ok $n\n";}
91 $n++;
92
93 eval { $vec2->from_Hex("20208828828208A20A08A28AC"); };
94 unless ($@)
95 {print "ok $n\n";} else {print "not ok $n\n";}
96 $n++;
97
98 if ($vec1->equal($vec2))
99 {print "ok $n\n";} else {print "not ok $n\n";}
100 $n++;
101
102 $vec2->Flip();
103 $str1 =
104 "2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97";
105 eval { $vec2->from_Enum($str1); };
106 unless ($@)
107 {print "ok $n\n";} else {print "not ok $n\n";}
108 $n++;
109
110 if ($vec1->equal($vec2))
111 {print "ok $n\n";} else {print "not ok $n\n";}
112 $n++;
113
114 $str2 = "43,4,19,2,12,67,31,11,3,23,29,6-9,79-97,14-16,47,53-59,71,37-41,61";
115 eval { $vec2->from_Enum($str2); };
116 unless ($@)
117 {print "ok $n\n";} else {print "not ok $n\n";}
118 $n++;
119
120 $str1 = $vec2->to_Enum();
121 $str2 = "2-4,6-9,11,12,14-16,19,23,29,31,37-41,43,47,53-59,61,67,71,79-97";
122 if ($str1 eq $str2)
123 {print "ok $n\n";} else {print "not ok $n\n";}
124 $n++;
125
126 $str1 = $vec2->to_Hex();
127 if ($str1 =~ /^0*3FFFF80882FE08BE0A089DBDC$/)
128 {print "ok $n\n";} else {print "not ok $n\n";}
129 $n++;
130
131 $vec2->Fill();
132 if ($vec2->Norm() == $limit+1)
133 {print "ok $n\n";} else {print "not ok $n\n";}
134 $n++;
135
136 eval { $vec2->from_Hex("0000000000000000"); };
137 unless ($@)
138 {print "ok $n\n";} else {print "not ok $n\n";}
139 $n++;
140
141 if ($vec2->Norm() == 0)
142 {print "ok $n\n";} else {print "not ok $n\n";}
143 $n++;
144
145 $vec2->Fill();
146 if ($vec2->Norm() == $limit+1)
147 {print "ok $n\n";} else {print "not ok $n\n";}
148 $n++;
149
150 eval { $vec2->from_Hex("0"); };
151 unless ($@)
152 {print "ok $n\n";} else {print "not ok $n\n";}
153 $n++;
154
155 if ($vec2->Norm() == 0)
156 {print "ok $n\n";} else {print "not ok $n\n";}
157 $n++;
158
159 $vec2->Fill();
160 if ($vec2->Norm() == $limit+1)
161 {print "ok $n\n";} else {print "not ok $n\n";}
162 $n++;
163
164 eval { $vec2->from_Hex(""); };
165 unless ($@)
166 {print "ok $n\n";} else {print "not ok $n\n";}
167 $n++;
168
169 if ($vec2->Norm() == 0)
170 {print "ok $n\n";} else {print "not ok $n\n";}
171 $n++;
172
173 $vec1 = Bit::Vector->new(64);
174 eval { $vec1->from_Hex("FEDCBA9876543210"); };
175 unless ($@)
176 {print "ok $n\n";} else {print "not ok $n\n";}
177 $n++;
178
179 $str1 = $vec1->to_Hex();
180 if ($str1 =~ /^0*FEDCBA9876543210$/)
181 {print "ok $n\n";} else {print "not ok $n\n";}
182 $n++;
183
184 $vec2 = Bit::Vector->new(64);
185 eval { $vec2->from_Hex("fedcba9876543210"); };
186 unless ($@)
187 {print "ok $n\n";} else {print "not ok $n\n";}
188 $n++;
189
190 $str2 = $vec2->to_Hex();
191 if ($str2 =~ /^0*FEDCBA9876543210$/)
192 {print "ok $n\n";} else {print "not ok $n\n";}
193 $n++;
194
195 $vec1 = Bit::Vector->new(32);
196 eval { $vec1->from_Hex("DEADbeef"); };
197 unless ($@)
198 {print "ok $n\n";} else {print "not ok $n\n";}
199 $n++;
200
201 $str1 = $vec1->to_Hex();
202 if ($str1 =~ /^0*DEADBEEF$/)
203 {print "ok $n\n";} else {print "not ok $n\n";}
204 $n++;
205
206 $vec2 = Bit::Vector->new(36);
207 eval { $vec2->from_Hex("DEAD beef"); };
208 if ($@ =~ /syntax error/)
209 {print "ok $n\n";} else {print "not ok $n\n";}
210 $n++;
211
212 $str2 = $vec2->to_Hex();
213 if ($str2 =~ /^0*00000BEEF$/)
214 {print "ok $n\n";} else {print "not ok $n\n";}
215 $n++;
216
217 $vec1 = Bit::Vector->new(64);
218 eval { $vec1->from_Hex("0000000000000000"); };
219 unless ($@)
220 {print "ok $n\n";} else {print "not ok $n\n";}
221 $n++;
222
223 if ($vec1->Norm() == 0)
224 {print "ok $n\n";} else {print "not ok $n\n";}
225 $n++;
226
227 if ($vec1->Size() == 64)
228 {print "ok $n\n";} else {print "not ok $n\n";}
229 $n++;
230
231 $vec2 = Bit::Vector->new(64);
232 eval { $vec2->from_Hex("00000g0000000000"); };
233 if ($@ =~ /syntax error/)
234 {print "ok $n\n";} else {print "not ok $n\n";}
235 $n++;
236
237 eval { $vec2->from_Hex(""); };
238 unless ($@)
239 {print "ok $n\n";} else {print "not ok $n\n";}
240 $n++;
241
242 $vec1 = Bit::Vector->new($limit+1);
243
244 $str1 = 3.1415926 * 2.0E+7;
245 eval { $vec1->from_Hex($str1); };
246 unless ($@)
247 {print "ok $n\n";} else {print "not ok $n\n";}
248 $n++;
249
250 $str2 = $vec1->to_Hex();
251 if ($str2 =~ /^0*62831852$/)
252 {print "ok $n\n";} else {print "not ok $n\n";}
253 $n++;
254
255 $vec2 = Bit::Vector->new($limit+1);
256 eval { $vec2->from_Hex($str1); };
257 unless ($@)
258 {print "ok $n\n";} else {print "not ok $n\n";}
259 $n++;
260
261 $str2 = $vec2->to_Hex();
262 if ($str2 =~ /^0*62831852$/)
263 {print "ok $n\n";} else {print "not ok $n\n";}
264 $n++;
265
266 $str2 = 3.1415926 * 2.0;
267 eval { $vec1->from_Hex($str2); };
268 if ($@ =~ /syntax error/)
269 {print "ok $n\n";} else {print "not ok $n\n";}
270 $n++;
271
272 eval { $vec2->from_Hex($str2); };
273 if ($@ =~ /syntax error/)
274 {print "ok $n\n";} else {print "not ok $n\n";}
275 $n++;
276
277 $str1 = "ERRORFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF";
278 #             _123456789ABCDEF_123456789ABCDEF_123456789ABCDEF_123456789ABCDEF
279 eval { $vec1->from_Hex($str1); };
280 unless ($@)
281 {print "ok $n\n";} else {print "not ok $n\n";}
282 $n++;
283
284 $str2 = $vec1->to_Hex();
285 if ($str2 =~ /^0*1FFFFFFFFFFFFFFFFFFFFFFFFF$/)
286 {print "ok $n\n";} else {print "not ok $n\n";}
287 $n++;
288
289 $vec2 = $vec1->Shadow();
290
291 eval { $vec1->from_Enum("0-$limit"); };
292 unless ($@)
293 {print "ok $n\n";} else {print "not ok $n\n";}
294 $n++;
295
296 $vec2->Fill();
297 if ($vec1->equal($vec2))
298 {print "ok $n\n";} else {print "not ok $n\n";}
299 $n++;
300
301 eval { $vec1->from_Enum("0..$limit"); };
302 if ($@ =~ /syntax error/)
303 {print "ok $n\n";} else {print "not ok $n\n";}
304 $n++;
305
306 eval { $vec1->from_Enum("0,$limit"); };
307 unless ($@)
308 {print "ok $n\n";} else {print "not ok $n\n";}
309 $n++;
310
311 $vec2->Empty();
312 $vec2->Bit_On(0);
313 $vec2->Bit_On($limit);
314 if ($vec1->equal($vec2))
315 {print "ok $n\n";} else {print "not ok $n\n";}
316 $n++;
317
318 eval { $vec1->from_Enum("0,$limit,"); };
319 if ($@ =~ /syntax error/)
320 {print "ok $n\n";} else {print "not ok $n\n";}
321 $n++;
322
323 eval { $vec1->from_Enum("0,\$limit"); };
324 if ($@ =~ /syntax error/)
325 {print "ok $n\n";} else {print "not ok $n\n";}
326 $n++;
327
328 eval { $vec1->from_Enum("101-102"); };
329 if ($@ =~ /index out of range/)
330 {print "ok $n\n";} else {print "not ok $n\n";}
331 $n++;
332
333 eval { $vec1->from_Enum("100-102"); };
334 if ($@ =~ /index out of range/)
335 {print "ok $n\n";} else {print "not ok $n\n";}
336 $n++;
337
338 eval { $vec1->from_Enum("100-99"); };
339 if ($@ =~ /minimum > maximum index/)
340 {print "ok $n\n";} else {print "not ok $n\n";}
341 $n++;
342
343 eval { $vec1->from_Enum("100,101"); };
344 if ($@ =~ /index out of range/)
345 {print "ok $n\n";} else {print "not ok $n\n";}
346 $n++;
347
348 eval { $vec1->from_Enum("101,100"); };
349 if ($@ =~ /index out of range/)
350 {print "ok $n\n";} else {print "not ok $n\n";}
351 $n++;
352
353 @first = ('', '1', '3', '7');
354
355 for ( $bits = 0; $bits <= 129; $bits++ )
356 {
357     $vec = Bit::Vector->new($bits);
358     $vec->Fill();
359     if ($vec->to_Hex() eq $first[$bits & 3] . ('F' x ($bits >> 2)))
360     {print "ok $n\n";} else {print "not ok $n\n";}
361     $n++;
362 }
363
364 __END__
365