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

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

Issue 12907010: Fix some of teh scalarlist tests to use the TypedData VM class. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 9 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 1743 matching lines...) Expand 10 before | Expand all | Expand 10 after
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 left over int8 array. 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 TypedData& left_over_array = TypedData::Handle();
1765 Object& obj = Object::Handle(); 1765 Object& obj = Object::Handle();
1766 uword addr = 0; 1766 uword addr = 0;
1767 intptr_t used_size = 0; 1767 intptr_t used_size = 0;
1768 1768
1769 array = GrowableObjectArray::New(kArrayLen + 1); 1769 array = GrowableObjectArray::New(kArrayLen + 1);
1770 EXPECT_EQ(kArrayLen + 1, array.Capacity()); 1770 EXPECT_EQ(kArrayLen + 1, array.Capacity());
1771 EXPECT_EQ(0, array.Length()); 1771 EXPECT_EQ(0, array.Length());
1772 for (intptr_t i = 0; i < 2; i++) { 1772 for (intptr_t i = 0; i < 2; i++) {
1773 value = Smi::New(i); 1773 value = Smi::New(i);
1774 array.Add(value); 1774 array.Add(value);
1775 } 1775 }
1776 used_size = Array::InstanceSize(array.Length()); 1776 used_size = Array::InstanceSize(array.Length());
1777 new_array = Array::MakeArray(array); 1777 new_array = Array::MakeArray(array);
1778 addr = RawObject::ToAddr(new_array.raw()); 1778 addr = RawObject::ToAddr(new_array.raw());
1779 obj = RawObject::FromAddr(addr); 1779 obj = RawObject::FromAddr(addr);
1780 EXPECT(obj.IsArray()); 1780 EXPECT(obj.IsArray());
1781 new_array ^= obj.raw(); 1781 new_array ^= obj.raw();
1782 EXPECT_EQ(2, new_array.Length()); 1782 EXPECT_EQ(2, new_array.Length());
1783 addr += used_size; 1783 addr += used_size;
1784 obj = RawObject::FromAddr(addr); 1784 obj = RawObject::FromAddr(addr);
1785 EXPECT(obj.IsInt8Array()); 1785 EXPECT(obj.IsTypedData());
1786 left_over_array ^= obj.raw(); 1786 left_over_array ^= obj.raw();
1787 EXPECT_EQ((2 * kWordSize), left_over_array.Length()); 1787 EXPECT_EQ((2 * kWordSize), left_over_array.Length());
1788 1788
1789 // 2. Should produce an array of length 3 and a left over int8 array. 1789 // 2. Should produce an array of length 3 and a left over int8 array.
1790 array = GrowableObjectArray::New(kArrayLen); 1790 array = GrowableObjectArray::New(kArrayLen);
1791 EXPECT_EQ(kArrayLen, array.Capacity()); 1791 EXPECT_EQ(kArrayLen, array.Capacity());
1792 EXPECT_EQ(0, array.Length()); 1792 EXPECT_EQ(0, array.Length());
1793 for (intptr_t i = 0; i < 3; i++) { 1793 for (intptr_t i = 0; i < 3; i++) {
1794 value = Smi::New(i); 1794 value = Smi::New(i);
1795 array.Add(value); 1795 array.Add(value);
1796 } 1796 }
1797 used_size = Array::InstanceSize(array.Length()); 1797 used_size = Array::InstanceSize(array.Length());
1798 new_array = Array::MakeArray(array); 1798 new_array = Array::MakeArray(array);
1799 addr = RawObject::ToAddr(new_array.raw()); 1799 addr = RawObject::ToAddr(new_array.raw());
1800 obj = RawObject::FromAddr(addr); 1800 obj = RawObject::FromAddr(addr);
1801 EXPECT(obj.IsArray()); 1801 EXPECT(obj.IsArray());
1802 new_array ^= obj.raw(); 1802 new_array ^= obj.raw();
1803 EXPECT_EQ(3, new_array.Length()); 1803 EXPECT_EQ(3, new_array.Length());
1804 addr += used_size; 1804 addr += used_size;
1805 obj = RawObject::FromAddr(addr); 1805 obj = RawObject::FromAddr(addr);
1806 EXPECT(obj.IsInt8Array()); 1806 EXPECT(obj.IsTypedData());
1807 left_over_array ^= obj.raw(); 1807 left_over_array ^= obj.raw();
1808 EXPECT_EQ(0, left_over_array.Length()); 1808 EXPECT_EQ(0, left_over_array.Length());
1809 1809
1810 // 3. Should produce an array of length 1 and a left over int8 array. 1810 // 3. Should produce an array of length 1 and a left over int8 array.
1811 array = GrowableObjectArray::New(kArrayLen + 3); 1811 array = GrowableObjectArray::New(kArrayLen + 3);
1812 EXPECT_EQ((kArrayLen + 3), array.Capacity()); 1812 EXPECT_EQ((kArrayLen + 3), array.Capacity());
1813 EXPECT_EQ(0, array.Length()); 1813 EXPECT_EQ(0, array.Length());
1814 for (intptr_t i = 0; i < 1; i++) { 1814 for (intptr_t i = 0; i < 1; i++) {
1815 value = Smi::New(i); 1815 value = Smi::New(i);
1816 array.Add(value); 1816 array.Add(value);
1817 } 1817 }
1818 used_size = Array::InstanceSize(array.Length()); 1818 used_size = Array::InstanceSize(array.Length());
1819 new_array = Array::MakeArray(array); 1819 new_array = Array::MakeArray(array);
1820 addr = RawObject::ToAddr(new_array.raw()); 1820 addr = RawObject::ToAddr(new_array.raw());
1821 obj = RawObject::FromAddr(addr); 1821 obj = RawObject::FromAddr(addr);
1822 EXPECT(obj.IsArray()); 1822 EXPECT(obj.IsArray());
1823 new_array ^= obj.raw(); 1823 new_array ^= obj.raw();
1824 EXPECT_EQ(1, new_array.Length()); 1824 EXPECT_EQ(1, new_array.Length());
1825 addr += used_size; 1825 addr += used_size;
1826 obj = RawObject::FromAddr(addr); 1826 obj = RawObject::FromAddr(addr);
1827 EXPECT(obj.IsInt8Array()); 1827 EXPECT(obj.IsTypedData());
1828 left_over_array ^= obj.raw(); 1828 left_over_array ^= obj.raw();
1829 EXPECT_EQ((6 * kWordSize), left_over_array.Length()); 1829 EXPECT_EQ((6 * kWordSize), left_over_array.Length());
1830 } 1830 }
1831 1831
1832 1832
1833 TEST_CASE(InternalByteArray) { 1833 TEST_CASE(InternalTypedData) {
1834 uint8_t data[] = { 253, 254, 255, 0, 1, 2, 3, 4 }; 1834 uint8_t data[] = { 253, 254, 255, 0, 1, 2, 3, 4 };
1835 intptr_t data_length = ARRAY_SIZE(data); 1835 intptr_t data_length = ARRAY_SIZE(data);
1836 1836
1837 const Int8Array& int8_array = 1837 const TypedData& int8_array =
1838 Int8Array::Handle(Int8Array::New(reinterpret_cast<int8_t*>(data), 1838 TypedData::Handle(TypedData::New(kTypedDataInt8ArrayCid, data_length));
1839 data_length));
1840 EXPECT(!int8_array.IsNull()); 1839 EXPECT(!int8_array.IsNull());
1841 EXPECT_EQ(data_length, int8_array.Length()); 1840 EXPECT_EQ(data_length, int8_array.Length());
1841 for (intptr_t i = 0; i < data_length; ++i) {
1842 int8_array.SetInt8(i, data[i]);
1843 }
1842 1844
1843 EXPECT_EQ(-3, int8_array.At(0)); 1845 EXPECT_EQ(-3, int8_array.GetInt8(0));
1844 uint8_t at_0; 1846 EXPECT_EQ(253, int8_array.GetUint8(0));
1845 ByteArray::Copy(&at_0, int8_array, 0, sizeof(at_0));
1846 EXPECT_EQ(253, at_0);
1847 1847
1848 EXPECT_EQ(-2, int8_array.At(1)); 1848 EXPECT_EQ(-2, int8_array.GetInt8(1));
1849 uint8_t at_1; 1849 EXPECT_EQ(254, int8_array.GetUint8(1));
1850 ByteArray::Copy(&at_1, int8_array, 1, sizeof(at_1));
1851 EXPECT_EQ(254, at_1);
1852 1850
1853 EXPECT_EQ(-1, int8_array.At(2)); 1851 EXPECT_EQ(-1, int8_array.GetInt8(2));
1854 uint8_t at_2; 1852 EXPECT_EQ(255, int8_array.GetUint8(2));
1855 ByteArray::Copy(&at_2, int8_array, 2, sizeof(at_2));
1856 EXPECT_EQ(255, at_2);
1857 1853
1858 EXPECT_EQ(0, int8_array.At(3)); 1854 EXPECT_EQ(0, int8_array.GetInt8(3));
1859 uint8_t at_3; 1855 EXPECT_EQ(0, int8_array.GetUint8(3));
1860 ByteArray::Copy(&at_3, int8_array, 3, sizeof(at_3));
1861 EXPECT_EQ(0, at_3);
1862 1856
1863 EXPECT_EQ(1, int8_array.At(4)); 1857 EXPECT_EQ(1, int8_array.GetInt8(4));
1864 uint8_t at_4; 1858 EXPECT_EQ(1, int8_array.GetUint8(4));
1865 ByteArray::Copy(&at_4, int8_array, 4, sizeof(at_4));
1866 EXPECT_EQ(1, at_4);
1867 1859
1868 EXPECT_EQ(2, int8_array.At(5)); 1860 EXPECT_EQ(2, int8_array.GetInt8(5));
1869 uint8_t at_5; 1861 EXPECT_EQ(2, int8_array.GetUint8(5));
1870 ByteArray::Copy(&at_5, int8_array, 5, sizeof(at_5));
1871 EXPECT_EQ(2, at_5);
1872 1862
1873 EXPECT_EQ(3, int8_array.At(6)); 1863 EXPECT_EQ(3, int8_array.GetInt8(6));
1874 uint8_t at_6; 1864 EXPECT_EQ(3, int8_array.GetUint8(6));
1875 ByteArray::Copy(&at_6, int8_array, 6, sizeof(at_6));
1876 EXPECT_EQ(3, at_6);
1877 1865
1878 EXPECT_EQ(4, int8_array.At(7)); 1866 EXPECT_EQ(4, int8_array.GetInt8(7));
1879 uint8_t at_7; 1867 EXPECT_EQ(4, int8_array.GetUint8(7));
1880 ByteArray::Copy(&at_7, int8_array, 7, sizeof(at_7));
1881 EXPECT_EQ(4, at_7);
1882 1868
1883 const Int8Array& int8_array2 = 1869 const TypedData& int8_array2 =
1884 Int8Array::Handle(Int8Array::New(reinterpret_cast<int8_t*>(data), 1870 TypedData::Handle(TypedData::New(kTypedDataInt8ArrayCid, data_length));
1885 data_length));
1886 EXPECT(!int8_array.IsNull()); 1871 EXPECT(!int8_array.IsNull());
1887 EXPECT_EQ(data_length, int8_array.Length()); 1872 EXPECT_EQ(data_length, int8_array.Length());
1873 for (intptr_t i = 0; i < data_length; ++i) {
1874 int8_array2.SetInt8(i, data[i]);
1875 }
1888 1876
1889 for (intptr_t i = 0; i < data_length; ++i) { 1877 for (intptr_t i = 0; i < data_length; ++i) {
1890 EXPECT_EQ(int8_array.At(i), int8_array2.At(i)); 1878 EXPECT_EQ(int8_array.GetInt8(i), int8_array2.GetInt8(i));
1891 } 1879 }
1892 for (intptr_t i = 0; i < data_length; ++i) { 1880 for (intptr_t i = 0; i < data_length; ++i) {
1893 int8_array.SetAt(i, 123 + i); 1881 int8_array.SetInt8(i, 123 + i);
1894 } 1882 }
1895 for (intptr_t i = 0; i < data_length; ++i) { 1883 for (intptr_t i = 0; i < data_length; ++i) {
1896 EXPECT(int8_array.At(i) != int8_array2.At(i)); 1884 EXPECT(int8_array.GetInt8(i) != int8_array2.GetInt8(i));
1897 } 1885 }
1898 } 1886 }
1899 1887
1900 1888
1901 TEST_CASE(ExternalByteArray) { 1889 TEST_CASE(ExternalTypedData) {
1902 uint8_t data[] = { 253, 254, 255, 0, 1, 2, 3, 4 }; 1890 uint8_t data[] = { 253, 254, 255, 0, 1, 2, 3, 4 };
1903 intptr_t data_length = ARRAY_SIZE(data); 1891 intptr_t data_length = ARRAY_SIZE(data);
1904 1892
1905 const ExternalInt8Array& int8_array = 1893 const ExternalTypedData& int8_array =
1906 ExternalInt8Array::Handle( 1894 ExternalTypedData::Handle(
1907 ExternalInt8Array::New(reinterpret_cast<int8_t*>(data), 1895 ExternalTypedData::New(kExternalTypedDataInt8ArrayCid,
1896 data,
1908 data_length)); 1897 data_length));
1909 EXPECT(!int8_array.IsNull()); 1898 EXPECT(!int8_array.IsNull());
1910 EXPECT_EQ(data_length, int8_array.Length()); 1899 EXPECT_EQ(data_length, int8_array.Length());
1911 1900
1912 const ExternalUint8Array& uint8_array = 1901 const ExternalTypedData& uint8_array =
1913 ExternalUint8Array::Handle( 1902 ExternalTypedData::Handle(
1914 ExternalUint8Array::New(data, data_length)); 1903 ExternalTypedData::New(kExternalTypedDataUint8ArrayCid,
1904 data,
1905 data_length));
1915 EXPECT(!uint8_array.IsNull()); 1906 EXPECT(!uint8_array.IsNull());
1916 EXPECT_EQ(data_length, uint8_array.Length()); 1907 EXPECT_EQ(data_length, uint8_array.Length());
1917 1908
1918 const ExternalUint8ClampedArray& uint8_clamped_array = 1909 const ExternalTypedData& uint8_clamped_array =
1919 ExternalUint8ClampedArray::Handle( 1910 ExternalTypedData::Handle(
1920 ExternalUint8ClampedArray::New(data, data_length)); 1911 ExternalTypedData::New(kExternalTypedDataUint8ClampedArrayCid,
1912 data,
1913 data_length));
1921 EXPECT(!uint8_clamped_array.IsNull()); 1914 EXPECT(!uint8_clamped_array.IsNull());
1922 EXPECT_EQ(data_length, uint8_clamped_array.Length()); 1915 EXPECT_EQ(data_length, uint8_clamped_array.Length());
1923 1916
1924 EXPECT_EQ(-3, int8_array.At(0)); 1917 EXPECT_EQ(-3, int8_array.GetInt8(0));
1925 EXPECT_EQ(253, uint8_array.At(0)); 1918 EXPECT_EQ(253, uint8_array.GetUint8(0));
1926 EXPECT_EQ(253, uint8_clamped_array.At(0)); 1919 EXPECT_EQ(253, uint8_clamped_array.GetUint8(0));
1927 1920
1928 EXPECT_EQ(-2, int8_array.At(1)); 1921 EXPECT_EQ(-2, int8_array.GetInt8(1));
1929 EXPECT_EQ(254, uint8_array.At(1)); 1922 EXPECT_EQ(254, uint8_array.GetUint8(1));
1930 EXPECT_EQ(254, uint8_clamped_array.At(1)); 1923 EXPECT_EQ(254, uint8_clamped_array.GetUint8(1));
1931 1924
1932 EXPECT_EQ(-1, int8_array.At(2)); 1925 EXPECT_EQ(-1, int8_array.GetInt8(2));
1933 EXPECT_EQ(255, uint8_array.At(2)); 1926 EXPECT_EQ(255, uint8_array.GetUint8(2));
1934 EXPECT_EQ(255, uint8_clamped_array.At(2)); 1927 EXPECT_EQ(255, uint8_clamped_array.GetUint8(2));
1935 1928
1936 EXPECT_EQ(0, int8_array.At(3)); 1929 EXPECT_EQ(0, int8_array.GetInt8(3));
1937 EXPECT_EQ(0, uint8_array.At(3)); 1930 EXPECT_EQ(0, uint8_array.GetUint8(3));
1938 EXPECT_EQ(0, uint8_clamped_array.At(3)); 1931 EXPECT_EQ(0, uint8_clamped_array.GetUint8(3));
1939 1932
1940 EXPECT_EQ(1, int8_array.At(4)); 1933 EXPECT_EQ(1, int8_array.GetInt8(4));
1941 EXPECT_EQ(1, uint8_array.At(4)); 1934 EXPECT_EQ(1, uint8_array.GetUint8(4));
1942 EXPECT_EQ(1, uint8_clamped_array.At(4)); 1935 EXPECT_EQ(1, uint8_clamped_array.GetUint8(4));
1943 1936
1944 EXPECT_EQ(2, int8_array.At(5)); 1937 EXPECT_EQ(2, int8_array.GetInt8(5));
1945 EXPECT_EQ(2, uint8_array.At(5)); 1938 EXPECT_EQ(2, uint8_array.GetUint8(5));
1946 EXPECT_EQ(2, uint8_clamped_array.At(5)); 1939 EXPECT_EQ(2, uint8_clamped_array.GetUint8(5));
1947 1940
1948 for (intptr_t i = 0 ; i < int8_array.Length(); ++i) { 1941 for (intptr_t i = 0 ; i < int8_array.Length(); ++i) {
1949 uint8_t value = 0; 1942 EXPECT_EQ(int8_array.GetUint8(i), uint8_array.GetUint8(i));
1950 ByteArray::Copy(&value, int8_array, i, sizeof(value));
1951 EXPECT_EQ(value, uint8_array.At(i));
1952 } 1943 }
1953 1944
1954 int8_array.SetAt(2, -123); 1945 int8_array.SetInt8(2, -123);
1955 uint8_array.SetAt(0, 123); 1946 uint8_array.SetUint8(0, 123);
1956 for (intptr_t i = 0 ; i < int8_array.Length(); ++i) { 1947 for (intptr_t i = 0 ; i < int8_array.Length(); ++i) {
1957 int8_t value = 0; 1948 EXPECT_EQ(int8_array.GetInt8(i), uint8_array.GetInt8(i));
1958 ByteArray::Copy(&value, uint8_array, i, sizeof(value));
1959 EXPECT_EQ(int8_array.At(i), value);
1960 } 1949 }
1961 1950
1962 uint8_clamped_array.SetAt(0, 123); 1951 uint8_clamped_array.SetUint8(0, 123);
1963 for (intptr_t i = 0 ; i < int8_array.Length(); ++i) { 1952 for (intptr_t i = 0 ; i < int8_array.Length(); ++i) {
1964 int8_t value = 0; 1953 EXPECT_EQ(int8_array.GetUint8(i), uint8_clamped_array.GetUint8(i));
1965 ByteArray::Copy(&value, uint8_clamped_array, i, sizeof(value));
1966 EXPECT_EQ(int8_array.At(i), value);
1967 } 1954 }
1968 } 1955 }
1969 1956
1970 1957
1971 TEST_CASE(UInt8ByteArrayCopyInternal) {
1972 const uint8_t b_0_1_2_3[] = { 0, 1, 2, 3 };
1973 const uint8_t b_4_5_6_7[] = { 4, 5, 6, 7 };
1974
1975 const Uint8Array& internal =
1976 Uint8Array::Handle(Uint8Array::New(b_0_1_2_3, ARRAY_SIZE(b_0_1_2_3)));
1977 EXPECT(!internal.IsNull());
1978 EXPECT_EQ(4, internal.Length());
1979 EXPECT_EQ(0, internal.At(0));
1980 EXPECT_EQ(1, internal.At(1));
1981 EXPECT_EQ(2, internal.At(2));
1982 EXPECT_EQ(3, internal.At(3));
1983
1984 // A zero length copy.
1985 ByteArray::Copy(internal, 0, b_4_5_6_7, 0);
1986 EXPECT_EQ(0, internal.At(0));
1987 EXPECT_EQ(1, internal.At(1));
1988 EXPECT_EQ(2, internal.At(2));
1989 EXPECT_EQ(3, internal.At(3));
1990
1991 // Another zero length copy.
1992 ByteArray::Copy(internal, 4, b_4_5_6_7, 0);
1993 EXPECT_EQ(0, internal.At(0));
1994 EXPECT_EQ(1, internal.At(1));
1995 EXPECT_EQ(2, internal.At(2));
1996 EXPECT_EQ(3, internal.At(3));
1997
1998 // A one element copy.
1999 ByteArray::Copy(internal, 0, b_4_5_6_7, 1);
2000 EXPECT_EQ(4, internal.At(0));
2001 EXPECT_EQ(1, internal.At(1));
2002 EXPECT_EQ(2, internal.At(2));
2003 EXPECT_EQ(3, internal.At(3));
2004
2005 // A two element copy.
2006 ByteArray::Copy(internal, 2, b_4_5_6_7, 2);
2007 EXPECT_EQ(4, internal.At(0));
2008 EXPECT_EQ(1, internal.At(1));
2009 EXPECT_EQ(4, internal.At(2));
2010 EXPECT_EQ(5, internal.At(3));
2011
2012 // A three element copy.
2013 ByteArray::Copy(internal, 1, b_4_5_6_7, 3);
2014 EXPECT_EQ(4, internal.At(0));
2015 EXPECT_EQ(4, internal.At(1));
2016 EXPECT_EQ(5, internal.At(2));
2017 EXPECT_EQ(6, internal.At(3));
2018
2019 // A four element copy.
2020 ByteArray::Copy(internal, 0, b_0_1_2_3, 4);
2021 EXPECT_EQ(0, internal.At(0));
2022 EXPECT_EQ(1, internal.At(1));
2023 EXPECT_EQ(2, internal.At(2));
2024 EXPECT_EQ(3, internal.At(3));
2025 }
2026
2027 TEST_CASE(ClampedUInt8ByteArrayCopyInternal) {
2028 const uint8_t b_0_1_2_3[] = { 0, 1, 2, 3 };
2029 const uint8_t b_4_5_6_7[] = { 4, 5, 6, 7 };
2030
2031 const Uint8ClampedArray& internal =
2032 Uint8ClampedArray::Handle(
2033 Uint8ClampedArray::New(b_0_1_2_3, ARRAY_SIZE(b_0_1_2_3)));
2034 EXPECT(!internal.IsNull());
2035 EXPECT_EQ(4, internal.Length());
2036 EXPECT_EQ(0, internal.At(0));
2037 EXPECT_EQ(1, internal.At(1));
2038 EXPECT_EQ(2, internal.At(2));
2039 EXPECT_EQ(3, internal.At(3));
2040
2041 // A zero length copy.
2042 ByteArray::Copy(internal, 0, b_4_5_6_7, 0);
2043 EXPECT_EQ(0, internal.At(0));
2044 EXPECT_EQ(1, internal.At(1));
2045 EXPECT_EQ(2, internal.At(2));
2046 EXPECT_EQ(3, internal.At(3));
2047
2048 // Another zero length copy.
2049 ByteArray::Copy(internal, 4, b_4_5_6_7, 0);
2050 EXPECT_EQ(0, internal.At(0));
2051 EXPECT_EQ(1, internal.At(1));
2052 EXPECT_EQ(2, internal.At(2));
2053 EXPECT_EQ(3, internal.At(3));
2054
2055 // A one element copy.
2056 ByteArray::Copy(internal, 0, b_4_5_6_7, 1);
2057 EXPECT_EQ(4, internal.At(0));
2058 EXPECT_EQ(1, internal.At(1));
2059 EXPECT_EQ(2, internal.At(2));
2060 EXPECT_EQ(3, internal.At(3));
2061
2062 // A two element copy.
2063 ByteArray::Copy(internal, 2, b_4_5_6_7, 2);
2064 EXPECT_EQ(4, internal.At(0));
2065 EXPECT_EQ(1, internal.At(1));
2066 EXPECT_EQ(4, internal.At(2));
2067 EXPECT_EQ(5, internal.At(3));
2068
2069 // A three element copy.
2070 ByteArray::Copy(internal, 1, b_4_5_6_7, 3);
2071 EXPECT_EQ(4, internal.At(0));
2072 EXPECT_EQ(4, internal.At(1));
2073 EXPECT_EQ(5, internal.At(2));
2074 EXPECT_EQ(6, internal.At(3));
2075
2076 // A four element copy.
2077 ByteArray::Copy(internal, 0, b_0_1_2_3, 4);
2078 EXPECT_EQ(0, internal.At(0));
2079 EXPECT_EQ(1, internal.At(1));
2080 EXPECT_EQ(2, internal.At(2));
2081 EXPECT_EQ(3, internal.At(3));
2082 }
2083
2084
2085 TEST_CASE(Uint8ByteArrayCopyExternal) {
2086 const uint8_t b_0_1_2_3[] = { 0, 1, 2, 3 };
2087 const uint8_t b_4_5_6_7[] = { 4, 5, 6, 7 };
2088
2089 uint8_t data[] = { 0, 1, 2, 3 };
2090
2091 const ExternalUint8Array& external =
2092 ExternalUint8Array::Handle(
2093 ExternalUint8Array::New(data, ARRAY_SIZE(data)));
2094 EXPECT(!external.IsNull());
2095 EXPECT_EQ(4, external.Length());
2096 EXPECT_EQ(0, external.At(0));
2097 EXPECT_EQ(1, external.At(1));
2098 EXPECT_EQ(2, external.At(2));
2099 EXPECT_EQ(3, external.At(3));
2100
2101 // A zero length copy.
2102 ByteArray::Copy(external, 0, b_4_5_6_7, 0);
2103 EXPECT_EQ(0, external.At(0));
2104 EXPECT_EQ(1, external.At(1));
2105 EXPECT_EQ(2, external.At(2));
2106 EXPECT_EQ(3, external.At(3));
2107
2108 // Another zero length copy.
2109 ByteArray::Copy(external, 4, b_4_5_6_7, 0);
2110 EXPECT_EQ(0, external.At(0));
2111 EXPECT_EQ(1, external.At(1));
2112 EXPECT_EQ(2, external.At(2));
2113 EXPECT_EQ(3, external.At(3));
2114
2115 // A one element copy.
2116 ByteArray::Copy(external, 0, b_4_5_6_7, 1);
2117 EXPECT_EQ(4, external.At(0));
2118 EXPECT_EQ(1, external.At(1));
2119 EXPECT_EQ(2, external.At(2));
2120 EXPECT_EQ(3, external.At(3));
2121
2122 // A two element copy.
2123 ByteArray::Copy(external, 2, b_4_5_6_7, 2);
2124 EXPECT_EQ(4, external.At(0));
2125 EXPECT_EQ(1, external.At(1));
2126 EXPECT_EQ(4, external.At(2));
2127 EXPECT_EQ(5, external.At(3));
2128
2129 // A three element copy.
2130 ByteArray::Copy(external, 1, b_4_5_6_7, 3);
2131 EXPECT_EQ(4, external.At(0));
2132 EXPECT_EQ(4, external.At(1));
2133 EXPECT_EQ(5, external.At(2));
2134 EXPECT_EQ(6, external.At(3));
2135
2136 // A four element copy.
2137 ByteArray::Copy(external, 0, b_0_1_2_3, 4);
2138 EXPECT_EQ(0, external.At(0));
2139 EXPECT_EQ(1, external.At(1));
2140 EXPECT_EQ(2, external.At(2));
2141 EXPECT_EQ(3, external.At(3));
2142 }
2143
2144
2145 TEST_CASE(ClampedUint8ByteArrayCopyExternal) {
2146 const uint8_t b_0_1_2_3[] = { 0, 1, 2, 3 };
2147 const uint8_t b_4_5_6_7[] = { 4, 5, 6, 7 };
2148
2149 uint8_t data[] = { 0, 1, 2, 3 };
2150
2151 const ExternalUint8ClampedArray& external =
2152 ExternalUint8ClampedArray::Handle(
2153 ExternalUint8ClampedArray::New(data, ARRAY_SIZE(data)));
2154 EXPECT(!external.IsNull());
2155 EXPECT_EQ(4, external.Length());
2156 EXPECT_EQ(0, external.At(0));
2157 EXPECT_EQ(1, external.At(1));
2158 EXPECT_EQ(2, external.At(2));
2159 EXPECT_EQ(3, external.At(3));
2160
2161 // A zero length copy.
2162 ByteArray::Copy(external, 0, b_4_5_6_7, 0);
2163 EXPECT_EQ(0, external.At(0));
2164 EXPECT_EQ(1, external.At(1));
2165 EXPECT_EQ(2, external.At(2));
2166 EXPECT_EQ(3, external.At(3));
2167
2168 // Another zero length copy.
2169 ByteArray::Copy(external, 4, b_4_5_6_7, 0);
2170 EXPECT_EQ(0, external.At(0));
2171 EXPECT_EQ(1, external.At(1));
2172 EXPECT_EQ(2, external.At(2));
2173 EXPECT_EQ(3, external.At(3));
2174
2175 // A one element copy.
2176 ByteArray::Copy(external, 0, b_4_5_6_7, 1);
2177 EXPECT_EQ(4, external.At(0));
2178 EXPECT_EQ(1, external.At(1));
2179 EXPECT_EQ(2, external.At(2));
2180 EXPECT_EQ(3, external.At(3));
2181
2182 // A two element copy.
2183 ByteArray::Copy(external, 2, b_4_5_6_7, 2);
2184 EXPECT_EQ(4, external.At(0));
2185 EXPECT_EQ(1, external.At(1));
2186 EXPECT_EQ(4, external.At(2));
2187 EXPECT_EQ(5, external.At(3));
2188
2189 // A three element copy.
2190 ByteArray::Copy(external, 1, b_4_5_6_7, 3);
2191 EXPECT_EQ(4, external.At(0));
2192 EXPECT_EQ(4, external.At(1));
2193 EXPECT_EQ(5, external.At(2));
2194 EXPECT_EQ(6, external.At(3));
2195
2196 // A four element copy.
2197 ByteArray::Copy(external, 0, b_0_1_2_3, 4);
2198 EXPECT_EQ(0, external.At(0));
2199 EXPECT_EQ(1, external.At(1));
2200 EXPECT_EQ(2, external.At(2));
2201 EXPECT_EQ(3, external.At(3));
2202 }
2203
2204
2205 TEST_CASE(Uint8ByteArrayCopyInternalExternal) {
2206 const uint8_t b_0_1_2_3[] = { 0, 1, 2, 3 };
2207 uint8_t data[] = { 4, 5, 6, 7 };
2208
2209 const Uint8Array& internal =
2210 Uint8Array::Handle(Uint8Array::New(b_0_1_2_3, ARRAY_SIZE(b_0_1_2_3)));
2211 EXPECT(!internal.IsNull());
2212 EXPECT_EQ(4, internal.Length());
2213 EXPECT_EQ(0, internal.At(0));
2214 EXPECT_EQ(1, internal.At(1));
2215 EXPECT_EQ(2, internal.At(2));
2216 EXPECT_EQ(3, internal.At(3));
2217
2218 const ExternalUint8Array& external =
2219 ExternalUint8Array::Handle(
2220 ExternalUint8Array::New(data, ARRAY_SIZE(data)));
2221 EXPECT(!external.IsNull());
2222 EXPECT_EQ(4, external.Length());
2223 EXPECT_EQ(4, external.At(0));
2224 EXPECT_EQ(5, external.At(1));
2225 EXPECT_EQ(6, external.At(2));
2226 EXPECT_EQ(7, external.At(3));
2227
2228 // A zero length copy.
2229 ByteArray::Copy(internal, 0, external, 0, 0);
2230 EXPECT_EQ(0, internal.At(0));
2231 EXPECT_EQ(1, internal.At(1));
2232 EXPECT_EQ(2, internal.At(2));
2233 EXPECT_EQ(3, internal.At(3));
2234
2235 // A zero length copy, take 2.
2236 ByteArray::Copy(internal, 4, external, 0, 0);
2237 EXPECT_EQ(0, internal.At(0));
2238 EXPECT_EQ(1, internal.At(1));
2239 EXPECT_EQ(2, internal.At(2));
2240 EXPECT_EQ(3, internal.At(3));
2241
2242 // A zero length copy, take 3.
2243 ByteArray::Copy(internal, 0, external, 4, 0);
2244 EXPECT_EQ(0, internal.At(0));
2245 EXPECT_EQ(1, internal.At(1));
2246 EXPECT_EQ(2, internal.At(2));
2247 EXPECT_EQ(3, internal.At(3));
2248
2249 // A zero length copy, take 4.
2250 ByteArray::Copy(internal, 4, external, 4, 0);
2251 EXPECT_EQ(0, internal.At(0));
2252 EXPECT_EQ(1, internal.At(1));
2253 EXPECT_EQ(2, internal.At(2));
2254 EXPECT_EQ(3, internal.At(3));
2255
2256 // A four element copy.
2257 ByteArray::Copy(internal, 0, external, 0, 4);
2258 EXPECT_EQ(4, internal.At(0));
2259 EXPECT_EQ(5, internal.At(1));
2260 EXPECT_EQ(6, internal.At(2));
2261 EXPECT_EQ(7, internal.At(3));
2262 EXPECT_EQ(4, external.At(0));
2263 EXPECT_EQ(5, external.At(1));
2264 EXPECT_EQ(6, external.At(2));
2265 EXPECT_EQ(7, external.At(3));
2266
2267 // A four element copy, take 2.
2268 ByteArray::Copy(external, 0, b_0_1_2_3, 4);
2269 EXPECT_EQ(0, external.At(0));
2270 EXPECT_EQ(1, external.At(1));
2271 EXPECT_EQ(2, external.At(2));
2272 EXPECT_EQ(3, external.At(3));
2273 ByteArray::Copy(external, 0, internal, 0, 4);
2274 EXPECT_EQ(4, internal.At(0));
2275 EXPECT_EQ(5, internal.At(1));
2276 EXPECT_EQ(6, internal.At(2));
2277 EXPECT_EQ(7, internal.At(3));
2278 EXPECT_EQ(4, external.At(0));
2279 EXPECT_EQ(5, external.At(1));
2280 EXPECT_EQ(6, external.At(2));
2281 EXPECT_EQ(7, external.At(3));
2282 }
2283
2284
2285 TEST_CASE(ClampedUint8ByteArrayCopyInternalExternal) {
2286 const uint8_t b_0_1_2_3[] = { 0, 1, 2, 3 };
2287 uint8_t data[] = { 4, 5, 6, 7 };
2288
2289 const Uint8ClampedArray& internal =
2290 Uint8ClampedArray::Handle(
2291 Uint8ClampedArray::New(b_0_1_2_3, ARRAY_SIZE(b_0_1_2_3)));
2292 EXPECT(!internal.IsNull());
2293 EXPECT_EQ(4, internal.Length());
2294 EXPECT_EQ(0, internal.At(0));
2295 EXPECT_EQ(1, internal.At(1));
2296 EXPECT_EQ(2, internal.At(2));
2297 EXPECT_EQ(3, internal.At(3));
2298
2299 const ExternalUint8ClampedArray& external =
2300 ExternalUint8ClampedArray::Handle(
2301 ExternalUint8ClampedArray::New(data, ARRAY_SIZE(data)));
2302 EXPECT(!external.IsNull());
2303 EXPECT_EQ(4, external.Length());
2304 EXPECT_EQ(4, external.At(0));
2305 EXPECT_EQ(5, external.At(1));
2306 EXPECT_EQ(6, external.At(2));
2307 EXPECT_EQ(7, external.At(3));
2308
2309 // A zero length copy.
2310 ByteArray::Copy(internal, 0, external, 0, 0);
2311 EXPECT_EQ(0, internal.At(0));
2312 EXPECT_EQ(1, internal.At(1));
2313 EXPECT_EQ(2, internal.At(2));
2314 EXPECT_EQ(3, internal.At(3));
2315
2316 // A zero length copy, take 2.
2317 ByteArray::Copy(internal, 4, external, 0, 0);
2318 EXPECT_EQ(0, internal.At(0));
2319 EXPECT_EQ(1, internal.At(1));
2320 EXPECT_EQ(2, internal.At(2));
2321 EXPECT_EQ(3, internal.At(3));
2322
2323 // A zero length copy, take 3.
2324 ByteArray::Copy(internal, 0, external, 4, 0);
2325 EXPECT_EQ(0, internal.At(0));
2326 EXPECT_EQ(1, internal.At(1));
2327 EXPECT_EQ(2, internal.At(2));
2328 EXPECT_EQ(3, internal.At(3));
2329
2330 // A zero length copy, take 4.
2331 ByteArray::Copy(internal, 4, external, 4, 0);
2332 EXPECT_EQ(0, internal.At(0));
2333 EXPECT_EQ(1, internal.At(1));
2334 EXPECT_EQ(2, internal.At(2));
2335 EXPECT_EQ(3, internal.At(3));
2336
2337 // A four element copy.
2338 ByteArray::Copy(internal, 0, external, 0, 4);
2339 EXPECT_EQ(4, internal.At(0));
2340 EXPECT_EQ(5, internal.At(1));
2341 EXPECT_EQ(6, internal.At(2));
2342 EXPECT_EQ(7, internal.At(3));
2343 EXPECT_EQ(4, external.At(0));
2344 EXPECT_EQ(5, external.At(1));
2345 EXPECT_EQ(6, external.At(2));
2346 EXPECT_EQ(7, external.At(3));
2347
2348 // A four element copy, take 2.
2349 ByteArray::Copy(external, 0, b_0_1_2_3, 4);
2350 EXPECT_EQ(0, external.At(0));
2351 EXPECT_EQ(1, external.At(1));
2352 EXPECT_EQ(2, external.At(2));
2353 EXPECT_EQ(3, external.At(3));
2354 ByteArray::Copy(external, 0, internal, 0, 4);
2355 EXPECT_EQ(4, internal.At(0));
2356 EXPECT_EQ(5, internal.At(1));
2357 EXPECT_EQ(6, internal.At(2));
2358 EXPECT_EQ(7, internal.At(3));
2359 EXPECT_EQ(4, external.At(0));
2360 EXPECT_EQ(5, external.At(1));
2361 EXPECT_EQ(6, external.At(2));
2362 EXPECT_EQ(7, external.At(3));
2363 }
2364
2365
2366 TEST_CASE(Script) { 1958 TEST_CASE(Script) {
2367 const char* url_chars = "builtin:test-case"; 1959 const char* url_chars = "builtin:test-case";
2368 const char* source_chars = "This will not compile."; 1960 const char* source_chars = "This will not compile.";
2369 const String& url = String::Handle(String::New(url_chars)); 1961 const String& url = String::Handle(String::New(url_chars));
2370 const String& source = String::Handle(String::New(source_chars)); 1962 const String& source = String::Handle(String::New(source_chars));
2371 const Script& script = Script::Handle(Script::New(url, 1963 const Script& script = Script::Handle(Script::New(url,
2372 source, 1964 source,
2373 RawScript::kSourceTag)); 1965 RawScript::kSourceTag));
2374 EXPECT(!script.IsNull()); 1966 EXPECT(!script.IsNull());
2375 EXPECT(script.IsScript()); 1967 EXPECT(script.IsScript());
(...skipping 1210 matching lines...) Expand 10 before | Expand all | Expand 10 after
3586 EXPECT_NE(test1.SourceFingerprint(), test3.SourceFingerprint()); 3178 EXPECT_NE(test1.SourceFingerprint(), test3.SourceFingerprint());
3587 EXPECT_NE(test3.SourceFingerprint(), test4.SourceFingerprint()); 3179 EXPECT_NE(test3.SourceFingerprint(), test4.SourceFingerprint());
3588 EXPECT_NE(test4.SourceFingerprint(), test5.SourceFingerprint()); 3180 EXPECT_NE(test4.SourceFingerprint(), test5.SourceFingerprint());
3589 EXPECT_NE(test5.SourceFingerprint(), test6.SourceFingerprint()); 3181 EXPECT_NE(test5.SourceFingerprint(), test6.SourceFingerprint());
3590 EXPECT_EQ(test6.SourceFingerprint(), test7.SourceFingerprint()); 3182 EXPECT_EQ(test6.SourceFingerprint(), test7.SourceFingerprint());
3591 } 3183 }
3592 3184
3593 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64). 3185 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64).
3594 3186
3595 } // namespace dart 3187 } // 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