6 use Bit::Vector::Overload;
8 $Bit::Vector::CONFIG[2] = 3;
10 # ======================================================================
12 # $vector->from_Hex();
14 # $vector->from_Enum();
15 # ======================================================================
21 $vec1 = Bit::Vector->new($limit+1);
22 $vec2 = Bit::Vector->new($limit+1);
26 eval { $vec1->from_Hex("FEDCBA9876543210"); };
28 {print "ok $n\n";} else {print "not ok $n\n";}
31 $str1 = $vec1->to_Hex();
32 if ($str1 =~ /^0*FEDCBA9876543210$/)
33 {print "ok $n\n";} else {print "not ok $n\n";}
36 eval { $vec2->from_Hex("fedcba9876543210"); };
38 {print "ok $n\n";} else {print "not ok $n\n";}
41 $str2 = $vec2->to_Hex();
42 if ($str2 =~ /^0*FEDCBA9876543210$/)
43 {print "ok $n\n";} else {print "not ok $n\n";}
46 eval { $vec1->from_Hex("deadbeef"); };
48 {print "ok $n\n";} else {print "not ok $n\n";}
51 $str1 = $vec1->to_Hex();
52 if ($str1 =~ /^0*DEADBEEF$/)
53 {print "ok $n\n";} else {print "not ok $n\n";}
56 eval { $vec1->from_Hex("dead beef"); };
57 if ($@ =~ /syntax error/)
58 {print "ok $n\n";} else {print "not ok $n\n";}
61 eval { $vec2->from_Hex("beef"); };
63 {print "ok $n\n";} else {print "not ok $n\n";}
66 if ($vec1->equal($vec2))
67 {print "ok $n\n";} else {print "not ok $n\n";}
70 $str1 = $vec1->to_Hex();
71 if ($str1 =~ /^0*BEEF$/)
72 {print "ok $n\n";} else {print "not ok $n\n";}
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";}
82 $str1 = $vec1->to_Hex();
83 if ($str1 =~ /^0*20208828828208A20A08A28AC$/)
84 {print "ok $n\n";} else {print "not ok $n\n";}
87 $str2 = $vec1->to_Enum();
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";}
93 eval { $vec2->from_Hex("20208828828208A20A08A28AC"); };
95 {print "ok $n\n";} else {print "not ok $n\n";}
98 if ($vec1->equal($vec2))
99 {print "ok $n\n";} else {print "not ok $n\n";}
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); };
107 {print "ok $n\n";} else {print "not ok $n\n";}
110 if ($vec1->equal($vec2))
111 {print "ok $n\n";} else {print "not ok $n\n";}
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); };
117 {print "ok $n\n";} else {print "not ok $n\n";}
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";
123 {print "ok $n\n";} else {print "not ok $n\n";}
126 $str1 = $vec2->to_Hex();
127 if ($str1 =~ /^0*3FFFF80882FE08BE0A089DBDC$/)
128 {print "ok $n\n";} else {print "not ok $n\n";}
132 if ($vec2->Norm() == $limit+1)
133 {print "ok $n\n";} else {print "not ok $n\n";}
136 eval { $vec2->from_Hex("0000000000000000"); };
138 {print "ok $n\n";} else {print "not ok $n\n";}
141 if ($vec2->Norm() == 0)
142 {print "ok $n\n";} else {print "not ok $n\n";}
146 if ($vec2->Norm() == $limit+1)
147 {print "ok $n\n";} else {print "not ok $n\n";}
150 eval { $vec2->from_Hex("0"); };
152 {print "ok $n\n";} else {print "not ok $n\n";}
155 if ($vec2->Norm() == 0)
156 {print "ok $n\n";} else {print "not ok $n\n";}
160 if ($vec2->Norm() == $limit+1)
161 {print "ok $n\n";} else {print "not ok $n\n";}
164 eval { $vec2->from_Hex(""); };
166 {print "ok $n\n";} else {print "not ok $n\n";}
169 if ($vec2->Norm() == 0)
170 {print "ok $n\n";} else {print "not ok $n\n";}
173 $vec1 = Bit::Vector->new(64);
174 eval { $vec1->from_Hex("FEDCBA9876543210"); };
176 {print "ok $n\n";} else {print "not ok $n\n";}
179 $str1 = $vec1->to_Hex();
180 if ($str1 =~ /^0*FEDCBA9876543210$/)
181 {print "ok $n\n";} else {print "not ok $n\n";}
184 $vec2 = Bit::Vector->new(64);
185 eval { $vec2->from_Hex("fedcba9876543210"); };
187 {print "ok $n\n";} else {print "not ok $n\n";}
190 $str2 = $vec2->to_Hex();
191 if ($str2 =~ /^0*FEDCBA9876543210$/)
192 {print "ok $n\n";} else {print "not ok $n\n";}
195 $vec1 = Bit::Vector->new(32);
196 eval { $vec1->from_Hex("DEADbeef"); };
198 {print "ok $n\n";} else {print "not ok $n\n";}
201 $str1 = $vec1->to_Hex();
202 if ($str1 =~ /^0*DEADBEEF$/)
203 {print "ok $n\n";} else {print "not ok $n\n";}
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";}
212 $str2 = $vec2->to_Hex();
213 if ($str2 =~ /^0*00000BEEF$/)
214 {print "ok $n\n";} else {print "not ok $n\n";}
217 $vec1 = Bit::Vector->new(64);
218 eval { $vec1->from_Hex("0000000000000000"); };
220 {print "ok $n\n";} else {print "not ok $n\n";}
223 if ($vec1->Norm() == 0)
224 {print "ok $n\n";} else {print "not ok $n\n";}
227 if ($vec1->Size() == 64)
228 {print "ok $n\n";} else {print "not ok $n\n";}
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";}
237 eval { $vec2->from_Hex(""); };
239 {print "ok $n\n";} else {print "not ok $n\n";}
242 $vec1 = Bit::Vector->new($limit+1);
244 $str1 = 3.1415926 * 2.0E+7;
245 eval { $vec1->from_Hex($str1); };
247 {print "ok $n\n";} else {print "not ok $n\n";}
250 $str2 = $vec1->to_Hex();
251 if ($str2 =~ /^0*62831852$/)
252 {print "ok $n\n";} else {print "not ok $n\n";}
255 $vec2 = Bit::Vector->new($limit+1);
256 eval { $vec2->from_Hex($str1); };
258 {print "ok $n\n";} else {print "not ok $n\n";}
261 $str2 = $vec2->to_Hex();
262 if ($str2 =~ /^0*62831852$/)
263 {print "ok $n\n";} else {print "not ok $n\n";}
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";}
272 eval { $vec2->from_Hex($str2); };
273 if ($@ =~ /syntax error/)
274 {print "ok $n\n";} else {print "not ok $n\n";}
277 $str1 = "ERRORFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF";
278 # _123456789ABCDEF_123456789ABCDEF_123456789ABCDEF_123456789ABCDEF
279 eval { $vec1->from_Hex($str1); };
281 {print "ok $n\n";} else {print "not ok $n\n";}
284 $str2 = $vec1->to_Hex();
285 if ($str2 =~ /^0*1FFFFFFFFFFFFFFFFFFFFFFFFF$/)
286 {print "ok $n\n";} else {print "not ok $n\n";}
289 $vec2 = $vec1->Shadow();
291 eval { $vec1->from_Enum("0-$limit"); };
293 {print "ok $n\n";} else {print "not ok $n\n";}
297 if ($vec1->equal($vec2))
298 {print "ok $n\n";} else {print "not ok $n\n";}
301 eval { $vec1->from_Enum("0..$limit"); };
302 if ($@ =~ /syntax error/)
303 {print "ok $n\n";} else {print "not ok $n\n";}
306 eval { $vec1->from_Enum("0,$limit"); };
308 {print "ok $n\n";} else {print "not ok $n\n";}
313 $vec2->Bit_On($limit);
314 if ($vec1->equal($vec2))
315 {print "ok $n\n";} else {print "not ok $n\n";}
318 eval { $vec1->from_Enum("0,$limit,"); };
319 if ($@ =~ /syntax error/)
320 {print "ok $n\n";} else {print "not ok $n\n";}
323 eval { $vec1->from_Enum("0,\$limit"); };
324 if ($@ =~ /syntax error/)
325 {print "ok $n\n";} else {print "not ok $n\n";}
328 eval { $vec1->from_Enum("101-102"); };
329 if ($@ =~ /index out of range/)
330 {print "ok $n\n";} else {print "not ok $n\n";}
333 eval { $vec1->from_Enum("100-102"); };
334 if ($@ =~ /index out of range/)
335 {print "ok $n\n";} else {print "not ok $n\n";}
338 eval { $vec1->from_Enum("100-99"); };
339 if ($@ =~ /minimum > maximum index/)
340 {print "ok $n\n";} else {print "not ok $n\n";}
343 eval { $vec1->from_Enum("100,101"); };
344 if ($@ =~ /index out of range/)
345 {print "ok $n\n";} else {print "not ok $n\n";}
348 eval { $vec1->from_Enum("101,100"); };
349 if ($@ =~ /index out of range/)
350 {print "ok $n\n";} else {print "not ok $n\n";}
353 @first = ('', '1', '3', '7');
355 for ( $bits = 0; $bits <= 129; $bits++ )
357 $vec = Bit::Vector->new($bits);
359 if ($vec->to_Hex() eq $first[$bits & 3] . ('F' x ($bits >> 2)))
360 {print "ok $n\n";} else {print "not ok $n\n";}