1fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org// Copyright 2011 the V8 project authors. All rights reserved. 29a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// Redistribution and use in source and binary forms, with or without 39a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// modification, are permitted provided that the following conditions are 49a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// met: 59a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// 69a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// * Redistributions of source code must retain the above copyright 79a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// notice, this list of conditions and the following disclaimer. 89a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// * Redistributions in binary form must reproduce the above 99a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// copyright notice, this list of conditions and the following 109a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// disclaimer in the documentation and/or other materials provided 119a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// with the distribution. 129a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// * Neither the name of Google Inc. nor the names of its 139a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// contributors may be used to endorse or promote products derived 149a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// from this software without specific prior written permission. 159a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// 169a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 179a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 189a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 199a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 209a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 219a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 229a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 239a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 249a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 259a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 269a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 279a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 289a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com#include <stdlib.h> 299a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 303e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org#include <vector> 313e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org 32196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/v8.h" 339a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 345de0074a922429f5e0ec2cf140c2d2989bf88140yangguo@chromium.org#include "src/base/platform/platform.h" 35196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/utils-inl.h" 36196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "test/cctest/cctest.h" 379a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 389a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.comusing namespace v8::internal; 399a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 409a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 419a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.comTEST(Utils1) { 429a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com CHECK_EQ(-1000000, FastD2I(-1000000.0)); 439a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com CHECK_EQ(-1, FastD2I(-1.0)); 449a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com CHECK_EQ(0, FastD2I(0.0)); 459a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com CHECK_EQ(1, FastD2I(1.0)); 469a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com CHECK_EQ(1000000, FastD2I(1000000.0)); 479a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 489a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com CHECK_EQ(-1000000, FastD2I(-1000000.123)); 499a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com CHECK_EQ(-1, FastD2I(-1.234)); 509a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com CHECK_EQ(0, FastD2I(0.345)); 519a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com CHECK_EQ(1, FastD2I(1.234)); 529a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com CHECK_EQ(1000000, FastD2I(1000000.123)); 53e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org // Check that >> is implemented as arithmetic shift right. 54e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org // If this is not true, then ArithmeticShiftRight() must be changed, 55e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org // There are also documented right shifts in assembler.cc of 56e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org // int8_t and intptr_t signed integers. 57e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org CHECK_EQ(-2, -8 >> 2); 58e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org CHECK_EQ(-2, static_cast<int8_t>(-8) >> 2); 5918ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org CHECK_EQ(-2, static_cast<int>(static_cast<intptr_t>(-8) >> 2)); 60ea52b5f5c87edc97dc0632eec996ca2af071317culan@chromium.org 61ea52b5f5c87edc97dc0632eec996ca2af071317culan@chromium.org CHECK_EQ(-1000000, FastD2IChecked(-1000000.0)); 62ea52b5f5c87edc97dc0632eec996ca2af071317culan@chromium.org CHECK_EQ(-1, FastD2IChecked(-1.0)); 63ea52b5f5c87edc97dc0632eec996ca2af071317culan@chromium.org CHECK_EQ(0, FastD2IChecked(0.0)); 64ea52b5f5c87edc97dc0632eec996ca2af071317culan@chromium.org CHECK_EQ(1, FastD2IChecked(1.0)); 65ea52b5f5c87edc97dc0632eec996ca2af071317culan@chromium.org CHECK_EQ(1000000, FastD2IChecked(1000000.0)); 66ea52b5f5c87edc97dc0632eec996ca2af071317culan@chromium.org 67ea52b5f5c87edc97dc0632eec996ca2af071317culan@chromium.org CHECK_EQ(-1000000, FastD2IChecked(-1000000.123)); 68ea52b5f5c87edc97dc0632eec996ca2af071317culan@chromium.org CHECK_EQ(-1, FastD2IChecked(-1.234)); 69ea52b5f5c87edc97dc0632eec996ca2af071317culan@chromium.org CHECK_EQ(0, FastD2IChecked(0.345)); 70ea52b5f5c87edc97dc0632eec996ca2af071317culan@chromium.org CHECK_EQ(1, FastD2IChecked(1.234)); 71ea52b5f5c87edc97dc0632eec996ca2af071317culan@chromium.org CHECK_EQ(1000000, FastD2IChecked(1000000.123)); 72ea52b5f5c87edc97dc0632eec996ca2af071317culan@chromium.org 73ea52b5f5c87edc97dc0632eec996ca2af071317culan@chromium.org CHECK_EQ(INT_MAX, FastD2IChecked(1.0e100)); 74ea52b5f5c87edc97dc0632eec996ca2af071317culan@chromium.org CHECK_EQ(INT_MIN, FastD2IChecked(-1.0e100)); 755de0074a922429f5e0ec2cf140c2d2989bf88140yangguo@chromium.org CHECK_EQ(INT_MIN, FastD2IChecked(v8::base::OS::nan_value())); 769a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com} 779a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 789a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 799a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.comTEST(SNPrintF) { 809a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com // Make sure that strings that are truncated because of too small 819a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com // buffers are zero-terminated anyway. 829a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com const char* s = "the quick lazy .... oh forget it!"; 83c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org int length = StrLength(s); 849a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com for (int i = 1; i < length * 2; i++) { 859a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com static const char kMarker = static_cast<char>(42); 86b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org Vector<char> buffer = Vector<char>::New(i + 1); 879a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com buffer[i] = kMarker; 8870ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org int n = SNPrintF(Vector<char>(buffer.start(), i), "%s", s); 899a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com CHECK(n <= i); 909a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com CHECK(n == length || n == -1); 91b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org CHECK_EQ(0, strncmp(buffer.start(), s, i - 1)); 929a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com CHECK_EQ(kMarker, buffer[i]); 939a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com if (i <= length) { 94c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org CHECK_EQ(i - 1, StrLength(buffer.start())); 959a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com } else { 96c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org CHECK_EQ(length, StrLength(buffer.start())); 979a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com } 98bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org buffer.Dispose(); 999a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com } 1009a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com} 1011af7e1b5f676e5556c041fe09a5c4f5a906f27a0lrn@chromium.org 1021af7e1b5f676e5556c041fe09a5c4f5a906f27a0lrn@chromium.org 103e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgstatic const int kAreaSize = 512; 104e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 105e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 106e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgvoid TestMemMove(byte* area1, 107e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org byte* area2, 108e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org int src_offset, 109e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org int dest_offset, 110e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org int length) { 111e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org for (int i = 0; i < kAreaSize; i++) { 112e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org area1[i] = i & 0xFF; 113e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org area2[i] = i & 0xFF; 114e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org } 115d06b9264b1c886fc80a100e9915cf8ae07fdb4e5machenbach@chromium.org MemMove(area1 + dest_offset, area1 + src_offset, length); 116ef33a5482a35a9a25f702f8e3f02bb6b49f3854cjkummerow@chromium.org memmove(area2 + dest_offset, area2 + src_offset, length); 117ef33a5482a35a9a25f702f8e3f02bb6b49f3854cjkummerow@chromium.org if (memcmp(area1, area2, kAreaSize) != 0) { 118d06b9264b1c886fc80a100e9915cf8ae07fdb4e5machenbach@chromium.org printf("MemMove(): src_offset: %d, dest_offset: %d, length: %d\n", 119e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org src_offset, dest_offset, length); 120e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org for (int i = 0; i < kAreaSize; i++) { 121ef33a5482a35a9a25f702f8e3f02bb6b49f3854cjkummerow@chromium.org if (area1[i] == area2[i]) continue; 122d06b9264b1c886fc80a100e9915cf8ae07fdb4e5machenbach@chromium.org printf("diff at offset %d (%p): is %d, should be %d\n", i, 123d06b9264b1c886fc80a100e9915cf8ae07fdb4e5machenbach@chromium.org reinterpret_cast<void*>(area1 + i), area1[i], area2[i]); 124e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org } 125e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CHECK(false); 1261af7e1b5f676e5556c041fe09a5c4f5a906f27a0lrn@chromium.org } 1271af7e1b5f676e5556c041fe09a5c4f5a906f27a0lrn@chromium.org} 1281af7e1b5f676e5556c041fe09a5c4f5a906f27a0lrn@chromium.org 1291af7e1b5f676e5556c041fe09a5c4f5a906f27a0lrn@chromium.org 130e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgTEST(MemMove) { 131c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org v8::V8::Initialize(); 132e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org byte* area1 = new byte[kAreaSize]; 133e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org byte* area2 = new byte[kAreaSize]; 134e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 135e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org static const int kMinOffset = 32; 136e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org static const int kMaxOffset = 64; 137e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org static const int kMaxLength = 128; 138e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org STATIC_ASSERT(kMaxOffset + kMaxLength < kAreaSize); 139e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 140e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org for (int src_offset = kMinOffset; src_offset <= kMaxOffset; src_offset++) { 141e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org for (int dst_offset = kMinOffset; dst_offset <= kMaxOffset; dst_offset++) { 142e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org for (int length = 0; length <= kMaxLength; length++) { 143ef33a5482a35a9a25f702f8e3f02bb6b49f3854cjkummerow@chromium.org TestMemMove(area1, area2, src_offset, dst_offset, length); 144e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org } 1451af7e1b5f676e5556c041fe09a5c4f5a906f27a0lrn@chromium.org } 1461af7e1b5f676e5556c041fe09a5c4f5a906f27a0lrn@chromium.org } 147e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org delete[] area1; 148e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org delete[] area2; 1491af7e1b5f676e5556c041fe09a5c4f5a906f27a0lrn@chromium.org} 15065fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org 15165fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org 15265fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.orgTEST(Collector) { 15365fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org Collector<int> collector(8); 15465fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org const int kLoops = 5; 15565fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org const int kSequentialSize = 1000; 15665fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org const int kBlockSize = 7; 15765fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org for (int loop = 0; loop < kLoops; loop++) { 15865fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org Vector<int> block = collector.AddBlock(7, 0xbadcafe); 15965fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org for (int i = 0; i < kSequentialSize; i++) { 16065fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org collector.Add(i); 16165fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org } 16265fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org for (int i = 0; i < kBlockSize - 1; i++) { 16365fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org block[i] = i * 7; 16465fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org } 16565fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org } 16665fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org Vector<int> result = collector.ToVector(); 16765fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org CHECK_EQ(kLoops * (kBlockSize + kSequentialSize), result.length()); 16865fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org for (int i = 0; i < kLoops; i++) { 16965fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org int offset = i * (kSequentialSize + kBlockSize); 17065fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org for (int j = 0; j < kBlockSize - 1; j++) { 17165fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org CHECK_EQ(j * 7, result[offset + j]); 17265fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org } 17365fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org CHECK_EQ(0xbadcafe, result[offset + kBlockSize - 1]); 17465fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org for (int j = 0; j < kSequentialSize; j++) { 17565fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org CHECK_EQ(j, result[offset + kBlockSize + j]); 17665fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org } 17765fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org } 17865fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org result.Dispose(); 17965fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org} 18065fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org 18165fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org 18265fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.orgTEST(SequenceCollector) { 18365fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org SequenceCollector<int> collector(8); 18465fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org const int kLoops = 5000; 18565fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org const int kMaxSequenceSize = 13; 18665fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org int total_length = 0; 18765fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org for (int loop = 0; loop < kLoops; loop++) { 18865fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org int seq_length = loop % kMaxSequenceSize; 18965fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org collector.StartSequence(); 19065fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org for (int j = 0; j < seq_length; j++) { 19165fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org collector.Add(j); 19265fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org } 19365fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org Vector<int> sequence = collector.EndSequence(); 19465fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org for (int j = 0; j < seq_length; j++) { 19565fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org CHECK_EQ(j, sequence[j]); 19665fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org } 19765fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org total_length += seq_length; 19865fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org } 19965fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org Vector<int> result = collector.ToVector(); 20065fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org CHECK_EQ(total_length, result.length()); 20165fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org int offset = 0; 20265fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org for (int loop = 0; loop < kLoops; loop++) { 20365fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org int seq_length = loop % kMaxSequenceSize; 20465fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org for (int j = 0; j < seq_length; j++) { 20565fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org CHECK_EQ(j, result[offset]); 20665fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org offset++; 20765fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org } 20865fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org } 20965fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org result.Dispose(); 21065fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org} 21155ee80713569ab0324fc8dcedcb5518501daa6a6ricow@chromium.org 21255ee80713569ab0324fc8dcedcb5518501daa6a6ricow@chromium.org 21355ee80713569ab0324fc8dcedcb5518501daa6a6ricow@chromium.orgTEST(SequenceCollectorRegression) { 21455ee80713569ab0324fc8dcedcb5518501daa6a6ricow@chromium.org SequenceCollector<char> collector(16); 21555ee80713569ab0324fc8dcedcb5518501daa6a6ricow@chromium.org collector.StartSequence(); 21655ee80713569ab0324fc8dcedcb5518501daa6a6ricow@chromium.org collector.Add('0'); 21755ee80713569ab0324fc8dcedcb5518501daa6a6ricow@chromium.org collector.AddBlock( 21855ee80713569ab0324fc8dcedcb5518501daa6a6ricow@chromium.org i::Vector<const char>("12345678901234567890123456789012", 32)); 21955ee80713569ab0324fc8dcedcb5518501daa6a6ricow@chromium.org i::Vector<char> seq = collector.EndSequence(); 22055ee80713569ab0324fc8dcedcb5518501daa6a6ricow@chromium.org CHECK_EQ(0, strncmp("0123456789012345678901234567890123", 22155ee80713569ab0324fc8dcedcb5518501daa6a6ricow@chromium.org seq.start(), seq.length())); 22255ee80713569ab0324fc8dcedcb5518501daa6a6ricow@chromium.org} 2233e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org 2243e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org 2253e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org// TODO(svenpanne) Unconditionally test this when our infrastructure is fixed. 226c714f377950c6a8a80b90ddca93ad8bd23ce362amachenbach@chromium.org#if !V8_OS_NACL 2273e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.orgTEST(CPlusPlus11Features) { 2283e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org struct S { 2293e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org bool x; 2303e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org struct T { 2313e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org double y; 2323e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org int z[3]; 2333e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org } t; 2343e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org }; 2353e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org S s{true, {3.1415, {1, 2, 3}}}; 2363e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org CHECK_EQ(2, s.t.z[1]); 2373e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org 2383e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org// TODO(svenpanne) Remove the old-skool code when we ship the new C++ headers. 2393e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org#if 0 2403e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org std::vector<int> vec{11, 22, 33, 44}; 2413e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org#else 2423e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org std::vector<int> vec; 2433e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org vec.push_back(11); 2443e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org vec.push_back(22); 2453e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org vec.push_back(33); 2463e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org vec.push_back(44); 2473e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org#endif 2483e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org vec.push_back(55); 2493e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org vec.push_back(66); 2503e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org for (auto& i : vec) { 2513e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org ++i; 2523e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org } 2533e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org int j = 12; 2543e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org for (auto i : vec) { 2553e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org CHECK_EQ(j, i); 2563e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org j += 11; 2573e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org } 2583e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org} 2593e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org#endif 260