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

Side by Side Diff: test/cctest/test-strings.cc

Issue 254763008: Remove String::Visit (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: rebase Created 6 years, 7 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 | « src/objects-inl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 } 223 }
224 224
225 225
226 class ConsStringStats { 226 class ConsStringStats {
227 public: 227 public:
228 ConsStringStats() { 228 ConsStringStats() {
229 Reset(); 229 Reset();
230 } 230 }
231 void Reset(); 231 void Reset();
232 void VerifyEqual(const ConsStringStats& that) const; 232 void VerifyEqual(const ConsStringStats& that) const;
233 unsigned leaves_; 233 int leaves_;
234 unsigned empty_leaves_; 234 int empty_leaves_;
235 unsigned chars_; 235 int chars_;
236 unsigned left_traversals_; 236 int left_traversals_;
237 unsigned right_traversals_; 237 int right_traversals_;
238 private: 238 private:
239 DISALLOW_COPY_AND_ASSIGN(ConsStringStats); 239 DISALLOW_COPY_AND_ASSIGN(ConsStringStats);
240 }; 240 };
241 241
242 242
243 void ConsStringStats::Reset() { 243 void ConsStringStats::Reset() {
244 leaves_ = 0; 244 leaves_ = 0;
245 empty_leaves_ = 0; 245 empty_leaves_ = 0;
246 chars_ = 0; 246 chars_ = 0;
247 left_traversals_ = 0; 247 left_traversals_ = 0;
248 right_traversals_ = 0; 248 right_traversals_ = 0;
249 } 249 }
250 250
251 251
252 void ConsStringStats::VerifyEqual(const ConsStringStats& that) const { 252 void ConsStringStats::VerifyEqual(const ConsStringStats& that) const {
253 CHECK(this->leaves_ == that.leaves_); 253 CHECK_EQ(this->leaves_, that.leaves_);
254 CHECK(this->empty_leaves_ == that.empty_leaves_); 254 CHECK_EQ(this->empty_leaves_, that.empty_leaves_);
255 CHECK(this->chars_ == that.chars_); 255 CHECK_EQ(this->chars_, that.chars_);
256 CHECK(this->left_traversals_ == that.left_traversals_); 256 CHECK_EQ(this->left_traversals_, that.left_traversals_);
257 CHECK(this->right_traversals_ == that.right_traversals_); 257 CHECK_EQ(this->right_traversals_, that.right_traversals_);
258 } 258 }
259 259
260 260
261 class ConsStringGenerationData { 261 class ConsStringGenerationData {
262 public: 262 public:
263 static const int kNumberOfBuildingBlocks = 256; 263 static const int kNumberOfBuildingBlocks = 256;
264 explicit ConsStringGenerationData(bool long_blocks); 264 explicit ConsStringGenerationData(bool long_blocks);
265 void Reset(); 265 void Reset();
266 inline Handle<String> block(int offset); 266 inline Handle<String> block(int offset);
267 inline Handle<String> block(uint32_t offset); 267 inline Handle<String> block(uint32_t offset);
268 // Input variables. 268 // Input variables.
269 double early_termination_threshold_; 269 double early_termination_threshold_;
270 double leftness_; 270 double leftness_;
271 double rightness_; 271 double rightness_;
272 double empty_leaf_threshold_; 272 double empty_leaf_threshold_;
273 unsigned max_leaves_; 273 int max_leaves_;
274 // Cached data. 274 // Cached data.
275 Handle<String> building_blocks_[kNumberOfBuildingBlocks]; 275 Handle<String> building_blocks_[kNumberOfBuildingBlocks];
276 String* empty_string_; 276 String* empty_string_;
277 MyRandomNumberGenerator rng_; 277 MyRandomNumberGenerator rng_;
278 // Stats. 278 // Stats.
279 ConsStringStats stats_; 279 ConsStringStats stats_;
280 unsigned early_terminations_; 280 int early_terminations_;
281 private: 281 private:
282 DISALLOW_COPY_AND_ASSIGN(ConsStringGenerationData); 282 DISALLOW_COPY_AND_ASSIGN(ConsStringGenerationData);
283 }; 283 };
284 284
285 285
286 ConsStringGenerationData::ConsStringGenerationData(bool long_blocks) { 286 ConsStringGenerationData::ConsStringGenerationData(bool long_blocks) {
287 rng_.init(); 287 rng_.init();
288 InitializeBuildingBlocks( 288 InitializeBuildingBlocks(
289 building_blocks_, kNumberOfBuildingBlocks, long_blocks, &rng_); 289 building_blocks_, kNumberOfBuildingBlocks, long_blocks, &rng_);
290 empty_string_ = CcTest::heap()->empty_string(); 290 empty_string_ = CcTest::heap()->empty_string();
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
349 if (cons_string->IsConsString()) { 349 if (cons_string->IsConsString()) {
350 return AccumulateStats(ConsString::cast(*cons_string), stats); 350 return AccumulateStats(ConsString::cast(*cons_string), stats);
351 } 351 }
352 // This string got flattened by gc. 352 // This string got flattened by gc.
353 stats->chars_ += cons_string->length(); 353 stats->chars_ += cons_string->length();
354 } 354 }
355 355
356 356
357 void AccumulateStatsWithOperator( 357 void AccumulateStatsWithOperator(
358 ConsString* cons_string, ConsStringStats* stats) { 358 ConsString* cons_string, ConsStringStats* stats) {
359 unsigned offset = 0; 359 ConsStringIteratorOp op(cons_string);
360 int32_t type = cons_string->map()->instance_type(); 360 String* string;
361 unsigned length = static_cast<unsigned>(cons_string->length()); 361 int offset;
362 ConsStringIteratorOp op; 362 while (NULL != (string = op.Next(&offset))) {
363 String* string = op.Operate(cons_string, &offset, &type, &length);
364 CHECK(string != NULL);
365 while (true) {
366 ASSERT(!string->IsConsString());
367 // Accumulate stats. 363 // Accumulate stats.
364 CHECK_EQ(0, offset);
368 stats->leaves_++; 365 stats->leaves_++;
369 stats->chars_ += string->length(); 366 stats->chars_ += string->length();
370 // Check for completion.
371 bool keep_going_fast_check = op.HasMore();
372 string = op.ContinueOperation(&type, &length);
373 if (string == NULL) return;
374 // Verify no false positives for fast check.
375 CHECK(keep_going_fast_check);
376 } 367 }
377 } 368 }
378 369
379 370
380 void VerifyConsString(Handle<String> root, ConsStringGenerationData* data) { 371 void VerifyConsString(Handle<String> root, ConsStringGenerationData* data) {
381 // Verify basic data. 372 // Verify basic data.
382 CHECK(root->IsConsString()); 373 CHECK(root->IsConsString());
383 CHECK(static_cast<unsigned>(root->length()) == data->stats_.chars_); 374 CHECK_EQ(root->length(), data->stats_.chars_);
384 // Recursive verify. 375 // Recursive verify.
385 ConsStringStats stats; 376 ConsStringStats stats;
386 AccumulateStats(ConsString::cast(*root), &stats); 377 AccumulateStats(ConsString::cast(*root), &stats);
387 stats.VerifyEqual(data->stats_); 378 stats.VerifyEqual(data->stats_);
388 // Iteratively verify. 379 // Iteratively verify.
389 stats.Reset(); 380 stats.Reset();
390 AccumulateStatsWithOperator(ConsString::cast(*root), &stats); 381 AccumulateStatsWithOperator(ConsString::cast(*root), &stats);
391 // Don't see these. Must copy over. 382 // Don't see these. Must copy over.
392 stats.empty_leaves_ = data->stats_.empty_leaves_; 383 stats.empty_leaves_ = data->stats_.empty_leaves_;
393 stats.left_traversals_ = data->stats_.left_traversals_; 384 stats.left_traversals_ = data->stats_.left_traversals_;
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
618 // TODO(dcarney) Test stream reset as well. 609 // TODO(dcarney) Test stream reset as well.
619 int length = flat_string->length(); 610 int length = flat_string->length();
620 // Iterate start search in multiple places in the string. 611 // Iterate start search in multiple places in the string.
621 int outer_iterations = length > 20 ? 20 : length; 612 int outer_iterations = length > 20 ? 20 : length;
622 for (int j = 0; j <= outer_iterations; j++) { 613 for (int j = 0; j <= outer_iterations; j++) {
623 int offset = length * j / outer_iterations; 614 int offset = length * j / outer_iterations;
624 if (offset < 0) offset = 0; 615 if (offset < 0) offset = 0;
625 // Want to test the offset == length case. 616 // Want to test the offset == length case.
626 if (offset > length) offset = length; 617 if (offset > length) offset = length;
627 StringCharacterStream flat_stream( 618 StringCharacterStream flat_stream(
628 flat_string, &cons_string_iterator_op_1, static_cast<unsigned>(offset)); 619 flat_string, &cons_string_iterator_op_1, offset);
629 StringCharacterStream cons_stream( 620 StringCharacterStream cons_stream(
630 cons_string, &cons_string_iterator_op_2, static_cast<unsigned>(offset)); 621 cons_string, &cons_string_iterator_op_2, offset);
631 for (int i = offset; i < length; i++) { 622 for (int i = offset; i < length; i++) {
632 uint16_t c = flat_string->Get(i); 623 uint16_t c = flat_string->Get(i);
633 CHECK(flat_stream.HasMore()); 624 CHECK(flat_stream.HasMore());
634 CHECK(cons_stream.HasMore()); 625 CHECK(cons_stream.HasMore());
635 CHECK_EQ(c, flat_stream.GetNext()); 626 CHECK_EQ(c, flat_stream.GetNext());
636 CHECK_EQ(c, cons_stream.GetNext()); 627 CHECK_EQ(c, cons_stream.GetNext());
637 } 628 }
638 CHECK(!flat_stream.HasMore()); 629 CHECK(!flat_stream.HasMore());
639 CHECK(!cons_stream.HasMore()); 630 CHECK(!cons_stream.HasMore());
640 } 631 }
(...skipping 772 matching lines...) Expand 10 before | Expand all | Expand 10 after
1413 CHECK(isolate->has_pending_exception()); \ 1404 CHECK(isolate->has_pending_exception()); \
1414 isolate->clear_pending_exception(); \ 1405 isolate->clear_pending_exception(); \
1415 dummy.Dispose(); \ 1406 dummy.Dispose(); \
1416 } 1407 }
1417 1408
1418 INVALID_STRING_TEST(NewStringFromAscii, char) 1409 INVALID_STRING_TEST(NewStringFromAscii, char)
1419 INVALID_STRING_TEST(NewStringFromUtf8, char) 1410 INVALID_STRING_TEST(NewStringFromUtf8, char)
1420 INVALID_STRING_TEST(NewStringFromOneByte, uint8_t) 1411 INVALID_STRING_TEST(NewStringFromOneByte, uint8_t)
1421 1412
1422 #undef INVALID_STRING_TEST 1413 #undef INVALID_STRING_TEST
OLDNEW
« no previous file with comments | « src/objects-inl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698