OLD | NEW |
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 1913 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1924 memset(data, 0xAA, ARRAY_SIZE(data)); | 1924 memset(data, 0xAA, ARRAY_SIZE(data)); |
1925 array1.SetUnalignedAt<double>(0, 0.0); | 1925 array1.SetUnalignedAt<double>(0, 0.0); |
1926 EXPECT_EQ(0.0, array2.UnalignedAt<double>(0 + skew)); | 1926 EXPECT_EQ(0.0, array2.UnalignedAt<double>(0 + skew)); |
1927 array2.SetUnalignedAt<double>(8 + skew, 1.0); | 1927 array2.SetUnalignedAt<double>(8 + skew, 1.0); |
1928 EXPECT_EQ(1.0, array1.UnalignedAt<double>(8)); | 1928 EXPECT_EQ(1.0, array1.UnalignedAt<double>(8)); |
1929 | 1929 |
1930 delete[] data; | 1930 delete[] data; |
1931 } | 1931 } |
1932 | 1932 |
1933 | 1933 |
| 1934 TEST_CASE(ExternalByteArrayCopy) { |
| 1935 const uint8_t b_0_1_2_3[] = { 0, 1, 2, 3 }; |
| 1936 const uint8_t b_4_5_6_7[] = { 4, 5, 6, 7 }; |
| 1937 |
| 1938 uint8_t data[] = { 0, 1, 2, 3 }; |
| 1939 const ExternalByteArray& external = |
| 1940 ExternalByteArray::Handle( |
| 1941 ExternalByteArray::New(data, ARRAY_SIZE(data), NULL, NULL)); |
| 1942 EXPECT(!external.IsNull()); |
| 1943 EXPECT_EQ(4, external.Length()); |
| 1944 EXPECT_EQ(0, external.At<uint8_t>(0)); |
| 1945 EXPECT_EQ(1, external.At<uint8_t>(1)); |
| 1946 EXPECT_EQ(2, external.At<uint8_t>(2)); |
| 1947 EXPECT_EQ(3, external.At<uint8_t>(3)); |
| 1948 |
| 1949 // A zero length copy. |
| 1950 ByteArray::Copy(external, 0, b_4_5_6_7, 0); |
| 1951 EXPECT_EQ(0, external.At<uint8_t>(0)); |
| 1952 EXPECT_EQ(1, external.At<uint8_t>(1)); |
| 1953 EXPECT_EQ(2, external.At<uint8_t>(2)); |
| 1954 EXPECT_EQ(3, external.At<uint8_t>(3)); |
| 1955 |
| 1956 // Another zero length copy. |
| 1957 ByteArray::Copy(external, 4, b_4_5_6_7, 0); |
| 1958 EXPECT_EQ(0, external.At<uint8_t>(0)); |
| 1959 EXPECT_EQ(1, external.At<uint8_t>(1)); |
| 1960 EXPECT_EQ(2, external.At<uint8_t>(2)); |
| 1961 EXPECT_EQ(3, external.At<uint8_t>(3)); |
| 1962 |
| 1963 // A one element copy. |
| 1964 ByteArray::Copy(external, 0, b_4_5_6_7, 1); |
| 1965 EXPECT_EQ(4, external.At<uint8_t>(0)); |
| 1966 EXPECT_EQ(1, external.At<uint8_t>(1)); |
| 1967 EXPECT_EQ(2, external.At<uint8_t>(2)); |
| 1968 EXPECT_EQ(3, external.At<uint8_t>(3)); |
| 1969 |
| 1970 // A two element copy. |
| 1971 ByteArray::Copy(external, 2, b_4_5_6_7, 2); |
| 1972 EXPECT_EQ(4, external.At<uint8_t>(0)); |
| 1973 EXPECT_EQ(1, external.At<uint8_t>(1)); |
| 1974 EXPECT_EQ(4, external.At<uint8_t>(2)); |
| 1975 EXPECT_EQ(5, external.At<uint8_t>(3)); |
| 1976 |
| 1977 // A three element copy. |
| 1978 ByteArray::Copy(external, 1, b_4_5_6_7, 3); |
| 1979 EXPECT_EQ(4, external.At<uint8_t>(0)); |
| 1980 EXPECT_EQ(4, external.At<uint8_t>(1)); |
| 1981 EXPECT_EQ(5, external.At<uint8_t>(2)); |
| 1982 EXPECT_EQ(6, external.At<uint8_t>(3)); |
| 1983 |
| 1984 // A four element copy. |
| 1985 ByteArray::Copy(external, 0, b_0_1_2_3, 4); |
| 1986 EXPECT_EQ(0, external.At<uint8_t>(0)); |
| 1987 EXPECT_EQ(1, external.At<uint8_t>(1)); |
| 1988 EXPECT_EQ(2, external.At<uint8_t>(2)); |
| 1989 EXPECT_EQ(3, external.At<uint8_t>(3)); |
| 1990 } |
| 1991 |
| 1992 |
1934 TEST_CASE(InternalByteArray) { | 1993 TEST_CASE(InternalByteArray) { |
1935 uint8_t data[] = { 253, 254, 255, 0, 1, 2, 3, 4 }; | 1994 uint8_t data[] = { 253, 254, 255, 0, 1, 2, 3, 4 }; |
1936 intptr_t data_length = ARRAY_SIZE(data); | 1995 intptr_t data_length = ARRAY_SIZE(data); |
1937 | 1996 |
1938 const InternalByteArray& array1 = | 1997 const InternalByteArray& array1 = |
1939 InternalByteArray::Handle(InternalByteArray::New(data, data_length)); | 1998 InternalByteArray::Handle(InternalByteArray::New(data, data_length)); |
1940 EXPECT(!array1.IsNull()); | 1999 EXPECT(!array1.IsNull()); |
1941 EXPECT_EQ(data_length, array1.Length()); | 2000 EXPECT_EQ(data_length, array1.Length()); |
1942 EXPECT_EQ(-3, array1.At<int8_t>(0)); | 2001 EXPECT_EQ(-3, array1.At<int8_t>(0)); |
1943 EXPECT_EQ(253, array1.At<uint8_t>(0)); | 2002 EXPECT_EQ(253, array1.At<uint8_t>(0)); |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2026 EXPECT_EQ(DBL_MAX, | 2085 EXPECT_EQ(DBL_MAX, |
2027 byte_array.UnalignedAt<double>(8 + double_misalign)); | 2086 byte_array.UnalignedAt<double>(8 + double_misalign)); |
2028 | 2087 |
2029 byte_array.SetUnalignedAt<double>(double_misalign, 0.0); | 2088 byte_array.SetUnalignedAt<double>(double_misalign, 0.0); |
2030 EXPECT_EQ(0.0, byte_array.UnalignedAt<double>(double_misalign)); | 2089 EXPECT_EQ(0.0, byte_array.UnalignedAt<double>(double_misalign)); |
2031 byte_array.SetUnalignedAt<double>(8 + double_misalign, 1.0); | 2090 byte_array.SetUnalignedAt<double>(8 + double_misalign, 1.0); |
2032 EXPECT_EQ(1.0, byte_array.UnalignedAt<double>(8 + double_misalign)); | 2091 EXPECT_EQ(1.0, byte_array.UnalignedAt<double>(8 + double_misalign)); |
2033 } | 2092 } |
2034 | 2093 |
2035 | 2094 |
| 2095 TEST_CASE(InternalByteArrayCopy) { |
| 2096 const uint8_t b_0_1_2_3[] = { 0, 1, 2, 3 }; |
| 2097 const uint8_t b_4_5_6_7[] = { 4, 5, 6, 7 }; |
| 2098 |
| 2099 const InternalByteArray& internal = |
| 2100 InternalByteArray::Handle( |
| 2101 InternalByteArray::New(b_0_1_2_3, ARRAY_SIZE(b_0_1_2_3))); |
| 2102 EXPECT(!internal.IsNull()); |
| 2103 EXPECT_EQ(4, internal.Length()); |
| 2104 EXPECT_EQ(0, internal.At<uint8_t>(0)); |
| 2105 EXPECT_EQ(1, internal.At<uint8_t>(1)); |
| 2106 EXPECT_EQ(2, internal.At<uint8_t>(2)); |
| 2107 EXPECT_EQ(3, internal.At<uint8_t>(3)); |
| 2108 |
| 2109 // A zero length copy. |
| 2110 ByteArray::Copy(internal, 0, b_4_5_6_7, 0); |
| 2111 EXPECT_EQ(0, internal.At<uint8_t>(0)); |
| 2112 EXPECT_EQ(1, internal.At<uint8_t>(1)); |
| 2113 EXPECT_EQ(2, internal.At<uint8_t>(2)); |
| 2114 EXPECT_EQ(3, internal.At<uint8_t>(3)); |
| 2115 |
| 2116 // Another zero length copy. |
| 2117 ByteArray::Copy(internal, 4, b_4_5_6_7, 0); |
| 2118 EXPECT_EQ(0, internal.At<uint8_t>(0)); |
| 2119 EXPECT_EQ(1, internal.At<uint8_t>(1)); |
| 2120 EXPECT_EQ(2, internal.At<uint8_t>(2)); |
| 2121 EXPECT_EQ(3, internal.At<uint8_t>(3)); |
| 2122 |
| 2123 // A one element copy. |
| 2124 ByteArray::Copy(internal, 0, b_4_5_6_7, 1); |
| 2125 EXPECT_EQ(4, internal.At<uint8_t>(0)); |
| 2126 EXPECT_EQ(1, internal.At<uint8_t>(1)); |
| 2127 EXPECT_EQ(2, internal.At<uint8_t>(2)); |
| 2128 EXPECT_EQ(3, internal.At<uint8_t>(3)); |
| 2129 |
| 2130 // A two element copy. |
| 2131 ByteArray::Copy(internal, 2, b_4_5_6_7, 2); |
| 2132 EXPECT_EQ(4, internal.At<uint8_t>(0)); |
| 2133 EXPECT_EQ(1, internal.At<uint8_t>(1)); |
| 2134 EXPECT_EQ(4, internal.At<uint8_t>(2)); |
| 2135 EXPECT_EQ(5, internal.At<uint8_t>(3)); |
| 2136 |
| 2137 // A three element copy. |
| 2138 ByteArray::Copy(internal, 1, b_4_5_6_7, 3); |
| 2139 EXPECT_EQ(4, internal.At<uint8_t>(0)); |
| 2140 EXPECT_EQ(4, internal.At<uint8_t>(1)); |
| 2141 EXPECT_EQ(5, internal.At<uint8_t>(2)); |
| 2142 EXPECT_EQ(6, internal.At<uint8_t>(3)); |
| 2143 |
| 2144 // A four element copy. |
| 2145 ByteArray::Copy(internal, 0, b_0_1_2_3, 4); |
| 2146 EXPECT_EQ(0, internal.At<uint8_t>(0)); |
| 2147 EXPECT_EQ(1, internal.At<uint8_t>(1)); |
| 2148 EXPECT_EQ(2, internal.At<uint8_t>(2)); |
| 2149 EXPECT_EQ(3, internal.At<uint8_t>(3)); |
| 2150 } |
| 2151 |
| 2152 |
| 2153 TEST_CASE(ByteArrayCopy) { |
| 2154 const uint8_t b_0_1_2_3[] = { 0, 1, 2, 3 }; |
| 2155 |
| 2156 const InternalByteArray& internal = |
| 2157 InternalByteArray::Handle( |
| 2158 InternalByteArray::New(b_0_1_2_3, ARRAY_SIZE(b_0_1_2_3))); |
| 2159 EXPECT(!internal.IsNull()); |
| 2160 EXPECT_EQ(4, internal.Length()); |
| 2161 EXPECT_EQ(0, internal.At<uint8_t>(0)); |
| 2162 EXPECT_EQ(1, internal.At<uint8_t>(1)); |
| 2163 EXPECT_EQ(2, internal.At<uint8_t>(2)); |
| 2164 EXPECT_EQ(3, internal.At<uint8_t>(3)); |
| 2165 |
| 2166 uint8_t data[] = { 4, 5, 6, 7 }; |
| 2167 const ExternalByteArray& external = |
| 2168 ExternalByteArray::Handle( |
| 2169 ExternalByteArray::New(data, ARRAY_SIZE(data), NULL, NULL)); |
| 2170 EXPECT(!external.IsNull()); |
| 2171 EXPECT_EQ(4, external.Length()); |
| 2172 EXPECT_EQ(4, external.At<uint8_t>(0)); |
| 2173 EXPECT_EQ(5, external.At<uint8_t>(1)); |
| 2174 EXPECT_EQ(6, external.At<uint8_t>(2)); |
| 2175 EXPECT_EQ(7, external.At<uint8_t>(3)); |
| 2176 |
| 2177 // A zero length copy. |
| 2178 ByteArray::Copy(internal, 0, external, 0, 0); |
| 2179 EXPECT_EQ(0, internal.At<uint8_t>(0)); |
| 2180 EXPECT_EQ(1, internal.At<uint8_t>(1)); |
| 2181 EXPECT_EQ(2, internal.At<uint8_t>(2)); |
| 2182 EXPECT_EQ(3, internal.At<uint8_t>(3)); |
| 2183 |
| 2184 // A zero length copy, take 2. |
| 2185 ByteArray::Copy(internal, 4, external, 0, 0); |
| 2186 EXPECT_EQ(0, internal.At<uint8_t>(0)); |
| 2187 EXPECT_EQ(1, internal.At<uint8_t>(1)); |
| 2188 EXPECT_EQ(2, internal.At<uint8_t>(2)); |
| 2189 EXPECT_EQ(3, internal.At<uint8_t>(3)); |
| 2190 |
| 2191 // A zero length copy, take 3. |
| 2192 ByteArray::Copy(internal, 0, external, 4, 0); |
| 2193 EXPECT_EQ(0, internal.At<uint8_t>(0)); |
| 2194 EXPECT_EQ(1, internal.At<uint8_t>(1)); |
| 2195 EXPECT_EQ(2, internal.At<uint8_t>(2)); |
| 2196 EXPECT_EQ(3, internal.At<uint8_t>(3)); |
| 2197 |
| 2198 // A zero length copy, take 4. |
| 2199 ByteArray::Copy(internal, 4, external, 4, 0); |
| 2200 EXPECT_EQ(0, internal.At<uint8_t>(0)); |
| 2201 EXPECT_EQ(1, internal.At<uint8_t>(1)); |
| 2202 EXPECT_EQ(2, internal.At<uint8_t>(2)); |
| 2203 EXPECT_EQ(3, internal.At<uint8_t>(3)); |
| 2204 |
| 2205 // A four element copy. |
| 2206 ByteArray::Copy(internal, 0, external, 0, 4); |
| 2207 EXPECT_EQ(4, internal.At<uint8_t>(0)); |
| 2208 EXPECT_EQ(5, internal.At<uint8_t>(1)); |
| 2209 EXPECT_EQ(6, internal.At<uint8_t>(2)); |
| 2210 EXPECT_EQ(7, internal.At<uint8_t>(3)); |
| 2211 EXPECT_EQ(4, external.At<uint8_t>(0)); |
| 2212 EXPECT_EQ(5, external.At<uint8_t>(1)); |
| 2213 EXPECT_EQ(6, external.At<uint8_t>(2)); |
| 2214 EXPECT_EQ(7, external.At<uint8_t>(3)); |
| 2215 |
| 2216 // A four element copy, take 2. |
| 2217 ByteArray::Copy(external, 0, b_0_1_2_3, 4); |
| 2218 EXPECT_EQ(0, external.At<uint8_t>(0)); |
| 2219 EXPECT_EQ(1, external.At<uint8_t>(1)); |
| 2220 EXPECT_EQ(2, external.At<uint8_t>(2)); |
| 2221 EXPECT_EQ(3, external.At<uint8_t>(3)); |
| 2222 ByteArray::Copy(external, 0, internal, 0, 4); |
| 2223 EXPECT_EQ(4, internal.At<uint8_t>(0)); |
| 2224 EXPECT_EQ(5, internal.At<uint8_t>(1)); |
| 2225 EXPECT_EQ(6, internal.At<uint8_t>(2)); |
| 2226 EXPECT_EQ(7, internal.At<uint8_t>(3)); |
| 2227 EXPECT_EQ(4, external.At<uint8_t>(0)); |
| 2228 EXPECT_EQ(5, external.At<uint8_t>(1)); |
| 2229 EXPECT_EQ(6, external.At<uint8_t>(2)); |
| 2230 EXPECT_EQ(7, external.At<uint8_t>(3)); |
| 2231 } |
| 2232 |
| 2233 |
2036 TEST_CASE(Script) { | 2234 TEST_CASE(Script) { |
2037 const char* url_chars = "builtin:test-case"; | 2235 const char* url_chars = "builtin:test-case"; |
2038 const char* source_chars = "This will not compile."; | 2236 const char* source_chars = "This will not compile."; |
2039 const String& url = String::Handle(String::New(url_chars)); | 2237 const String& url = String::Handle(String::New(url_chars)); |
2040 const String& source = String::Handle(String::New(source_chars)); | 2238 const String& source = String::Handle(String::New(source_chars)); |
2041 const Script& script = Script::Handle(Script::New(url, | 2239 const Script& script = Script::Handle(Script::New(url, |
2042 source, | 2240 source, |
2043 RawScript::kSource)); | 2241 RawScript::kSource)); |
2044 EXPECT(!script.IsNull()); | 2242 EXPECT(!script.IsNull()); |
2045 EXPECT(script.IsScript()); | 2243 EXPECT(script.IsScript()); |
(...skipping 440 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2486 EXPECT_EQ(2, test_classes.length()); | 2684 EXPECT_EQ(2, test_classes.length()); |
2487 EXPECT_EQ(smi_class.raw(), test_classes[0]->raw()); | 2685 EXPECT_EQ(smi_class.raw(), test_classes[0]->raw()); |
2488 EXPECT_EQ(smi_class.raw(), test_classes[1]->raw()); | 2686 EXPECT_EQ(smi_class.raw(), test_classes[1]->raw()); |
2489 EXPECT_EQ(target1.raw(), test_target.raw()); | 2687 EXPECT_EQ(target1.raw(), test_target.raw()); |
2490 } | 2688 } |
2491 | 2689 |
2492 | 2690 |
2493 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64). | 2691 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64). |
2494 | 2692 |
2495 } // namespace dart | 2693 } // namespace dart |
OLD | NEW |