Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(58)

Side by Side Diff: runtime/vm/bigint_test.cc

Issue 565673007: Resurrect tests from deleted bigint_operations_test.cc into new bigint_test.cc (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | runtime/vm/object.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 #include "platform/assert.h"
6 #include "vm/object.h"
7 #include "vm/object_store.h"
8 #include "vm/unit_test.h"
9
10 namespace dart {
11
12 static uword ZoneAllocator(intptr_t size) {
13 Zone* zone = Isolate::Current()->current_zone();
14 return zone->AllocUnsafe(size);
15 }
16
17
18 TEST_CASE(BigintSmi) {
19 {
20 const Smi& smi = Smi::Handle(Smi::New(5));
21 const Bigint& bigint = Bigint::Handle(Bigint::NewFromInt64(smi.Value()));
22 EXPECT_EQ(5, bigint.AsInt64Value());
23 EXPECT(bigint.FitsIntoSmi());
24 Smi& smi_back = Smi::Handle();
25 smi_back ^= bigint.AsValidInteger();
26 EXPECT_EQ(5, smi_back.Value());
27 }
28
29 {
30 const Smi& smi = Smi::Handle(Smi::New(Smi::kMaxValue));
31 const Bigint& bigint = Bigint::Handle(Bigint::NewFromInt64(smi.Value()));
32 EXPECT(Smi::kMaxValue == bigint.AsInt64Value());
33 EXPECT(bigint.FitsIntoSmi());
34 Smi& smi_back = Smi::Handle();
35 smi_back ^= bigint.AsValidInteger();
36 EXPECT(Smi::kMaxValue == smi_back.Value());
37 }
38
39 {
40 const Smi& smi = Smi::Handle(Smi::New(Smi::kMinValue));
41 const Bigint& bigint = Bigint::Handle(Bigint::NewFromInt64(smi.Value()));
42 EXPECT(bigint.IsNegative());
43 EXPECT(Smi::kMinValue == bigint.AsInt64Value());
44 EXPECT(bigint.FitsIntoSmi());
45 Smi& smi_back = Smi::Handle();
46 smi_back ^= bigint.AsValidInteger();
47 EXPECT(Smi::kMinValue == smi_back.Value());
48 }
49
50 {
51 ASSERT(0xFFFFFFF < Smi::kMaxValue);
52 const Smi& smi = Smi::Handle(Smi::New(0xFFFFFFF));
53 const Bigint& bigint = Bigint::Handle(Bigint::NewFromInt64(smi.Value()));
54 EXPECT_EQ(0xFFFFFFF, bigint.AsInt64Value());
55 EXPECT(bigint.FitsIntoSmi());
56 Smi& smi_back = Smi::Handle();
57 smi_back ^= bigint.AsValidInteger();
58 EXPECT_EQ(0xFFFFFFF, smi_back.Value());
59 }
60
61 {
62 ASSERT(0x10000000 < Smi::kMaxValue);
63 const Smi& smi = Smi::Handle(Smi::New(0x10000000));
64 const Bigint& bigint = Bigint::Handle(Bigint::NewFromInt64(smi.Value()));
65 EXPECT_EQ(0x10000000, bigint.AsInt64Value());
66 EXPECT(bigint.FitsIntoSmi());
67 Smi& smi_back = Smi::Handle();
68 smi_back ^= bigint.AsValidInteger();
69 EXPECT(0x10000000 == smi_back.Value());
70 }
71 }
72
73
74 TEST_CASE(BigintInt64) {
75 const int64_t kValue = 100000000;
76 const int64_t kValue64 = kValue * kValue;
77 Bigint& bigint = Bigint::Handle(Bigint::NewFromInt64(kValue));
78 EXPECT_EQ(kValue, bigint.AsInt64Value());
79 bigint = Bigint::NewFromInt64(kValue64);
80 EXPECT_EQ(kValue64, bigint.AsInt64Value());
81 bigint = Bigint::NewFromInt64(-kValue64);
82 EXPECT_EQ(-kValue64, bigint.AsInt64Value());
83 bigint = Bigint::NewFromInt64(kMinInt64);
84 EXPECT(bigint.FitsIntoInt64());
85 EXPECT_EQ(kMinInt64, bigint.AsInt64Value());
86 }
87
88
89 TEST_CASE(BigintUint64) {
90 const Bigint& one = Bigint::Handle(Bigint::NewFromUint64(1));
91 EXPECT(one.FitsIntoInt64());
92 EXPECT(one.FitsIntoUint64());
93
94 const Bigint& big = Bigint::Handle(Bigint::NewFromUint64(kMaxUint64));
95 EXPECT(!big.FitsIntoInt64());
96 EXPECT(big.FitsIntoUint64());
97
98 uint64_t back = big.AsUint64Value();
99 EXPECT_EQ(kMaxUint64, back);
100 }
101
102
103 TEST_CASE(BigintDouble) {
104 Bigint& bigint = Bigint::Handle(Bigint::NewFromInt64(5));
105 EXPECT_EQ(5.0, bigint.AsDoubleValue());
106
107 bigint = Bigint::NewFromInt64(0);
108 EXPECT_EQ(0.0, bigint.AsDoubleValue());
109
110 bigint = Bigint::NewFromInt64(-12345678);
111 EXPECT_EQ(-1.2345678e+7, bigint.AsDoubleValue());
112
113 bigint = Bigint::NewFromCString("1");
114 EXPECT_EQ(1.0, bigint.AsDoubleValue());
115
116 bigint = Bigint::NewFromCString("123456");
117 EXPECT_EQ(123456.0, bigint.AsDoubleValue());
118
119 bigint = Bigint::NewFromCString("123456789");
120 EXPECT_EQ(123456789.0, bigint.AsDoubleValue());
121
122 bigint = Bigint::NewFromCString("12345678901234567");
123 EXPECT_EQ(12345678901234568.0, bigint.AsDoubleValue());
124
125 bigint = Bigint::NewFromCString("98765432109876");
126 EXPECT_EQ(9.8765432109876e+13, bigint.AsDoubleValue());
127
128 bigint = Bigint::NewFromCString("0x17777777777778");
129 EXPECT_EQ(6605279453476728.0, bigint.AsDoubleValue());
130
131 bigint = Bigint::NewFromCString("0x37777777777778");
132 EXPECT_EQ(15612478708217720.0, bigint.AsDoubleValue());
133
134 bigint = Bigint::NewFromCString("0x177777777777781234567");
135 EXPECT_EQ(1.7730912021014563e+24, bigint.AsDoubleValue());
136
137 bigint = Bigint::NewFromCString("0x177777777777788000000");
138 EXPECT_EQ(1.7730912021014563e+24, bigint.AsDoubleValue());
139
140 bigint = Bigint::NewFromCString("0x177777777777788000001");
141 EXPECT_EQ(1.7730912021014565e+24, bigint.AsDoubleValue());
142
143 bigint = Bigint::NewFromCString("0x177777777777798000000");
144 EXPECT_EQ(1.7730912021014568e+24, bigint.AsDoubleValue());
145
146 bigint = Bigint::NewFromCString("0x177777777777798000001");
147 EXPECT_EQ(1.7730912021014568e+24, bigint.AsDoubleValue());
148
149 bigint = Bigint::NewFromCString("0x377777777777790000000");
150 EXPECT_EQ(4.1909428413307146e+24, bigint.AsDoubleValue());
151
152 bigint = Bigint::NewFromCString("0x377777777777790000001");
153 EXPECT_EQ(4.190942841330715e+24, bigint.AsDoubleValue());
154
155 bigint = Bigint::NewFromCString("0x377777777777730000000");
156 EXPECT_EQ(4.1909428413307135e+24, bigint.AsDoubleValue());
157
158 bigint = Bigint::NewFromCString("0x377777777777730000001");
159 EXPECT_EQ(4.1909428413307135e+24, bigint.AsDoubleValue());
160
161 // Reduced precision.
162 bigint = Bigint::NewFromCString(
163 "9876543210987654321098765432109876543210");
164 EXPECT_EQ(9.8765432109876546e+39, bigint.AsDoubleValue());
165
166 bigint = Bigint::NewFromCString(
167 "12345678901234567890123456789012345678901234567890"
168 "12345678901234567890123456789012345678901234567890"
169 "12345678901234567890123456789012345678901234567890"
170 "12345678901234567890123456789012345678901234567890"
171 "12345678901234567890123456789012345678901234567890"
172 "12345678901234567890123456789012345678901234567890"
173 "12345678901234567890123456789012345678901234567890"
174 "12345678901234567890123456789012345678901234567890"
175 "12345678901234567890123456789012345678901234567890"
176 "12345678901234567890123456789012345678901234567890");
177 double zero = 0.0;
178 EXPECT_EQ(1.0/zero, bigint.AsDoubleValue());
179
180 bigint = Bigint::NewFromCString(
181 "17976931348623157081452742373170435679807056752584"
182 "49965989174768031572607800285387605895586327668781"
183 "71540458953514382464234321326889464182768467546703"
184 "53751698604991057655128207624549009038932894407586"
185 "85084551339423045832369032229481658085593321233482"
186 "74797826204144723168738177180919299881250404026184"
187 "124858368");
188 EXPECT_EQ(1.7976931348623157e308, bigint.AsDoubleValue());
189
190 bigint = Bigint::NewFromCString(
191 "17976931348623159077293051907890247336179769789423"
192 "06572734300811577326758055009631327084773224075360"
193 "21120113879871393357658789768814416622492847430639"
194 "47412437776789342486548527630221960124609411945308"
195 "29520850057688381506823424628814739131105408272371"
196 "63350510684586298239947245938479716304835356329624"
197 "224137216");
198 EXPECT_EQ(1.0/zero, bigint.AsDoubleValue());
199
200 bigint = Bigint::NewFromCString(
201 "17976931348623158079372897140530341507993413271003"
202 "78269361737789804449682927647509466490179775872070"
203 "96330286416692887910946555547851940402630657488671"
204 "50582068190890200070838367627385484581771153176447"
205 "57302700698555713669596228429148198608349364752927"
206 "19074168444365510704342711559699508093042880177904"
207 "174497792");
208 EXPECT_EQ(1.0/zero, bigint.AsDoubleValue());
209
210 bigint = Bigint::NewFromCString(
211 "17976931348623158079372897140530341507993413271003"
212 "78269361737789804449682927647509466490179775872070"
213 "96330286416692887910946555547851940402630657488671"
214 "50582068190890200070838367627385484581771153176447"
215 "57302700698555713669596228429148198608349364752927"
216 "19074168444365510704342711559699508093042880177904"
217 "174497791");
218 EXPECT_EQ(1.7976931348623157e308, bigint.AsDoubleValue());
219
220 bigint = Bigint::NewFromCString("100000000000000000000000");
221 EXPECT_EQ(1e+23, bigint.AsDoubleValue());
222
223 bigint = Bigint::NewFromCString("100000000000000000000001");
224 EXPECT_EQ(1.0000000000000001e+23, bigint.AsDoubleValue());
225
226 // Same but shifted 64 bits to the left.
227 bigint = Bigint::NewFromCString(
228 "1844674407370955161600000000000000000000000");
229 EXPECT_EQ(1.844674407370955e+42, bigint.AsDoubleValue());
230
231 bigint = Bigint::NewFromCString(
232 "1844674407370955161600000000000000000000001");
233 EXPECT_EQ(1.8446744073709553e+42, bigint.AsDoubleValue());
234 }
235
236
237 TEST_CASE(BigintHexStrings) {
238 {
239 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0x0"));
240 EXPECT(bigint.FitsIntoSmi());
241 EXPECT_EQ(0, bigint.AsInt64Value());
242 }
243
244 {
245 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0x1"));
246 EXPECT(bigint.FitsIntoSmi());
247 EXPECT_EQ(1, bigint.AsInt64Value());
248 }
249
250 {
251 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0x123"));
252 EXPECT(bigint.FitsIntoSmi());
253 EXPECT_EQ(0x123, bigint.AsInt64Value());
254 }
255
256 {
257 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0x123"));
258 const char* str = bigint.ToHexCString(&ZoneAllocator);
259 EXPECT_STREQ("0x123", str);
260 }
261
262 {
263 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0xaBcEf"));
264 const char* str = bigint.ToHexCString(&ZoneAllocator);
265 EXPECT_STREQ("0xABCEF", str);
266 }
267
268 {
269 const char* in = "0x123456789";
270 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in));
271 const char* str = bigint.ToHexCString(&ZoneAllocator);
272 EXPECT_STREQ(in, str);
273 }
274
275 {
276 const char* in = "0xFFFFFFF";
277 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in));
278 const char* str = bigint.ToHexCString(&ZoneAllocator);
279 EXPECT_STREQ(in, str);
280 }
281
282 {
283 const char* in = "0x10000000";
284 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in));
285 const char* str = bigint.ToHexCString(&ZoneAllocator);
286 EXPECT_STREQ(in, str);
287 }
288
289 {
290 const char* in = "0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0";
291 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in));
292 const char* str = bigint.ToHexCString(&ZoneAllocator);
293 EXPECT_STREQ(in, str);
294 }
295
296 {
297 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("-0x123"));
298 EXPECT(bigint.FitsIntoSmi());
299 EXPECT_EQ(-0x123, bigint.AsInt64Value());
300 }
301
302 {
303 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("-0x123"));
304 const char* str = bigint.ToHexCString(&ZoneAllocator);
305 EXPECT_STREQ("-0x123", str);
306 }
307
308 {
309 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("-0xaBcEf"));
310 const char* str = bigint.ToHexCString(&ZoneAllocator);
311 EXPECT_STREQ("-0xABCEF", str);
312 }
313
314 {
315 const char* in = "-0x123456789";
316 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in));
317 const char* str = bigint.ToHexCString(&ZoneAllocator);
318 EXPECT_STREQ(in, str);
319 }
320
321 {
322 const char* in = "-0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0";
323 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in));
324 const char* str = bigint.ToHexCString(&ZoneAllocator);
325 EXPECT_STREQ(in, str);
326 }
327
328 {
329 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0x00000123"));
330 EXPECT(bigint.FitsIntoSmi());
331 EXPECT_EQ(0x123, bigint.AsInt64Value());
332 }
333
334 {
335 const Bigint& bigint = Bigint::Handle(
336 Bigint::NewFromCString("0x000000123"));
337 const char* str = bigint.ToHexCString(&ZoneAllocator);
338 EXPECT_STREQ("0x123", str);
339 }
340
341 {
342 const Bigint& bigint = Bigint::Handle(
343 Bigint::NewFromCString("0x0000aBcEf"));
344 const char* str = bigint.ToHexCString(&ZoneAllocator);
345 EXPECT_STREQ("0xABCEF", str);
346 }
347
348 {
349 const char* in = "0x00000000000000000000000000000000000000000000123456789";
350 const char* out = "0x123456789";
351 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in));
352 const char* str = bigint.ToHexCString(&ZoneAllocator);
353 EXPECT_STREQ(out, str);
354 }
355
356 {
357 const char* in = "0x00000123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0";
358 const char* out = "0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0";
359 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in));
360 const char* str = bigint.ToHexCString(&ZoneAllocator);
361 EXPECT_STREQ(out, str);
362 }
363
364 {
365 const Bigint& bigint = Bigint::Handle(
366 Bigint::NewFromCString("-0x00000123"));
367 EXPECT(bigint.FitsIntoSmi());
368 EXPECT_EQ(-0x123, bigint.AsInt64Value());
369 }
370
371 {
372 const Bigint& bigint = Bigint::Handle(
373 Bigint::NewFromCString("-0x00000123"));
374 const char* str = bigint.ToHexCString(&ZoneAllocator);
375 EXPECT_STREQ("-0x123", str);
376 }
377
378 {
379 const Bigint& bigint = Bigint::Handle(
380 Bigint::NewFromCString("-0x000aBcEf"));
381 const char* str = bigint.ToHexCString(&ZoneAllocator);
382 EXPECT_STREQ("-0xABCEF", str);
383 }
384
385 {
386 const char* in = "-0x00000000000000000000000000000000000000000000123456789";
387 const char* out = "-0x123456789";
388 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in));
389 const char* str = bigint.ToHexCString(&ZoneAllocator);
390 EXPECT_STREQ(out, str);
391 }
392
393 {
394 const char* in = "-0x0000123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0";
395 const char* out = "-0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0";
396 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in));
397 const char* str = bigint.ToHexCString(&ZoneAllocator);
398 EXPECT_STREQ(out, str);
399 }
400 {
401 const char* test = "12345678901234567890";
402 const char* out = "0xAB54A98CEB1F0AD2";
403 const Bigint& bigint = Bigint::Handle(
404 Bigint::NewFromCString(test));
405 const char* str = bigint.ToHexCString(&ZoneAllocator);
406 EXPECT_STREQ(out, str);
407 }
408 {
409 const char* test = "-12345678901234567890";
410 const char* out = "-0xAB54A98CEB1F0AD2";
411 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(test));
412 const char* str = bigint.ToHexCString(&ZoneAllocator);
413 EXPECT_STREQ(out, str);
414 }
415 }
416
417
418 TEST_CASE(BigintDecStrings) {
419 {
420 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0x0"));
421 const char* str = bigint.ToDecCString(&ZoneAllocator);
422 EXPECT_STREQ("0", str);
423 }
424
425 {
426 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0x123"));
427 const char* str = bigint.ToDecCString(&ZoneAllocator);
428 EXPECT_STREQ("291", str);
429 }
430
431 {
432 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0xaBcEf"));
433 const char* str = bigint.ToDecCString(&ZoneAllocator);
434 EXPECT_STREQ("703727", str);
435 }
436
437 {
438 const char* in = "0x123456789";
439 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in));
440 const char* str = bigint.ToDecCString(&ZoneAllocator);
441 EXPECT_STREQ("4886718345", str);
442 }
443
444 {
445 const char* in = "0xFFFFFFF";
446 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in));
447 const char* str = bigint.ToDecCString(&ZoneAllocator);
448 EXPECT_STREQ("268435455", str);
449 }
450
451 {
452 const char* in = "0x10000000";
453 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in));
454 const char* str = bigint.ToDecCString(&ZoneAllocator);
455 EXPECT_STREQ("268435456", str);
456 }
457
458 {
459 const char* in = "0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0";
460 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in));
461 const char* str = bigint.ToDecCString(&ZoneAllocator);
462 EXPECT_STREQ("7141946863373290020600059860922167424469804758405880798960",
463 str);
464 }
465
466 {
467 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("-0x123"));
468 EXPECT(bigint.FitsIntoSmi());
469 EXPECT_EQ(-291, bigint.AsInt64Value());
470 }
471
472 {
473 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("-0x123"));
474 const char* str = bigint.ToDecCString(&ZoneAllocator);
475 EXPECT_STREQ("-291", str);
476 }
477
478 {
479 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("-0xaBcEf"));
480 const char* str = bigint.ToDecCString(&ZoneAllocator);
481 EXPECT_STREQ("-703727", str);
482 }
483
484 {
485 const char* in = "-0x123456789";
486 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in));
487 const char* str = bigint.ToDecCString(&ZoneAllocator);
488 EXPECT_STREQ("-4886718345", str);
489 }
490
491 {
492 const char* in = "-0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0";
493 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in));
494 const char* str = bigint.ToDecCString(&ZoneAllocator);
495 EXPECT_STREQ("-7141946863373290020600059860922167424469804758405880798960",
496 str);
497 }
498
499 {
500 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0x00000123"));
501 EXPECT(bigint.FitsIntoSmi());
502 EXPECT_EQ(0x123, bigint.AsInt64Value());
503 }
504
505 {
506 const Bigint& bigint = Bigint::Handle(
507 Bigint::NewFromCString("0x000000123"));
508 const char* str = bigint.ToDecCString(&ZoneAllocator);
509 EXPECT_STREQ("291", str);
510 }
511
512 {
513 const Bigint& bigint = Bigint::Handle(
514 Bigint::NewFromCString("100000000000000000000000000000000"));
515 const char* str = bigint.ToDecCString(&ZoneAllocator);
516 EXPECT_STREQ("100000000000000000000000000000000", str);
517 }
518 }
519
520
521 static void TestBigintCompare(const char* a, const char* b, int compare) {
522 const Bigint& bigint_a = Bigint::Handle(Bigint::NewFromCString(a));
523 const Bigint& bigint_b = Bigint::Handle(Bigint::NewFromCString(b));
524 const Integer& int_a = Integer::Handle(bigint_a.AsValidInteger());
525 const Integer& int_b = Integer::Handle(bigint_b.AsValidInteger());
526 int computed_compare = int_a.CompareWith(int_b);
527 int inverted_compare = int_b.CompareWith(int_a);
528 if (compare == 0) {
529 EXPECT(computed_compare == 0);
530 EXPECT(inverted_compare == 0);
531 } else if (compare < 0) {
532 ASSERT(computed_compare < 0);
533 EXPECT(computed_compare < 0);
534 EXPECT(inverted_compare > 0);
535 } else {
536 ASSERT(compare > 0);
537 EXPECT(computed_compare > 0);
538 EXPECT(inverted_compare < 0);
539 }
540 }
541
542
543 TEST_CASE(BigintCompare) {
544 TestBigintCompare("0x0", "0x0", 0);
545 TestBigintCompare("0x1", "0x1", 0);
546 TestBigintCompare("-0x1", "-0x1", 0);
547 TestBigintCompare("0x1234567", "0x1234567", 0);
548 TestBigintCompare("-0x1234567", "-0x1234567", 0);
549 TestBigintCompare("0x12345678", "0x12345678", 0);
550 TestBigintCompare("-0x12345678", "-0x12345678", 0);
551 TestBigintCompare("0x123456789ABCDEF0", "0x123456789ABCDEF0", 0);
552 TestBigintCompare("-0x123456789ABCDEF0", "-0x123456789ABCDEF0", 0);
553 TestBigintCompare("0x123456789ABCDEF01", "0x123456789ABCDEF01", 0);
554 TestBigintCompare("-0x123456789ABCDEF01", "-0x123456789ABCDEF01", 0);
555 TestBigintCompare("0x1", "0x0", 1);
556 TestBigintCompare("-0x1", "-0x2", 1);
557 TestBigintCompare("0x1234567", "0x1234566", 1);
558 TestBigintCompare("-0x1234567", "-0x1234568", 1);
559 TestBigintCompare("0x12345678", "0x12345677", 1);
560 TestBigintCompare("-0x12345678", "-0x12345679", 1);
561 TestBigintCompare("0x123456789ABCDEF1", "0x123456789ABCDEF0", 1);
562 TestBigintCompare("-0x123456789ABCDEF0", "-0x123456789ABCDEF1", 1);
563 TestBigintCompare("0x123456789ABCDEF02", "0x123456789ABCDEF01", 1);
564 TestBigintCompare("-0x123456789ABCDEF00", "-0x123456789ABCDEF01", 1);
565 TestBigintCompare("0x10000000", "0xFFFFFFF", 1);
566 TestBigintCompare("-0x10000000", "-0xFFFFFFF", -1);
567 TestBigintCompare("0x100000000", "0xFFFFFFFF", 1);
568 TestBigintCompare("-0x100000000", "-0xFFFFFFFF", -1);
569 TestBigintCompare("0x10000000000000000", "0xFFFFFFFFFFFFFFFF", 1);
570 TestBigintCompare("-0x10000000000000000", "-0xFFFFFFFFFFFFFFFF", -1);
571 TestBigintCompare("0x10000000000000000", "0x0", 1);
572 TestBigintCompare("-0x10000000000000000", "0x0", -1);
573 TestBigintCompare("-0x1234567", "0x1234566", -1);
574 TestBigintCompare("-0x1234567", "0x1234568", -1);
575 TestBigintCompare("-0x12345678", "0x12345677", -1);
576 TestBigintCompare("-0x12345678", "0x12345670", -1);
577 TestBigintCompare("-0x123456789ABCDEF1", "0x123456789ABCDEF0", -1);
578 TestBigintCompare("-0x123456789ABCDEF0", "0x123456789ABCDEF1", -1);
579 TestBigintCompare("-0x123456789ABCDEF02", "0x123456789ABCDEF01", -1);
580 TestBigintCompare("-0x123456789ABCDEF00", "0x123456789ABCDEF01", -1);
581 TestBigintCompare("-0x10000000", "0xFFFFFFF", -1);
582 TestBigintCompare("-0x10000000", "0xFFFFFFF", -1);
583 TestBigintCompare("-0x100000000", "0xFFFFFFFF", -1);
584 TestBigintCompare("-0x100000000", "0xFFFFFFFF", -1);
585 TestBigintCompare("-0x10000000000000000", "0xFFFFFFFFFFFFFFFF", -1);
586 TestBigintCompare("-0x10000000000000000", "0xFFFFFFFFFFFFFFFF", -1);
587 TestBigintCompare("-0x10000000000000000", "0x0", -1);
588 TestBigintCompare("-0x10000000000000000", "0x0", -1);
589 }
590
591
592 TEST_CASE(BigintDecimalStrings) {
593 {
594 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0"));
595 EXPECT(bigint.FitsIntoSmi());
596 EXPECT_EQ(0, bigint.AsInt64Value());
597 }
598
599 {
600 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("1"));
601 EXPECT(bigint.FitsIntoSmi());
602 EXPECT_EQ(1, bigint.AsInt64Value());
603 }
604
605 {
606 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("703710"));
607 const char* str = bigint.ToHexCString(&ZoneAllocator);
608 EXPECT_STREQ("0xABCDE", str);
609 }
610
611 {
612 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("11259375"));
613 const char* str = bigint.ToHexCString(&ZoneAllocator);
614 EXPECT_STREQ("0xABCDEF", str);
615 }
616
617 {
618 const Bigint& bigint =
619 Bigint::Handle(Bigint::NewFromCString("1311768467463790320"));
620 const char* str = bigint.ToHexCString(&ZoneAllocator);
621 EXPECT_STREQ("0x123456789ABCDEF0", str);
622 }
623
624 {
625 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("-0"));
626 EXPECT(bigint.FitsIntoSmi());
627 EXPECT_EQ(0, bigint.AsInt64Value());
628 }
629
630 {
631 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("-1"));
632 EXPECT(bigint.FitsIntoSmi());
633 EXPECT_EQ(-1, bigint.AsInt64Value());
634 }
635
636 {
637 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("-703710"));
638 const char* str = bigint.ToHexCString(&ZoneAllocator);
639 EXPECT_STREQ("-0xABCDE", str);
640 }
641
642 {
643 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("-11259375"));
644 const char* str = bigint.ToHexCString(&ZoneAllocator);
645 EXPECT_STREQ("-0xABCDEF", str);
646 }
647
648 {
649 const Bigint& bigint = Bigint::Handle(
650 Bigint::NewFromCString("-1311768467463790320"));
651 const char* str = bigint.ToHexCString(&ZoneAllocator);
652 EXPECT_STREQ("-0x123456789ABCDEF0", str);
653 }
654 }
655
656 } // namespace dart
OLDNEW
« no previous file with comments | « no previous file | runtime/vm/object.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698