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

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

Issue 11968020: Fix for 7941 (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 11 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 | « runtime/vm/object.cc ('k') | runtime/vm/raw_object.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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/assembler.h" 6 #include "vm/assembler.h"
7 #include "vm/bigint_operations.h" 7 #include "vm/bigint_operations.h"
8 #include "vm/class_finalizer.h" 8 #include "vm/class_finalizer.h"
9 #include "vm/isolate.h" 9 #include "vm/isolate.h"
10 #include "vm/object.h" 10 #include "vm/object.h"
(...skipping 1741 matching lines...) Expand 10 before | Expand all | Expand 10 after
1752 } 1752 }
1753 EXPECT_EQ(10, array.Length()); 1753 EXPECT_EQ(10, array.Length());
1754 for (intptr_t i = 0; i < 10; i++) { 1754 for (intptr_t i = 0; i < 10; i++) {
1755 expected_value = Smi::New(i * 10); 1755 expected_value = Smi::New(i * 10);
1756 value ^= array.At(i); 1756 value ^= array.At(i);
1757 EXPECT(value.Equals(expected_value)); 1757 EXPECT(value.Equals(expected_value));
1758 } 1758 }
1759 1759
1760 // Test the MakeArray functionality to make sure the resulting array 1760 // Test the MakeArray functionality to make sure the resulting array
1761 // object is properly setup. 1761 // object is properly setup.
1762 // 1. Should produce an array of length 2 and a remainder array of length 1. 1762 // 1. Should produce an array of length 2 and a left over int8 array.
1763 Array& new_array = Array::Handle(); 1763 Array& new_array = Array::Handle();
1764 Int8Array& left_over_array = Int8Array::Handle();
1764 Object& obj = Object::Handle(); 1765 Object& obj = Object::Handle();
1765 uword addr = 0; 1766 uword addr = 0;
1766 intptr_t used_size = 0; 1767 intptr_t used_size = 0;
1767 1768
1768 array = GrowableObjectArray::New(kArrayLen + 1); 1769 array = GrowableObjectArray::New(kArrayLen + 1);
1769 EXPECT_EQ(kArrayLen + 1, array.Capacity()); 1770 EXPECT_EQ(kArrayLen + 1, array.Capacity());
1770 EXPECT_EQ(0, array.Length()); 1771 EXPECT_EQ(0, array.Length());
1771 for (intptr_t i = 0; i < 2; i++) { 1772 for (intptr_t i = 0; i < 2; i++) {
1772 value = Smi::New(i); 1773 value = Smi::New(i);
1773 array.Add(value); 1774 array.Add(value);
1774 } 1775 }
1775 used_size = Array::InstanceSize(array.Length()); 1776 used_size = Array::InstanceSize(array.Length());
1776 new_array = Array::MakeArray(array); 1777 new_array = Array::MakeArray(array);
1777 addr = RawObject::ToAddr(new_array.raw()); 1778 addr = RawObject::ToAddr(new_array.raw());
1778 obj = RawObject::FromAddr(addr); 1779 obj = RawObject::FromAddr(addr);
1779 EXPECT(obj.IsArray()); 1780 EXPECT(obj.IsArray());
1780 new_array ^= obj.raw(); 1781 new_array ^= obj.raw();
1781 EXPECT_EQ(2, new_array.Length()); 1782 EXPECT_EQ(2, new_array.Length());
1782 addr += used_size; 1783 addr += used_size;
1783 obj = RawObject::FromAddr(addr); 1784 obj = RawObject::FromAddr(addr);
1784 EXPECT(obj.IsArray()); 1785 EXPECT(obj.IsInt8Array());
1785 new_array ^= obj.raw(); 1786 left_over_array ^= obj.raw();
1786 EXPECT_EQ(0, new_array.Length()); 1787 EXPECT_EQ((2 * kWordSize), left_over_array.Length());
1787 1788
1788 // 2. Should produce an array of length 3 and a remainder object. 1789 // 2. Should produce an array of length 3 and a left over int8 array.
1789 array = GrowableObjectArray::New(kArrayLen); 1790 array = GrowableObjectArray::New(kArrayLen);
1790 EXPECT_EQ(kArrayLen, array.Capacity()); 1791 EXPECT_EQ(kArrayLen, array.Capacity());
1791 EXPECT_EQ(0, array.Length()); 1792 EXPECT_EQ(0, array.Length());
1792 for (intptr_t i = 0; i < 3; i++) { 1793 for (intptr_t i = 0; i < 3; i++) {
1793 value = Smi::New(i); 1794 value = Smi::New(i);
1794 array.Add(value); 1795 array.Add(value);
1795 } 1796 }
1796 used_size = Array::InstanceSize(array.Length()); 1797 used_size = Array::InstanceSize(array.Length());
1797 new_array = Array::MakeArray(array); 1798 new_array = Array::MakeArray(array);
1798 addr = RawObject::ToAddr(new_array.raw()); 1799 addr = RawObject::ToAddr(new_array.raw());
1799 obj = RawObject::FromAddr(addr); 1800 obj = RawObject::FromAddr(addr);
1800 EXPECT(obj.IsArray()); 1801 EXPECT(obj.IsArray());
1801 new_array ^= obj.raw(); 1802 new_array ^= obj.raw();
1802 EXPECT_EQ(3, new_array.Length()); 1803 EXPECT_EQ(3, new_array.Length());
1803 addr += used_size; 1804 addr += used_size;
1804 obj = RawObject::FromAddr(addr); 1805 obj = RawObject::FromAddr(addr);
1805 EXPECT(!obj.IsArray()); 1806 EXPECT(obj.IsInt8Array());
1807 left_over_array ^= obj.raw();
1808 EXPECT_EQ(0, left_over_array.Length());
1806 1809
1807 // 3. Should produce an array of length 1 and a remainder array of length 2. 1810 // 3. Should produce an array of length 1 and a left over int8 array.
1808 array = GrowableObjectArray::New(kArrayLen + 3); 1811 array = GrowableObjectArray::New(kArrayLen + 3);
1809 EXPECT_EQ((kArrayLen + 3), array.Capacity()); 1812 EXPECT_EQ((kArrayLen + 3), array.Capacity());
1810 EXPECT_EQ(0, array.Length()); 1813 EXPECT_EQ(0, array.Length());
1811 for (intptr_t i = 0; i < 1; i++) { 1814 for (intptr_t i = 0; i < 1; i++) {
1812 value = Smi::New(i); 1815 value = Smi::New(i);
1813 array.Add(value); 1816 array.Add(value);
1814 } 1817 }
1815 used_size = Array::InstanceSize(array.Length()); 1818 used_size = Array::InstanceSize(array.Length());
1816 new_array = Array::MakeArray(array); 1819 new_array = Array::MakeArray(array);
1817 addr = RawObject::ToAddr(new_array.raw()); 1820 addr = RawObject::ToAddr(new_array.raw());
1818 obj = RawObject::FromAddr(addr); 1821 obj = RawObject::FromAddr(addr);
1819 EXPECT(obj.IsArray()); 1822 EXPECT(obj.IsArray());
1820 new_array ^= obj.raw(); 1823 new_array ^= obj.raw();
1821 EXPECT_EQ(1, new_array.Length()); 1824 EXPECT_EQ(1, new_array.Length());
1822 addr += used_size; 1825 addr += used_size;
1823 obj = RawObject::FromAddr(addr); 1826 obj = RawObject::FromAddr(addr);
1824 EXPECT(obj.IsArray()); 1827 EXPECT(obj.IsInt8Array());
1825 new_array ^= obj.raw(); 1828 left_over_array ^= obj.raw();
1826 EXPECT_EQ(4, new_array.Length()); 1829 EXPECT_EQ((6 * kWordSize), left_over_array.Length());
1827 } 1830 }
1828 1831
1829 1832
1830 TEST_CASE(InternalByteArray) { 1833 TEST_CASE(InternalByteArray) {
1831 uint8_t data[] = { 253, 254, 255, 0, 1, 2, 3, 4 }; 1834 uint8_t data[] = { 253, 254, 255, 0, 1, 2, 3, 4 };
1832 intptr_t data_length = ARRAY_SIZE(data); 1835 intptr_t data_length = ARRAY_SIZE(data);
1833 1836
1834 const Int8Array& int8_array = 1837 const Int8Array& int8_array =
1835 Int8Array::Handle(Int8Array::New(reinterpret_cast<int8_t*>(data), 1838 Int8Array::Handle(Int8Array::New(reinterpret_cast<int8_t*>(data),
1836 data_length)); 1839 data_length));
(...skipping 1716 matching lines...) Expand 10 before | Expand all | Expand 10 after
3553 EXPECT_NE(test1.SourceFingerprint(), test3.SourceFingerprint()); 3556 EXPECT_NE(test1.SourceFingerprint(), test3.SourceFingerprint());
3554 EXPECT_NE(test3.SourceFingerprint(), test4.SourceFingerprint()); 3557 EXPECT_NE(test3.SourceFingerprint(), test4.SourceFingerprint());
3555 EXPECT_NE(test4.SourceFingerprint(), test5.SourceFingerprint()); 3558 EXPECT_NE(test4.SourceFingerprint(), test5.SourceFingerprint());
3556 EXPECT_NE(test5.SourceFingerprint(), test6.SourceFingerprint()); 3559 EXPECT_NE(test5.SourceFingerprint(), test6.SourceFingerprint());
3557 EXPECT_EQ(test6.SourceFingerprint(), test7.SourceFingerprint()); 3560 EXPECT_EQ(test6.SourceFingerprint(), test7.SourceFingerprint());
3558 } 3561 }
3559 3562
3560 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64). 3563 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64).
3561 3564
3562 } // namespace dart 3565 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/object.cc ('k') | runtime/vm/raw_object.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698