11fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// Copyright 2013 the V8 project authors. All rights reserved.
21fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// Redistribution and use in source and binary forms, with or without
31fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// modification, are permitted provided that the following conditions are
41fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// met:
51fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org//
61fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org//     * Redistributions of source code must retain the above copyright
71fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org//       notice, this list of conditions and the following disclaimer.
81fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org//     * Redistributions in binary form must reproduce the above
91fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org//       copyright notice, this list of conditions and the following
101fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org//       disclaimer in the documentation and/or other materials provided
111fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org//       with the distribution.
121fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org//     * Neither the name of Google Inc. nor the names of its
131fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org//       contributors may be used to endorse or promote products derived
141fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org//       from this software without specific prior written permission.
151fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org//
161fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
171fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
181fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
191fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
201fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
211fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
221fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
231fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
241fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
251fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
261fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
271fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
281fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org#include <stdlib.h>
291fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
30196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/v8.h"
314b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org#include "test/cctest/cctest.h"
324b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org
33196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/api.h"
343e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org#include "src/heap/heap.h"
35196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/objects.h"
361fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
371fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgusing namespace v8::internal;
381fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
391fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgstatic Isolate* GetIsolateFrom(LocalContext* context) {
401fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  return reinterpret_cast<Isolate*>((*context)->GetIsolate());
411fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
421fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
431fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
441fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgstatic int CountArrayBuffersInWeakList(Heap* heap) {
451fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  int count = 0;
461fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  for (Object* o = heap->array_buffers_list();
4741728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org       !o->IsUndefined();
481fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org       o = JSArrayBuffer::cast(o)->weak_next()) {
491fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    count++;
501fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  }
511fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  return count;
521fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
531fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
541fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
551fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgstatic bool HasArrayBufferInWeakList(Heap* heap, JSArrayBuffer* ab) {
561fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  for (Object* o = heap->array_buffers_list();
5741728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org       !o->IsUndefined();
581fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org       o = JSArrayBuffer::cast(o)->weak_next()) {
591fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    if (ab == o) return true;
601fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  }
611fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  return false;
621fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
631fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
641fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
651510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgstatic int CountViews(JSArrayBuffer* array_buffer) {
661fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  int count = 0;
671510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  for (Object* o = array_buffer->weak_first_view();
6841728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org       !o->IsUndefined();
691510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org       o = JSArrayBufferView::cast(o)->weak_next()) {
701fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    count++;
711fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  }
721fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
731fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  return count;
741fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
751fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
761510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgstatic bool HasViewInWeakList(JSArrayBuffer* array_buffer,
771510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                              JSArrayBufferView* ta) {
781510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  for (Object* o = array_buffer->weak_first_view();
7941728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org       !o->IsUndefined();
801510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org       o = JSArrayBufferView::cast(o)->weak_next()) {
811fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    if (ta == o) return true;
821fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  }
831fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  return false;
841fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
851fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
861fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
871fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(WeakArrayBuffersFromApi) {
881fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  v8::V8::Initialize();
891fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  LocalContext context;
901fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  Isolate* isolate = GetIsolateFrom(&context);
911fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
9290dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org  int start = CountArrayBuffersInWeakList(isolate->heap());
931fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  {
941fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    v8::HandleScope s1(context->GetIsolate());
959f18d9111f676f2899d9aa2444130c985eb75395machenbach@chromium.org    v8::Handle<v8::ArrayBuffer> ab1 =
969f18d9111f676f2899d9aa2444130c985eb75395machenbach@chromium.org        v8::ArrayBuffer::New(context->GetIsolate(), 256);
971fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    {
981fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      v8::HandleScope s2(context->GetIsolate());
999f18d9111f676f2899d9aa2444130c985eb75395machenbach@chromium.org      v8::Handle<v8::ArrayBuffer> ab2 =
1009f18d9111f676f2899d9aa2444130c985eb75395machenbach@chromium.org          v8::ArrayBuffer::New(context->GetIsolate(), 128);
1011fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
1021fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      Handle<JSArrayBuffer> iab1 = v8::Utils::OpenHandle(*ab1);
1031fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      Handle<JSArrayBuffer> iab2 = v8::Utils::OpenHandle(*ab2);
10490dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org      CHECK_EQ(2, CountArrayBuffersInWeakList(isolate->heap()) - start);
1051fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      CHECK(HasArrayBufferInWeakList(isolate->heap(), *iab1));
1061fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      CHECK(HasArrayBufferInWeakList(isolate->heap(), *iab2));
1071fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    }
1081510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    isolate->heap()->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
10990dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org    CHECK_EQ(1, CountArrayBuffersInWeakList(isolate->heap()) - start);
1101fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    {
1111fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      HandleScope scope2(isolate);
1121fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      Handle<JSArrayBuffer> iab1 = v8::Utils::OpenHandle(*ab1);
1131fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
1141fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      CHECK(HasArrayBufferInWeakList(isolate->heap(), *iab1));
1151fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    }
1161fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  }
1171fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
1181510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  isolate->heap()->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
11990dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org  CHECK_EQ(start, CountArrayBuffersInWeakList(isolate->heap()));
1201fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
1211fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
1221fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
1231fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(WeakArrayBuffersFromScript) {
1241fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  v8::V8::Initialize();
1251fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  LocalContext context;
1261fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  Isolate* isolate = GetIsolateFrom(&context);
12790dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org  int start = CountArrayBuffersInWeakList(isolate->heap());
1281fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
1291fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  for (int i = 1; i <= 3; i++) {
1301fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    // Create 3 array buffers, make i-th of them garbage,
1311fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    // validate correct state of array buffer weak list.
13290dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org    CHECK_EQ(start, CountArrayBuffersInWeakList(isolate->heap()));
1331fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    {
1341fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      v8::HandleScope scope(context->GetIsolate());
1351fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
1361fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      {
1371fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org        v8::HandleScope s1(context->GetIsolate());
1381fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org        CompileRun("var ab1 = new ArrayBuffer(256);"
1391fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org                   "var ab2 = new ArrayBuffer(256);"
1401fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org                   "var ab3 = new ArrayBuffer(256);");
141f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org        v8::Handle<v8::ArrayBuffer> ab1 =
142f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org            v8::Handle<v8::ArrayBuffer>::Cast(CompileRun("ab1"));
143f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org        v8::Handle<v8::ArrayBuffer> ab2 =
144f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org            v8::Handle<v8::ArrayBuffer>::Cast(CompileRun("ab2"));
145f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org        v8::Handle<v8::ArrayBuffer> ab3 =
146f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org            v8::Handle<v8::ArrayBuffer>::Cast(CompileRun("ab3"));
1471fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
14890dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org        CHECK_EQ(3, CountArrayBuffersInWeakList(isolate->heap()) - start);
1491fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org        CHECK(HasArrayBufferInWeakList(isolate->heap(),
1501fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org              *v8::Utils::OpenHandle(*ab1)));
1511fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org        CHECK(HasArrayBufferInWeakList(isolate->heap(),
1521fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org              *v8::Utils::OpenHandle(*ab2)));
1531fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org        CHECK(HasArrayBufferInWeakList(isolate->heap(),
1541fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org              *v8::Utils::OpenHandle(*ab3)));
1551fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      }
1561fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
1571fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      i::ScopedVector<char> source(1024);
15870ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org      i::SNPrintF(source, "ab%d = null;", i);
1591fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      CompileRun(source.start());
1601510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      isolate->heap()->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
1611fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
16290dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org      CHECK_EQ(2, CountArrayBuffersInWeakList(isolate->heap()) - start);
1631fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
1641fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      {
1651fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org        v8::HandleScope s2(context->GetIsolate());
1661fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org        for (int j = 1; j <= 3; j++) {
1671fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org          if (j == i) continue;
16870ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org          i::SNPrintF(source, "ab%d", j);
169f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org          v8::Handle<v8::ArrayBuffer> ab =
170f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org              v8::Handle<v8::ArrayBuffer>::Cast(CompileRun(source.start()));
1711fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org          CHECK(HasArrayBufferInWeakList(isolate->heap(),
1721fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org                *v8::Utils::OpenHandle(*ab)));
1731fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org          }
1741fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      }
1751fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
1761fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      CompileRun("ab1 = null; ab2 = null; ab3 = null;");
1771fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    }
1781fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
1791510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    isolate->heap()->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
18090dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org    CHECK_EQ(start, CountArrayBuffersInWeakList(isolate->heap()));
1811fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  }
1821fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
1831fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
1841510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgtemplate <typename View>
1851510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvoid TestViewFromApi() {
1861fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  v8::V8::Initialize();
1871fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  LocalContext context;
1881fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  Isolate* isolate = GetIsolateFrom(&context);
1891fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
1901fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  v8::HandleScope s1(context->GetIsolate());
1919f18d9111f676f2899d9aa2444130c985eb75395machenbach@chromium.org  v8::Handle<v8::ArrayBuffer> ab =
1929f18d9111f676f2899d9aa2444130c985eb75395machenbach@chromium.org      v8::ArrayBuffer::New(context->GetIsolate(), 2048);
1931fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  Handle<JSArrayBuffer> iab = v8::Utils::OpenHandle(*ab);
1941fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  {
1951fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    v8::HandleScope s2(context->GetIsolate());
1961510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    v8::Handle<View> ta1 = View::New(ab, 0, 256);
1971fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    {
1981fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      v8::HandleScope s3(context->GetIsolate());
1991510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      v8::Handle<View> ta2 = View::New(ab, 0, 128);
2001fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2011510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      Handle<JSArrayBufferView> ita1 = v8::Utils::OpenHandle(*ta1);
2021510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      Handle<JSArrayBufferView> ita2 = v8::Utils::OpenHandle(*ta2);
2031510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      CHECK_EQ(2, CountViews(*iab));
2041510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      CHECK(HasViewInWeakList(*iab, *ita1));
2051510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      CHECK(HasViewInWeakList(*iab, *ita2));
2061fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    }
2071510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    isolate->heap()->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
2081510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    CHECK_EQ(1, CountViews(*iab));
2091510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    Handle<JSArrayBufferView> ita1 = v8::Utils::OpenHandle(*ta1);
2101510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    CHECK(HasViewInWeakList(*iab, *ita1));
2111fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  }
2121510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  isolate->heap()->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
2131fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2141510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  CHECK_EQ(0, CountViews(*iab));
2151fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
2161fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2171fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2181fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Uint8ArrayFromApi) {
2191510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  TestViewFromApi<v8::Uint8Array>();
2201fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
2211fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2221fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2231fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Int8ArrayFromApi) {
2241510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  TestViewFromApi<v8::Int8Array>();
2251fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
2261fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2271fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2281fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Uint16ArrayFromApi) {
2291510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  TestViewFromApi<v8::Uint16Array>();
2301fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
2311fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2321fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2331fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Int16ArrayFromApi) {
2341510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  TestViewFromApi<v8::Int16Array>();
2351fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
2361fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2371fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2381fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Uint32ArrayFromApi) {
2391510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  TestViewFromApi<v8::Uint32Array>();
2401fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
2411fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2421fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2431fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Int32ArrayFromApi) {
2441510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  TestViewFromApi<v8::Int32Array>();
2451fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
2461fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2471fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2481fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Float32ArrayFromApi) {
2491510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  TestViewFromApi<v8::Float32Array>();
2501fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
2511fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2521fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2531fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Float64ArrayFromApi) {
2541510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  TestViewFromApi<v8::Float64Array>();
2551fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
2561fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2571fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2581fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Uint8ClampedArrayFromApi) {
2591510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  TestViewFromApi<v8::Uint8ClampedArray>();
2601510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}
2611510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
2621510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
2631510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgTEST(DataViewFromApi) {
2641510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  TestViewFromApi<v8::DataView>();
2651fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
2661fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2671fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgtemplate <typename TypedArray>
2681fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgstatic void TestTypedArrayFromScript(const char* constructor) {
2691fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  v8::V8::Initialize();
2701fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  LocalContext context;
2711fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  Isolate* isolate = GetIsolateFrom(&context);
2721fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  v8::HandleScope scope(context->GetIsolate());
27390dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org  int start = CountArrayBuffersInWeakList(isolate->heap());
2741fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  CompileRun("var ab = new ArrayBuffer(2048);");
2751fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  for (int i = 1; i <= 3; i++) {
2761fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    // Create 3 typed arrays, make i-th of them garbage,
2771fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    // validate correct state of typed array weak list.
2781fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    v8::HandleScope s0(context->GetIsolate());
2791fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    i::ScopedVector<char> source(2048);
2801fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
28190dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org    CHECK_EQ(1, CountArrayBuffersInWeakList(isolate->heap()) - start);
2821fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2831fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    {
2841fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      v8::HandleScope s1(context->GetIsolate());
28570ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org      i::SNPrintF(source,
28670ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org              "var ta1 = new %s(ab);"
28770ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org              "var ta2 = new %s(ab);"
28870ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org              "var ta3 = new %s(ab)",
28970ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org              constructor, constructor, constructor);
2901fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
2911fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      CompileRun(source.start());
292f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org      v8::Handle<v8::ArrayBuffer> ab =
293f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org          v8::Handle<v8::ArrayBuffer>::Cast(CompileRun("ab"));
294f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org      v8::Handle<TypedArray> ta1 =
295f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org          v8::Handle<TypedArray>::Cast(CompileRun("ta1"));
296f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org      v8::Handle<TypedArray> ta2 =
297f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org          v8::Handle<TypedArray>::Cast(CompileRun("ta2"));
298f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org      v8::Handle<TypedArray> ta3 =
299f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org          v8::Handle<TypedArray>::Cast(CompileRun("ta3"));
30090dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org      CHECK_EQ(1, CountArrayBuffersInWeakList(isolate->heap()) - start);
3011fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      Handle<JSArrayBuffer> iab = v8::Utils::OpenHandle(*ab);
3021510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      CHECK_EQ(3, CountViews(*iab));
3031510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      CHECK(HasViewInWeakList(*iab, *v8::Utils::OpenHandle(*ta1)));
3041510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      CHECK(HasViewInWeakList(*iab, *v8::Utils::OpenHandle(*ta2)));
3051510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      CHECK(HasViewInWeakList(*iab, *v8::Utils::OpenHandle(*ta3)));
3061fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    }
3071fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
30870ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org    i::SNPrintF(source, "ta%d = null;", i);
3091fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    CompileRun(source.start());
3101510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    isolate->heap()->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
3111fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
31290dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org    CHECK_EQ(1, CountArrayBuffersInWeakList(isolate->heap()) - start);
3131fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3141fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    {
3151fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      v8::HandleScope s2(context->GetIsolate());
316f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org      v8::Handle<v8::ArrayBuffer> ab =
317f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org          v8::Handle<v8::ArrayBuffer>::Cast(CompileRun("ab"));
3181fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      Handle<JSArrayBuffer> iab = v8::Utils::OpenHandle(*ab);
3191510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      CHECK_EQ(2, CountViews(*iab));
3201fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      for (int j = 1; j <= 3; j++) {
3211fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org        if (j == i) continue;
32270ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org        i::SNPrintF(source, "ta%d", j);
323f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org        v8::Handle<TypedArray> ta =
324f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org            v8::Handle<TypedArray>::Cast(CompileRun(source.start()));
3251510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        CHECK(HasViewInWeakList(*iab, *v8::Utils::OpenHandle(*ta)));
3261fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      }
3271fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    }
3281fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3291fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    CompileRun("ta1 = null; ta2 = null; ta3 = null;");
3301510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    isolate->heap()->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
3311fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
33290dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org    CHECK_EQ(1, CountArrayBuffersInWeakList(isolate->heap()) - start);
3331fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3341fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    {
3351fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      v8::HandleScope s3(context->GetIsolate());
336f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org      v8::Handle<v8::ArrayBuffer> ab =
337f95d4b920abb640ab0986d138ad559a7d3b91d04danno@chromium.org          v8::Handle<v8::ArrayBuffer>::Cast(CompileRun("ab"));
3381fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org      Handle<JSArrayBuffer> iab = v8::Utils::OpenHandle(*ab);
3391510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      CHECK_EQ(0, CountViews(*iab));
3401fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org    }
3411fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  }
3421fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
3431fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3441fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3451fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Uint8ArrayFromScript) {
3461fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  TestTypedArrayFromScript<v8::Uint8Array>("Uint8Array");
3471fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
3481fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3491fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3501fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Int8ArrayFromScript) {
3511fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  TestTypedArrayFromScript<v8::Int8Array>("Int8Array");
3521fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
3531fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3541fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3551fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Uint16ArrayFromScript) {
3561fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  TestTypedArrayFromScript<v8::Uint16Array>("Uint16Array");
3571fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
3581fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3591fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3601fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Int16ArrayFromScript) {
3611fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  TestTypedArrayFromScript<v8::Int16Array>("Int16Array");
3621fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
3631fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3641fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3651fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Uint32ArrayFromScript) {
3661fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  TestTypedArrayFromScript<v8::Uint32Array>("Uint32Array");
3671fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
3681fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3691fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3701fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Int32ArrayFromScript) {
3711fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  TestTypedArrayFromScript<v8::Int32Array>("Int32Array");
3721fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
3731fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3741fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3751fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Float32ArrayFromScript) {
3761fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  TestTypedArrayFromScript<v8::Float32Array>("Float32Array");
3771fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
3781fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3791fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3801fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Float64ArrayFromScript) {
3811fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  TestTypedArrayFromScript<v8::Float64Array>("Float64Array");
3821fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
3831fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3841fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3851fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgTEST(Uint8ClampedArrayFromScript) {
3861fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  TestTypedArrayFromScript<v8::Uint8ClampedArray>("Uint8ClampedArray");
3871fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
3881fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
3891510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
3901510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgTEST(DataViewFromScript) {
3911510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  TestTypedArrayFromScript<v8::DataView>("DataView");
3921510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}
393