OLD | NEW |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 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 | 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. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "platform/assert.h" | 5 #include "platform/assert.h" |
6 #include "vm/object.h" | 6 #include "vm/object.h" |
7 #include "vm/object_store.h" | 7 #include "vm/object_store.h" |
8 #include "vm/unit_test.h" | 8 #include "vm/unit_test.h" |
9 | 9 |
10 namespace dart { | 10 namespace dart { |
11 | 11 |
12 TEST_CASE(BigintSmi) { | 12 TEST_CASE(BigintSmi) { |
| 13 if (Bigint::IsDisabled()) { |
| 14 return; |
| 15 } |
| 16 |
13 { | 17 { |
14 const Smi& smi = Smi::Handle(Smi::New(5)); | 18 const Smi& smi = Smi::Handle(Smi::New(5)); |
15 const Bigint& bigint = Bigint::Handle(Bigint::NewFromInt64(smi.Value())); | 19 const Bigint& bigint = Bigint::Handle(Bigint::NewFromInt64(smi.Value())); |
16 EXPECT_EQ(5, bigint.AsInt64Value()); | 20 EXPECT_EQ(5, bigint.AsInt64Value()); |
17 EXPECT(bigint.FitsIntoSmi()); | 21 EXPECT(bigint.FitsIntoSmi()); |
18 Smi& smi_back = Smi::Handle(); | 22 Smi& smi_back = Smi::Handle(); |
19 smi_back ^= bigint.AsValidInteger(); | 23 smi_back ^= bigint.AsValidInteger(); |
20 EXPECT_EQ(5, smi_back.Value()); | 24 EXPECT_EQ(5, smi_back.Value()); |
21 } | 25 } |
22 | 26 |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
58 const Bigint& bigint = Bigint::Handle(Bigint::NewFromInt64(smi.Value())); | 62 const Bigint& bigint = Bigint::Handle(Bigint::NewFromInt64(smi.Value())); |
59 EXPECT_EQ(0x10000000, bigint.AsInt64Value()); | 63 EXPECT_EQ(0x10000000, bigint.AsInt64Value()); |
60 EXPECT(bigint.FitsIntoSmi()); | 64 EXPECT(bigint.FitsIntoSmi()); |
61 Smi& smi_back = Smi::Handle(); | 65 Smi& smi_back = Smi::Handle(); |
62 smi_back ^= bigint.AsValidInteger(); | 66 smi_back ^= bigint.AsValidInteger(); |
63 EXPECT(0x10000000 == smi_back.Value()); | 67 EXPECT(0x10000000 == smi_back.Value()); |
64 } | 68 } |
65 } | 69 } |
66 | 70 |
67 TEST_CASE(BigintInt64) { | 71 TEST_CASE(BigintInt64) { |
| 72 if (Bigint::IsDisabled()) { |
| 73 return; |
| 74 } |
| 75 |
68 const int64_t kValue = 100000000; | 76 const int64_t kValue = 100000000; |
69 const int64_t kValue64 = kValue * kValue; | 77 const int64_t kValue64 = kValue * kValue; |
70 Bigint& bigint = Bigint::Handle(Bigint::NewFromInt64(kValue)); | 78 Bigint& bigint = Bigint::Handle(Bigint::NewFromInt64(kValue)); |
71 EXPECT_EQ(kValue, bigint.AsInt64Value()); | 79 EXPECT_EQ(kValue, bigint.AsInt64Value()); |
72 bigint = Bigint::NewFromInt64(kValue64); | 80 bigint = Bigint::NewFromInt64(kValue64); |
73 EXPECT_EQ(kValue64, bigint.AsInt64Value()); | 81 EXPECT_EQ(kValue64, bigint.AsInt64Value()); |
74 bigint = Bigint::NewFromInt64(-kValue64); | 82 bigint = Bigint::NewFromInt64(-kValue64); |
75 EXPECT_EQ(-kValue64, bigint.AsInt64Value()); | 83 EXPECT_EQ(-kValue64, bigint.AsInt64Value()); |
76 bigint = Bigint::NewFromInt64(kMinInt64); | 84 bigint = Bigint::NewFromInt64(kMinInt64); |
77 EXPECT(bigint.FitsIntoInt64()); | 85 EXPECT(bigint.FitsIntoInt64()); |
78 EXPECT_EQ(kMinInt64, bigint.AsInt64Value()); | 86 EXPECT_EQ(kMinInt64, bigint.AsInt64Value()); |
79 } | 87 } |
80 | 88 |
81 TEST_CASE(BigintUint64) { | 89 TEST_CASE(BigintUint64) { |
| 90 if (Bigint::IsDisabled()) { |
| 91 return; |
| 92 } |
| 93 |
82 const Bigint& one = Bigint::Handle(Bigint::NewFromUint64(1)); | 94 const Bigint& one = Bigint::Handle(Bigint::NewFromUint64(1)); |
83 EXPECT(one.FitsIntoInt64()); | 95 EXPECT(one.FitsIntoInt64()); |
84 EXPECT(one.FitsIntoUint64()); | 96 EXPECT(one.FitsIntoUint64()); |
85 | 97 |
86 const Bigint& big = Bigint::Handle(Bigint::NewFromUint64(kMaxUint64)); | 98 const Bigint& big = Bigint::Handle(Bigint::NewFromUint64(kMaxUint64)); |
87 EXPECT(!big.FitsIntoInt64()); | 99 EXPECT(!big.FitsIntoInt64()); |
88 EXPECT(big.FitsIntoUint64()); | 100 EXPECT(big.FitsIntoUint64()); |
89 | 101 |
90 uint64_t back = big.AsUint64Value(); | 102 uint64_t back = big.AsUint64Value(); |
91 EXPECT_EQ(kMaxUint64, back); | 103 EXPECT_EQ(kMaxUint64, back); |
92 } | 104 } |
93 | 105 |
94 TEST_CASE(BigintDouble) { | 106 TEST_CASE(BigintDouble) { |
| 107 if (Bigint::IsDisabled()) { |
| 108 return; |
| 109 } |
| 110 |
95 Bigint& bigint = Bigint::Handle(Bigint::NewFromInt64(5)); | 111 Bigint& bigint = Bigint::Handle(Bigint::NewFromInt64(5)); |
96 EXPECT_EQ(5.0, bigint.AsDoubleValue()); | 112 EXPECT_EQ(5.0, bigint.AsDoubleValue()); |
97 | 113 |
98 bigint = Bigint::NewFromInt64(0); | 114 bigint = Bigint::NewFromInt64(0); |
99 EXPECT_EQ(0.0, bigint.AsDoubleValue()); | 115 EXPECT_EQ(0.0, bigint.AsDoubleValue()); |
100 | 116 |
101 bigint = Bigint::NewFromInt64(-12345678); | 117 bigint = Bigint::NewFromInt64(-12345678); |
102 EXPECT_EQ(-1.2345678e+7, bigint.AsDoubleValue()); | 118 EXPECT_EQ(-1.2345678e+7, bigint.AsDoubleValue()); |
103 | 119 |
104 bigint = Bigint::NewFromCString("1"); | 120 bigint = Bigint::NewFromCString("1"); |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
217 bigint = | 233 bigint = |
218 Bigint::NewFromCString("1844674407370955161600000000000000000000000"); | 234 Bigint::NewFromCString("1844674407370955161600000000000000000000000"); |
219 EXPECT_EQ(1.844674407370955e+42, bigint.AsDoubleValue()); | 235 EXPECT_EQ(1.844674407370955e+42, bigint.AsDoubleValue()); |
220 | 236 |
221 bigint = | 237 bigint = |
222 Bigint::NewFromCString("1844674407370955161600000000000000000000001"); | 238 Bigint::NewFromCString("1844674407370955161600000000000000000000001"); |
223 EXPECT_EQ(1.8446744073709553e+42, bigint.AsDoubleValue()); | 239 EXPECT_EQ(1.8446744073709553e+42, bigint.AsDoubleValue()); |
224 } | 240 } |
225 | 241 |
226 TEST_CASE(BigintHexStrings) { | 242 TEST_CASE(BigintHexStrings) { |
| 243 if (Bigint::IsDisabled()) { |
| 244 return; |
| 245 } |
| 246 |
227 Zone* zone = Thread::Current()->zone(); | 247 Zone* zone = Thread::Current()->zone(); |
228 { | 248 { |
229 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0x0")); | 249 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0x0")); |
230 EXPECT(bigint.FitsIntoSmi()); | 250 EXPECT(bigint.FitsIntoSmi()); |
231 EXPECT_EQ(0, bigint.AsInt64Value()); | 251 EXPECT_EQ(0, bigint.AsInt64Value()); |
232 } | 252 } |
233 | 253 |
234 { | 254 { |
235 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0x1")); | 255 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0x1")); |
236 EXPECT(bigint.FitsIntoSmi()); | 256 EXPECT(bigint.FitsIntoSmi()); |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
397 { | 417 { |
398 const char* test = "-12345678901234567890"; | 418 const char* test = "-12345678901234567890"; |
399 const char* out = "-0xAB54A98CEB1F0AD2"; | 419 const char* out = "-0xAB54A98CEB1F0AD2"; |
400 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(test)); | 420 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(test)); |
401 const char* str = bigint.ToHexCString(zone); | 421 const char* str = bigint.ToHexCString(zone); |
402 EXPECT_STREQ(out, str); | 422 EXPECT_STREQ(out, str); |
403 } | 423 } |
404 } | 424 } |
405 | 425 |
406 TEST_CASE(BigintDecStrings) { | 426 TEST_CASE(BigintDecStrings) { |
| 427 if (Bigint::IsDisabled()) { |
| 428 return; |
| 429 } |
| 430 |
407 Zone* zone = Thread::Current()->zone(); | 431 Zone* zone = Thread::Current()->zone(); |
408 { | 432 { |
409 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0x0")); | 433 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0x0")); |
410 const char* str = bigint.ToDecCString(zone); | 434 const char* str = bigint.ToDecCString(zone); |
411 EXPECT_STREQ("0", str); | 435 EXPECT_STREQ("0", str); |
412 } | 436 } |
413 | 437 |
414 { | 438 { |
415 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0x123")); | 439 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0x123")); |
416 const char* str = bigint.ToDecCString(zone); | 440 const char* str = bigint.ToDecCString(zone); |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
521 EXPECT(computed_compare < 0); | 545 EXPECT(computed_compare < 0); |
522 EXPECT(inverted_compare > 0); | 546 EXPECT(inverted_compare > 0); |
523 } else { | 547 } else { |
524 ASSERT(compare > 0); | 548 ASSERT(compare > 0); |
525 EXPECT(computed_compare > 0); | 549 EXPECT(computed_compare > 0); |
526 EXPECT(inverted_compare < 0); | 550 EXPECT(inverted_compare < 0); |
527 } | 551 } |
528 } | 552 } |
529 | 553 |
530 TEST_CASE(BigintCompare) { | 554 TEST_CASE(BigintCompare) { |
| 555 if (Bigint::IsDisabled()) { |
| 556 return; |
| 557 } |
| 558 |
531 TestBigintCompare("0x0", "0x0", 0); | 559 TestBigintCompare("0x0", "0x0", 0); |
532 TestBigintCompare("0x1", "0x1", 0); | 560 TestBigintCompare("0x1", "0x1", 0); |
533 TestBigintCompare("-0x1", "-0x1", 0); | 561 TestBigintCompare("-0x1", "-0x1", 0); |
534 TestBigintCompare("0x1234567", "0x1234567", 0); | 562 TestBigintCompare("0x1234567", "0x1234567", 0); |
535 TestBigintCompare("-0x1234567", "-0x1234567", 0); | 563 TestBigintCompare("-0x1234567", "-0x1234567", 0); |
536 TestBigintCompare("0x12345678", "0x12345678", 0); | 564 TestBigintCompare("0x12345678", "0x12345678", 0); |
537 TestBigintCompare("-0x12345678", "-0x12345678", 0); | 565 TestBigintCompare("-0x12345678", "-0x12345678", 0); |
538 TestBigintCompare("0x123456789ABCDEF0", "0x123456789ABCDEF0", 0); | 566 TestBigintCompare("0x123456789ABCDEF0", "0x123456789ABCDEF0", 0); |
539 TestBigintCompare("-0x123456789ABCDEF0", "-0x123456789ABCDEF0", 0); | 567 TestBigintCompare("-0x123456789ABCDEF0", "-0x123456789ABCDEF0", 0); |
540 TestBigintCompare("0x123456789ABCDEF01", "0x123456789ABCDEF01", 0); | 568 TestBigintCompare("0x123456789ABCDEF01", "0x123456789ABCDEF01", 0); |
(...skipping 28 matching lines...) Expand all Loading... |
569 TestBigintCompare("-0x10000000", "0xFFFFFFF", -1); | 597 TestBigintCompare("-0x10000000", "0xFFFFFFF", -1); |
570 TestBigintCompare("-0x100000000", "0xFFFFFFFF", -1); | 598 TestBigintCompare("-0x100000000", "0xFFFFFFFF", -1); |
571 TestBigintCompare("-0x100000000", "0xFFFFFFFF", -1); | 599 TestBigintCompare("-0x100000000", "0xFFFFFFFF", -1); |
572 TestBigintCompare("-0x10000000000000000", "0xFFFFFFFFFFFFFFFF", -1); | 600 TestBigintCompare("-0x10000000000000000", "0xFFFFFFFFFFFFFFFF", -1); |
573 TestBigintCompare("-0x10000000000000000", "0xFFFFFFFFFFFFFFFF", -1); | 601 TestBigintCompare("-0x10000000000000000", "0xFFFFFFFFFFFFFFFF", -1); |
574 TestBigintCompare("-0x10000000000000000", "0x0", -1); | 602 TestBigintCompare("-0x10000000000000000", "0x0", -1); |
575 TestBigintCompare("-0x10000000000000000", "0x0", -1); | 603 TestBigintCompare("-0x10000000000000000", "0x0", -1); |
576 } | 604 } |
577 | 605 |
578 TEST_CASE(BigintDecimalStrings) { | 606 TEST_CASE(BigintDecimalStrings) { |
| 607 if (Bigint::IsDisabled()) { |
| 608 return; |
| 609 } |
| 610 |
579 Zone* zone = Thread::Current()->zone(); | 611 Zone* zone = Thread::Current()->zone(); |
580 { | 612 { |
581 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0")); | 613 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0")); |
582 EXPECT(bigint.FitsIntoSmi()); | 614 EXPECT(bigint.FitsIntoSmi()); |
583 EXPECT_EQ(0, bigint.AsInt64Value()); | 615 EXPECT_EQ(0, bigint.AsInt64Value()); |
584 } | 616 } |
585 | 617 |
586 { | 618 { |
587 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("1")); | 619 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("1")); |
588 EXPECT(bigint.FitsIntoSmi()); | 620 EXPECT(bigint.FitsIntoSmi()); |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
634 | 666 |
635 { | 667 { |
636 const Bigint& bigint = | 668 const Bigint& bigint = |
637 Bigint::Handle(Bigint::NewFromCString("-1311768467463790320")); | 669 Bigint::Handle(Bigint::NewFromCString("-1311768467463790320")); |
638 const char* str = bigint.ToHexCString(zone); | 670 const char* str = bigint.ToHexCString(zone); |
639 EXPECT_STREQ("-0x123456789ABCDEF0", str); | 671 EXPECT_STREQ("-0x123456789ABCDEF0", str); |
640 } | 672 } |
641 } | 673 } |
642 | 674 |
643 } // namespace dart | 675 } // namespace dart |
OLD | NEW |