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

Side by Side Diff: test/cctest/test-code-stub-assembler.cc

Issue 2624203002: Version 5.7.440.1 (cherry-pick) (Closed)
Patch Set: Created 3 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
« no previous file with comments | « src/x87/macro-assembler-x87.cc ('k') | test/cctest/test-strings.cc » ('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 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/base/utils/random-number-generator.h" 5 #include "src/base/utils/random-number-generator.h"
6 #include "src/builtins/builtins-promise.h" 6 #include "src/builtins/builtins-promise.h"
7 #include "src/code-factory.h" 7 #include "src/code-factory.h"
8 #include "src/code-stub-assembler.h" 8 #include "src/code-stub-assembler.h"
9 #include "src/compiler/node.h" 9 #include "src/compiler/node.h"
10 #include "src/isolate.h" 10 #include "src/isolate.h"
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
174 for (int i = 0; i < 5; ++i) { 174 for (int i = 0; i < 5; ++i) {
175 Handle<FixedArray> test = handle(FixedArray::cast(test_cases->get(i))); 175 Handle<FixedArray> test = handle(FixedArray::cast(test_cases->get(i)));
176 Handle<Object> obj = handle(test->get(0), isolate); 176 Handle<Object> obj = handle(test->get(0), isolate);
177 Handle<String> expected = handle(String::cast(test->get(1))); 177 Handle<String> expected = handle(String::cast(test->get(1)));
178 Handle<Object> result = ft.Call(obj).ToHandleChecked(); 178 Handle<Object> result = ft.Call(obj).ToHandleChecked();
179 CHECK(result->IsString()); 179 CHECK(result->IsString());
180 CHECK(String::Equals(Handle<String>::cast(result), expected)); 180 CHECK(String::Equals(Handle<String>::cast(result), expected));
181 } 181 }
182 } 182 }
183 183
184 TEST(FlattenString) {
185 Isolate* isolate(CcTest::InitIsolateOnce());
186 const int kNumParams = 1;
187 CodeAssemblerTester data(isolate, kNumParams);
188 CodeStubAssembler m(data.state());
189 m.Return(m.FlattenString(m.Parameter(0)));
190
191 Handle<Code> code = data.GenerateCode();
192 FunctionTester ft(code, kNumParams);
193
194 Handle<FixedArray> test_cases(isolate->factory()->NewFixedArray(4));
195 Handle<String> expected(
196 isolate->factory()->InternalizeUtf8String("hello, world!"));
197 test_cases->set(0, *expected);
198
199 Handle<String> string(
200 isolate->factory()->InternalizeUtf8String("filler hello, world! filler"));
201 Handle<String> sub_string(
202 isolate->factory()->NewProperSubString(string, 7, 20));
203 test_cases->set(1, *sub_string);
204
205 Handle<String> hello(isolate->factory()->InternalizeUtf8String("hello,"));
206 Handle<String> world(isolate->factory()->InternalizeUtf8String(" world!"));
207 Handle<String> cons_str(
208 isolate->factory()->NewConsString(hello, world).ToHandleChecked());
209 test_cases->set(2, *cons_str);
210
211 Handle<String> empty(isolate->factory()->InternalizeUtf8String(""));
212 Handle<String> fake_cons_str(
213 isolate->factory()->NewConsString(expected, empty).ToHandleChecked());
214 test_cases->set(3, *fake_cons_str);
215
216 for (int i = 0; i < 4; ++i) {
217 Handle<String> test = handle(String::cast(test_cases->get(i)));
218 Handle<Object> result = ft.Call(test).ToHandleChecked();
219 CHECK(result->IsString());
220 CHECK(Handle<String>::cast(result)->IsFlat());
221 CHECK(String::Equals(Handle<String>::cast(result), expected));
222 }
223 }
224
184 TEST(TryToName) { 225 TEST(TryToName) {
185 typedef CodeAssemblerLabel Label; 226 typedef CodeAssemblerLabel Label;
186 typedef CodeAssemblerVariable Variable; 227 typedef CodeAssemblerVariable Variable;
187 Isolate* isolate(CcTest::InitIsolateOnce()); 228 Isolate* isolate(CcTest::InitIsolateOnce());
188 229
189 const int kNumParams = 3; 230 const int kNumParams = 3;
190 CodeAssemblerTester data(isolate, kNumParams); 231 CodeAssemblerTester data(isolate, kNumParams);
191 CodeStubAssembler m(data.state()); 232 CodeStubAssembler m(data.state());
192 233
193 enum Result { kKeyIsIndex, kKeyIsUnique, kBailout }; 234 enum Result { kKeyIsIndex, kKeyIsUnique, kBailout };
194 { 235 {
195 Node* key = m.Parameter(0); 236 Node* key = m.Parameter(0);
196 Node* expected_result = m.Parameter(1); 237 Node* expected_result = m.Parameter(1);
197 Node* expected_arg = m.Parameter(2); 238 Node* expected_arg = m.Parameter(2);
198 239
199 Label passed(&m), failed(&m); 240 Label passed(&m), failed(&m);
200 Label if_keyisindex(&m), if_keyisunique(&m), if_bailout(&m); 241 Label if_keyisindex(&m), if_keyisunique(&m), if_bailout(&m);
201 { 242 Variable var_index(&m, MachineType::PointerRepresentation());
202 Variable var_index(&m, MachineType::PointerRepresentation());
203 Variable var_unique(&m, MachineRepresentation::kTagged);
204 243
205 m.TryToName(key, &if_keyisindex, &var_index, &if_keyisunique, &var_unique, 244 m.TryToName(key, &if_keyisindex, &var_index, &if_keyisunique, &if_bailout);
206 &if_bailout);
207 245
208 m.Bind(&if_keyisindex); 246 m.Bind(&if_keyisindex);
209 m.GotoUnless(m.WordEqual(expected_result, 247 m.GotoUnless(
210 m.SmiConstant(Smi::FromInt(kKeyIsIndex))), 248 m.WordEqual(expected_result, m.SmiConstant(Smi::FromInt(kKeyIsIndex))),
211 &failed); 249 &failed);
212 m.Branch(m.WordEqual(m.SmiUntag(expected_arg), var_index.value()), 250 m.Branch(m.WordEqual(m.SmiUntag(expected_arg), var_index.value()), &passed,
213 &passed, &failed); 251 &failed);
214 252
215 m.Bind(&if_keyisunique); 253 m.Bind(&if_keyisunique);
216 m.GotoUnless(m.WordEqual(expected_result, 254 m.GotoUnless(
217 m.SmiConstant(Smi::FromInt(kKeyIsUnique))), 255 m.WordEqual(expected_result, m.SmiConstant(Smi::FromInt(kKeyIsUnique))),
218 &failed); 256 &failed);
219 m.Branch(m.WordEqual(expected_arg, var_unique.value()), &passed, &failed); 257 m.Branch(m.WordEqual(expected_arg, key), &passed, &failed);
220 }
221 258
222 m.Bind(&if_bailout); 259 m.Bind(&if_bailout);
223 m.Branch( 260 m.Branch(
224 m.WordEqual(expected_result, m.SmiConstant(Smi::FromInt(kBailout))), 261 m.WordEqual(expected_result, m.SmiConstant(Smi::FromInt(kBailout))),
225 &passed, &failed); 262 &passed, &failed);
226 263
227 m.Bind(&passed); 264 m.Bind(&passed);
228 m.Return(m.BooleanConstant(true)); 265 m.Return(m.BooleanConstant(true));
229 266
230 m.Bind(&failed); 267 m.Bind(&failed);
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
306 Handle<String> key = isolate->factory()->NewStringFromAsciiChecked("153"); 343 Handle<String> key = isolate->factory()->NewStringFromAsciiChecked("153");
307 CHECK(!key->HasHashCode()); 344 CHECK(!key->HasHashCode());
308 ft.CheckTrue(key, expect_bailout); 345 ft.CheckTrue(key, expect_bailout);
309 } 346 }
310 347
311 { 348 {
312 // TryToName(<non-internalized string>) => bailout. 349 // TryToName(<non-internalized string>) => bailout.
313 Handle<Object> key = isolate->factory()->NewStringFromAsciiChecked("test"); 350 Handle<Object> key = isolate->factory()->NewStringFromAsciiChecked("test");
314 ft.CheckTrue(key, expect_bailout); 351 ft.CheckTrue(key, expect_bailout);
315 } 352 }
316
317 {
318 // TryToName(<thin string>) => internalized version.
319 Handle<String> s = isolate->factory()->NewStringFromAsciiChecked("foo");
320 Handle<String> internalized = isolate->factory()->InternalizeString(s);
321 ft.CheckTrue(s, expect_unique, internalized);
322 }
323
324 {
325 // TryToName(<thin two-byte string>) => internalized version.
326 uc16 array1[] = {2001, 2002, 2003};
327 Vector<const uc16> str1(array1);
328 Handle<String> s =
329 isolate->factory()->NewStringFromTwoByte(str1).ToHandleChecked();
330 Handle<String> internalized = isolate->factory()->InternalizeString(s);
331 ft.CheckTrue(s, expect_unique, internalized);
332 }
333 } 353 }
334 354
335 namespace { 355 namespace {
336 356
337 template <typename Dictionary> 357 template <typename Dictionary>
338 void TestEntryToIndex() { 358 void TestEntryToIndex() {
339 Isolate* isolate(CcTest::InitIsolateOnce()); 359 Isolate* isolate(CcTest::InitIsolateOnce());
340 360
341 const int kNumParams = 1; 361 const int kNumParams = 1;
342 CodeAssemblerTester data(isolate, kNumParams); 362 CodeAssemblerTester data(isolate, kNumParams);
(...skipping 1931 matching lines...) Expand 10 before | Expand all | Expand 10 after
2274 .ToHandleChecked(); 2294 .ToHandleChecked();
2275 Handle<Object> prop2 = 2295 Handle<Object> prop2 =
2276 JSReceiver::GetProperty(isolate, promise, "rejectedReason") 2296 JSReceiver::GetProperty(isolate, promise, "rejectedReason")
2277 .ToHandleChecked(); 2297 .ToHandleChecked();
2278 CHECK_EQ(*rejected_str, *prop2); 2298 CHECK_EQ(*rejected_str, *prop2);
2279 } 2299 }
2280 } 2300 }
2281 2301
2282 } // namespace internal 2302 } // namespace internal
2283 } // namespace v8 2303 } // namespace v8
OLDNEW
« no previous file with comments | « src/x87/macro-assembler-x87.cc ('k') | test/cctest/test-strings.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698