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

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

Issue 9368049: Add external byte array API and finalize external strings and byte arrays. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: address review comments Created 8 years, 10 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/isolate.h" 8 #include "vm/isolate.h"
9 #include "vm/object.h" 9 #include "vm/object.h"
10 #include "vm/object_store.h" 10 #include "vm/object_store.h"
(...skipping 1726 matching lines...) Expand 10 before | Expand all | Expand 10 after
1737 1737
1738 EXPECT_EQ(0, Array::Handle(Array::Empty()).Length()); 1738 EXPECT_EQ(0, Array::Handle(Array::Empty()).Length());
1739 } 1739 }
1740 1740
1741 1741
1742 TEST_CASE(ExternalByteArray) { 1742 TEST_CASE(ExternalByteArray) {
1743 uint8_t data[] = { 253, 254, 255, 0, 1, 2, 3, 4 }; 1743 uint8_t data[] = { 253, 254, 255, 0, 1, 2, 3, 4 };
1744 intptr_t data_length = ARRAY_SIZE(data); 1744 intptr_t data_length = ARRAY_SIZE(data);
1745 1745
1746 const ExternalByteArray& array1 = 1746 const ExternalByteArray& array1 =
1747 ExternalByteArray::Handle(ExternalByteArray::New(data, data_length)); 1747 ExternalByteArray::Handle(ExternalByteArray::New(data,
1748 data_length,
1749 NULL,
1750 NULL));
1748 EXPECT(!array1.IsNull()); 1751 EXPECT(!array1.IsNull());
1749 EXPECT_EQ(data_length, array1.Length()); 1752 EXPECT_EQ(data_length, array1.Length());
1750 EXPECT_EQ(-3, array1.At<int8_t>(0)); 1753 EXPECT_EQ(-3, array1.At<int8_t>(0));
1751 EXPECT_EQ(253, array1.At<uint8_t>(0)); 1754 EXPECT_EQ(253, array1.At<uint8_t>(0));
1752 EXPECT_EQ(-2, array1.At<int8_t>(1)); 1755 EXPECT_EQ(-2, array1.At<int8_t>(1));
1753 EXPECT_EQ(254, array1.At<uint8_t>(1)); 1756 EXPECT_EQ(254, array1.At<uint8_t>(1));
1754 EXPECT_EQ(-1, array1.At<int8_t>(2)); 1757 EXPECT_EQ(-1, array1.At<int8_t>(2));
1755 EXPECT_EQ(255, array1.At<uint8_t>(2)); 1758 EXPECT_EQ(255, array1.At<uint8_t>(2));
1756 EXPECT_EQ(0, array1.At<int8_t>(3)); 1759 EXPECT_EQ(0, array1.At<int8_t>(3));
1757 EXPECT_EQ(0, array1.At<uint8_t>(3)); 1760 EXPECT_EQ(0, array1.At<uint8_t>(3));
1758 EXPECT_EQ(1, array1.At<int8_t>(4)); 1761 EXPECT_EQ(1, array1.At<int8_t>(4));
1759 EXPECT_EQ(1, array1.At<uint8_t>(4)); 1762 EXPECT_EQ(1, array1.At<uint8_t>(4));
1760 EXPECT_EQ(2, array1.At<int8_t>(5)); 1763 EXPECT_EQ(2, array1.At<int8_t>(5));
1761 EXPECT_EQ(2, array1.At<uint8_t>(5)); 1764 EXPECT_EQ(2, array1.At<uint8_t>(5));
1762 1765
1763 const ExternalByteArray& array2 = 1766 const ExternalByteArray& array2 =
1764 ExternalByteArray::Handle(ExternalByteArray::New(data, data_length)); 1767 ExternalByteArray::Handle(ExternalByteArray::New(data,
1768 data_length,
1769 NULL,
1770 NULL));
1765 EXPECT(!array1.IsNull()); 1771 EXPECT(!array1.IsNull());
1766 EXPECT_EQ(data_length, array2.Length()); 1772 EXPECT_EQ(data_length, array2.Length());
1767 for (intptr_t i = 0 ; i < array1.Length(); ++i) { 1773 for (intptr_t i = 0 ; i < array1.Length(); ++i) {
1768 EXPECT_EQ(array1.At<uint8_t>(i), array2.At<uint8_t>(i)); 1774 EXPECT_EQ(array1.At<uint8_t>(i), array2.At<uint8_t>(i));
1769 } 1775 }
1770 1776
1771 array1.SetAt<uint8_t>(0, 123); 1777 array1.SetAt<uint8_t>(0, 123);
1772 array2.SetAt<int8_t>(2, -123); 1778 array2.SetAt<int8_t>(2, -123);
1773 for (intptr_t i = 0 ; i < array1.Length(); ++i) { 1779 for (intptr_t i = 0 ; i < array1.Length(); ++i) {
1774 EXPECT_EQ(array1.At<uint8_t>(i), array2.At<uint8_t>(i)); 1780 EXPECT_EQ(array1.At<uint8_t>(i), array2.At<uint8_t>(i));
1775 } 1781 }
1776 } 1782 }
1777 1783
1778 1784
1779 TEST_CASE(ExternalByteArrayAlignedAccess) { 1785 TEST_CASE(ExternalByteArrayAlignedAccess) {
1780 intptr_t length = 16; 1786 intptr_t length = 16;
1781 uint8_t* data = new uint8_t[length]; 1787 uint8_t* data = new uint8_t[length];
1782 1788
1783 const ExternalByteArray& array1 = 1789 const ExternalByteArray& array1 =
1784 ExternalByteArray::Handle(ExternalByteArray::New(data, length)); 1790 ExternalByteArray::Handle(ExternalByteArray::New(data,
1791 length,
1792 NULL,
1793 NULL));
1785 EXPECT(!array1.IsNull()); 1794 EXPECT(!array1.IsNull());
1786 EXPECT_EQ(length, array1.Length()); 1795 EXPECT_EQ(length, array1.Length());
1787 1796
1788 const ExternalByteArray& array2 = 1797 const ExternalByteArray& array2 =
1789 ExternalByteArray::Handle(ExternalByteArray::New(data, length)); 1798 ExternalByteArray::Handle(ExternalByteArray::New(data,
1799 length,
1800 NULL,
1801 NULL));
1790 EXPECT(!array2.IsNull()); 1802 EXPECT(!array2.IsNull());
1791 EXPECT_EQ(length, array2.Length()); 1803 EXPECT_EQ(length, array2.Length());
1792 1804
1793 memset(data, 0xAA, ARRAY_SIZE(data)); 1805 memset(data, 0xAA, ARRAY_SIZE(data));
1794 array1.SetAt<float>(0, FLT_MIN); 1806 array1.SetAt<float>(0, FLT_MIN);
1795 array1.SetAt<float>(4, FLT_MAX); 1807 array1.SetAt<float>(4, FLT_MAX);
1796 EXPECT_EQ(FLT_MIN, array2.At<float>(0)); 1808 EXPECT_EQ(FLT_MIN, array2.At<float>(0));
1797 EXPECT_EQ(FLT_MAX, array2.At<float>(4)); 1809 EXPECT_EQ(FLT_MAX, array2.At<float>(4));
1798 1810
1799 memset(data, 0xAA, ARRAY_SIZE(data)); 1811 memset(data, 0xAA, ARRAY_SIZE(data));
(...skipping 16 matching lines...) Expand all
1816 1828
1817 delete[] data; 1829 delete[] data;
1818 } 1830 }
1819 1831
1820 1832
1821 TEST_CASE(ExternalByteArrayUnlignedAccess) { 1833 TEST_CASE(ExternalByteArrayUnlignedAccess) {
1822 intptr_t length = 24; 1834 intptr_t length = 24;
1823 uint8_t* data = new uint8_t[length]; 1835 uint8_t* data = new uint8_t[length];
1824 1836
1825 const ExternalByteArray& array1 = 1837 const ExternalByteArray& array1 =
1826 ExternalByteArray::Handle(ExternalByteArray::New(data, length)); 1838 ExternalByteArray::Handle(ExternalByteArray::New(data,
1839 length,
1840 NULL,
1841 NULL));
1827 EXPECT(!array1.IsNull()); 1842 EXPECT(!array1.IsNull());
1828 EXPECT_EQ(length, array1.Length()); 1843 EXPECT_EQ(length, array1.Length());
1829 1844
1830 const ExternalByteArray& array2 = 1845 const ExternalByteArray& array2 =
1831 ExternalByteArray::Handle(ExternalByteArray::New(data, length)); 1846 ExternalByteArray::Handle(ExternalByteArray::New(data,
1847 length,
1848 NULL,
1849 NULL));
1832 EXPECT(!array2.IsNull()); 1850 EXPECT(!array2.IsNull());
1833 EXPECT_EQ(length, array2.Length()); 1851 EXPECT_EQ(length, array2.Length());
1834 1852
1835 int float_misalign = 3; 1853 int float_misalign = 3;
1836 memset(data, 0xAA, ARRAY_SIZE(data)); 1854 memset(data, 0xAA, ARRAY_SIZE(data));
1837 array1.SetUnalignedAt<float>(float_misalign, FLT_MIN); 1855 array1.SetUnalignedAt<float>(float_misalign, FLT_MIN);
1838 array1.SetUnalignedAt<float>(4 + float_misalign, FLT_MAX); 1856 array1.SetUnalignedAt<float>(4 + float_misalign, FLT_MAX);
1839 EXPECT_EQ(FLT_MIN, array2.UnalignedAt<float>(float_misalign)); 1857 EXPECT_EQ(FLT_MIN, array2.UnalignedAt<float>(float_misalign));
1840 EXPECT_EQ(FLT_MAX, array2.UnalignedAt<float>(4 + float_misalign)); 1858 EXPECT_EQ(FLT_MAX, array2.UnalignedAt<float>(4 + float_misalign));
1841 1859
(...skipping 21 matching lines...) Expand all
1863 } 1881 }
1864 1882
1865 1883
1866 TEST_CASE(ExternalByteArraySkewedUnalignedBaseAccess) { 1884 TEST_CASE(ExternalByteArraySkewedUnalignedBaseAccess) {
1867 intptr_t length = 24; 1885 intptr_t length = 24;
1868 uint8_t* data = new uint8_t[length]; 1886 uint8_t* data = new uint8_t[length];
1869 1887
1870 int skew = 2; 1888 int skew = 2;
1871 1889
1872 const ExternalByteArray& array1 = 1890 const ExternalByteArray& array1 =
1873 ExternalByteArray::Handle(ExternalByteArray::New(data + 3, length)); 1891 ExternalByteArray::Handle(ExternalByteArray::New(data + 3,
1892 length,
1893 NULL,
1894 NULL));
1874 EXPECT(!array1.IsNull()); 1895 EXPECT(!array1.IsNull());
1875 EXPECT_EQ(length, array1.Length()); 1896 EXPECT_EQ(length, array1.Length());
1876 1897
1877 const ExternalByteArray& array2 = 1898 const ExternalByteArray& array2 =
1878 ExternalByteArray::Handle(ExternalByteArray::New(data + 1, length)); 1899 ExternalByteArray::Handle(ExternalByteArray::New(data + 1,
1900 length,
1901 NULL,
1902 NULL));
1879 EXPECT(!array2.IsNull()); 1903 EXPECT(!array2.IsNull());
1880 EXPECT_EQ(length, array2.Length()); 1904 EXPECT_EQ(length, array2.Length());
1881 1905
1882 memset(data, 0xAA, ARRAY_SIZE(data)); 1906 memset(data, 0xAA, ARRAY_SIZE(data));
1883 array1.SetUnalignedAt<float>(0, FLT_MIN); 1907 array1.SetUnalignedAt<float>(0, FLT_MIN);
1884 array1.SetUnalignedAt<float>(4, FLT_MAX); 1908 array1.SetUnalignedAt<float>(4, FLT_MAX);
1885 EXPECT_EQ(FLT_MIN, array2.UnalignedAt<float>(0 + skew)); 1909 EXPECT_EQ(FLT_MIN, array2.UnalignedAt<float>(0 + skew));
1886 EXPECT_EQ(FLT_MAX, array2.UnalignedAt<float>(4 + skew)); 1910 EXPECT_EQ(FLT_MAX, array2.UnalignedAt<float>(4 + skew));
1887 1911
1888 memset(data, 0xAA, ARRAY_SIZE(data)); 1912 memset(data, 0xAA, ARRAY_SIZE(data));
(...skipping 500 matching lines...) Expand 10 before | Expand all | Expand 10 after
2389 cls = iterator.GetNextClass(); 2413 cls = iterator.GetNextClass();
2390 ASSERT((cls.raw() == ae66.raw()) || (cls.raw() == re44.raw())); 2414 ASSERT((cls.raw() == ae66.raw()) || (cls.raw() == re44.raw()));
2391 count++; 2415 count++;
2392 } 2416 }
2393 ASSERT(count == 2); 2417 ASSERT(count == 2);
2394 } 2418 }
2395 2419
2396 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64). 2420 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64).
2397 2421
2398 } // namespace dart 2422 } // 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