11510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Copyright 2013 the V8 project authors. All rights reserved.
21510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Redistribution and use in source and binary forms, with or without
31510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// modification, are permitted provided that the following conditions are
41510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// met:
51510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org//
61510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org//     * Redistributions of source code must retain the above copyright
71510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org//       notice, this list of conditions and the following disclaimer.
81510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org//     * Redistributions in binary form must reproduce the above
91510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org//       copyright notice, this list of conditions and the following
101510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org//       disclaimer in the documentation and/or other materials provided
111510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org//       with the distribution.
121510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org//     * Neither the name of Google Inc. nor the names of its
131510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org//       contributors may be used to endorse or promote products derived
141510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org//       from this software without specific prior written permission.
151510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org//
161510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
171510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
181510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
191510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
201510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
211510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
221510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
231510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
241510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
251510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
261510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
271510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
281510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// These tests are adapted from Khronos DataView tests
291510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
301510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar intArray1 =
311510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  [0, 1, 2, 3, 100, 101, 102, 103, 128, 129, 130, 131, 252, 253, 254, 255];
321510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar intArray2 =
331510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  [31, 32, 33, 0, 1, 2, 3, 100, 101, 102, 103, 128, 129, 130, 131, 252,
341510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    253, 254, 255];
351510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar initialArray =
361510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  [204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204,
371510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    204, 204, 204];
381510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
391510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar arayBuffer = null;
401510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar view = null;
411510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar viewStart = 0;
421510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar viewLength = 0;
431510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
441510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgfunction getElementSize(func) {
451510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  switch (func) {
461510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    case "Int8":
471510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    case "Uint8":
481510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      return 1;
491510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    case "Int16":
501510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    case "Uint16":
511510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      return 2;
521510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    case "Int32":
531510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    case "Uint32":
541510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    case "Float32":
551510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      return 4;
561510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    case "Float64":
571510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      return 8;
581510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    default:
591510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      assertUnreachable(func);
601510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  }
611510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}
621510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
631510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgfunction checkGet(func, index, expected, littleEndian) {
641510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  function doGet() {
65169691d93a961c8b511f8ac8fd8ee33d081ca10fdanno@chromium.org    if (littleEndian != undefined)
66169691d93a961c8b511f8ac8fd8ee33d081ca10fdanno@chromium.org      return view["get" + func](index, littleEndian);
67169691d93a961c8b511f8ac8fd8ee33d081ca10fdanno@chromium.org    else
68169691d93a961c8b511f8ac8fd8ee33d081ca10fdanno@chromium.org      return view["get" + func](index);
691510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  }
701510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  if (index >=0 && index + getElementSize(func) - 1 < view.byteLength)
711510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      assertSame(expected, doGet());
721510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  else
731510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      assertThrows(doGet, RangeError);
741510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}
751510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
761510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgfunction checkSet(func, index, value, littleEndian) {
771510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  function doSet() {
78169691d93a961c8b511f8ac8fd8ee33d081ca10fdanno@chromium.org    if (littleEndian != undefined)
79169691d93a961c8b511f8ac8fd8ee33d081ca10fdanno@chromium.org      view["set" + func](index, value, littleEndian);
80169691d93a961c8b511f8ac8fd8ee33d081ca10fdanno@chromium.org    else
81169691d93a961c8b511f8ac8fd8ee33d081ca10fdanno@chromium.org      view["set" + func](index, value);
821510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  }
831510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  if (index >= 0 &&
841510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      index + getElementSize(func) - 1 < view.byteLength) {
851510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    assertSame(undefined, doSet());
861510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    checkGet(func, index, value, littleEndian);
871510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  } else {
881510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    assertThrows(doSet, RangeError);
891510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  }
901510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}
911510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
921510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgfunction test(isTestingGet, func, index, value, littleEndian) {
931510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  if (isTestingGet)
941510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    checkGet(func, index, value, littleEndian);
951510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  else
961510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    checkSet(func, index, value, littleEndian);
971510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}
981510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
991510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgfunction createDataView(
1001510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    array, frontPaddingNum, littleEndian, start, length) {
1011510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  if (!littleEndian)
1021510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    array.reverse();
1031510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  var paddingArray = new Array(frontPaddingNum);
1041510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  arrayBuffer = (new Uint8Array(paddingArray.concat(array))).buffer;
1051510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  view = new DataView(arrayBuffer, viewStart, viewLength);
1061510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  if (!littleEndian)
1071510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    array.reverse(); // restore the array.
1081510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}
1091510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
1101510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgfunction runIntegerTestCases(isTestingGet, array, start, length) {
1111510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  createDataView(array, 0, true, start, length);
1121510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
1131510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Int8", 0, 0);
114169691d93a961c8b511f8ac8fd8ee33d081ca10fdanno@chromium.org  test(isTestingGet, "Int8", undefined, 0);
1151510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Int8", 8, -128);
1161510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Int8", 15, -1);
117af9cfcbed5daf6e636e189bce451c6fafdbb127dmachenbach@chromium.org  test(isTestingGet, "Int8", 1e12, undefined);
1181510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
1191510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Uint8", 0, 0);
120169691d93a961c8b511f8ac8fd8ee33d081ca10fdanno@chromium.org  test(isTestingGet, "Uint8", undefined, 0);
1211510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Uint8", 8, 128);
1221510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Uint8", 15, 255);
123af9cfcbed5daf6e636e189bce451c6fafdbb127dmachenbach@chromium.org  test(isTestingGet, "Uint8", 1e12, undefined);
1241510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
1251510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  // Little endian.
1261510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Int16", 0, 256, true);
127169691d93a961c8b511f8ac8fd8ee33d081ca10fdanno@chromium.org  test(isTestingGet, "Int16", undefined, 256, true);
1281510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Int16", 5, 26213, true);
1291510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Int16", 9, -32127, true);
1301510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Int16", 14, -2, true);
131af9cfcbed5daf6e636e189bce451c6fafdbb127dmachenbach@chromium.org  test(isTestingGet, "Int16", 1e12, undefined, true);
1321510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
1331510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  // Big endian.
1341510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Int16", 0, 1);
135169691d93a961c8b511f8ac8fd8ee33d081ca10fdanno@chromium.org  test(isTestingGet, "Int16", undefined, 1);
1361510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Int16", 5, 25958);
1371510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Int16", 9, -32382);
1381510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Int16", 14, -257);
139af9cfcbed5daf6e636e189bce451c6fafdbb127dmachenbach@chromium.org  test(isTestingGet, "Int16", 1e12, undefined);
1401510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
1411510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  // Little endian.
1421510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Uint16", 0, 256, true);
143169691d93a961c8b511f8ac8fd8ee33d081ca10fdanno@chromium.org  test(isTestingGet, "Uint16", undefined, 256, true);
1441510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Uint16", 5, 26213, true);
1451510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Uint16", 9, 33409, true);
1461510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Uint16", 14, 65534, true);
147af9cfcbed5daf6e636e189bce451c6fafdbb127dmachenbach@chromium.org  test(isTestingGet, "Uint16", 1e12, undefined, true);
1481510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
1491510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  // Big endian.
1501510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Uint16", 0, 1);
151169691d93a961c8b511f8ac8fd8ee33d081ca10fdanno@chromium.org  test(isTestingGet, "Uint16", undefined, 1);
1521510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Uint16", 5, 25958);
1531510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Uint16", 9, 33154);
1541510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Uint16", 14, 65279);
155af9cfcbed5daf6e636e189bce451c6fafdbb127dmachenbach@chromium.org  test(isTestingGet, "Uint16", 1e12, undefined);
1561510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
1571510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  // Little endian.
1581510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Int32", 0, 50462976, true);
159169691d93a961c8b511f8ac8fd8ee33d081ca10fdanno@chromium.org  test(isTestingGet, "Int32", undefined, 50462976, true);
1601510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Int32", 3, 1717920771, true);
1611510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Int32", 6, -2122291354, true);
1621510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Int32", 9, -58490239, true);
1631510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Int32", 12,-66052, true);
164af9cfcbed5daf6e636e189bce451c6fafdbb127dmachenbach@chromium.org  test(isTestingGet, "Int32", 1e12, undefined, true);
1651510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
1661510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  // Big endian.
1671510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Int32", 0, 66051);
168169691d93a961c8b511f8ac8fd8ee33d081ca10fdanno@chromium.org  test(isTestingGet, "Int32", undefined, 66051);
1691510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Int32", 3, 56911206);
1701510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Int32", 6, 1718059137);
1711510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Int32", 9, -2122152964);
1721510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Int32", 12, -50462977);
173af9cfcbed5daf6e636e189bce451c6fafdbb127dmachenbach@chromium.org  test(isTestingGet, "Int32", 1e12, undefined);
1741510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
1751510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  // Little endian.
1761510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Uint32", 0, 50462976, true);
177169691d93a961c8b511f8ac8fd8ee33d081ca10fdanno@chromium.org  test(isTestingGet, "Uint32", undefined, 50462976, true);
1781510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Uint32", 3, 1717920771, true);
1791510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Uint32", 6, 2172675942, true);
1801510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Uint32", 9, 4236477057, true);
1811510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Uint32", 12,4294901244, true);
182af9cfcbed5daf6e636e189bce451c6fafdbb127dmachenbach@chromium.org  test(isTestingGet, "Uint32", 1e12, undefined, true);
1831510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
1841510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  // Big endian.
1851510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Uint32", 0, 66051);
186169691d93a961c8b511f8ac8fd8ee33d081ca10fdanno@chromium.org  test(isTestingGet, "Uint32", undefined, 66051);
1871510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Uint32", 3, 56911206);
1881510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Uint32", 6, 1718059137);
1891510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Uint32", 9, 2172814332);
1901510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Uint32", 12, 4244504319);
191af9cfcbed5daf6e636e189bce451c6fafdbb127dmachenbach@chromium.org  test(isTestingGet, "Uint32", 1e12, undefined);
1921510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}
1931510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
1941510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgfunction testFloat(isTestingGet, func, array, start, expected) {
1951510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  // Little endian.
1961510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  createDataView(array, 0, true, start);
1971510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, func, 0, expected, true);
198169691d93a961c8b511f8ac8fd8ee33d081ca10fdanno@chromium.org  test(isTestingGet, func, undefined, expected, true);
1991510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  createDataView(array, 3, true, start);
2001510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, func, 3, expected, true);
2011510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  createDataView(array, 7, true, start);
2021510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, func, 7, expected, true);
2031510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  createDataView(array, 10, true, start);
2041510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, func, 10, expected, true);
205af9cfcbed5daf6e636e189bce451c6fafdbb127dmachenbach@chromium.org  test(isTestingGet, func, 1e12, undefined, true);
2061510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
2071510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  // Big endian.
2081510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  createDataView(array, 0, false);
2091510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, func, 0, expected, false);
210169691d93a961c8b511f8ac8fd8ee33d081ca10fdanno@chromium.org  test(isTestingGet, func, undefined, expected, false);
2111510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  createDataView(array, 3, false);
2121510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, func, 3, expected, false);
2131510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  createDataView(array, 7, false);
2141510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, func, 7, expected, false);
2151510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  createDataView(array, 10, false);
2161510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, func, 10, expected, false);
217af9cfcbed5daf6e636e189bce451c6fafdbb127dmachenbach@chromium.org  test(isTestingGet, func, 1e12, undefined, false);
2181510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}
2191510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
2201510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgfunction runFloatTestCases(isTestingGet, start) {
2211510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  testFloat(isTestingGet, "Float32",
2221510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    isTestingGet ? [0, 0, 32, 65] : initialArray, start, 10);
2231510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
2241510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  testFloat(isTestingGet, "Float32",
2251510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    isTestingGet ? [164, 112, 157, 63] : initialArray,
2261510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      start, 1.2300000190734863);
2271510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  testFloat(isTestingGet, "Float32",
2281510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    isTestingGet ? [95, 53, 50, 199] : initialArray,
2291510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    start, -45621.37109375);
2301510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  testFloat(isTestingGet, "Float32",
2311510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    isTestingGet ? [255, 255, 255, 127] : initialArray,
2321510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    start, NaN);
2331510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  testFloat(isTestingGet, "Float32",
2341510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    isTestingGet ? [255, 255, 255, 255] : initialArray,
2351510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    start, -NaN);
2361510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
2371510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  testFloat(isTestingGet, "Float64",
2381510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    isTestingGet ? [0, 0, 0, 0, 0, 0, 36, 64] : initialArray,
2391510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    start, 10);
2401510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  testFloat(isTestingGet, "Float64",
2411510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    isTestingGet ? [174, 71, 225, 122, 20, 174, 243, 63] : initialArray,
2421510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    start, 1.23);
2431510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  testFloat(isTestingGet, "Float64",
2441510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    isTestingGet ? [181, 55, 248, 30, 242, 179, 87, 193] : initialArray,
2451510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    start, -6213576.4839);
2461510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  testFloat(isTestingGet, "Float64",
2471510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    isTestingGet ? [255, 255, 255, 255, 255, 255, 255, 127] : initialArray,
2481510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    start, NaN);
2491510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  testFloat(isTestingGet, "Float64",
2501510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    isTestingGet ? [255, 255, 255, 255, 255, 255, 255, 255] : initialArray,
2511510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    start, -NaN);
2521510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}
2531510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
2541510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgfunction runNegativeIndexTests(isTestingGet) {
2551510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  createDataView(intArray1, 0, true, 0, 16);
2561510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
2571510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Int8", -1, 0);
2581510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Int8", -2, 0);
2591510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
2601510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Uint8", -1, 0);
2611510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Uint8", -2, 0);
2621510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
2631510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Int16", -1, 1);
2641510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Int16", -2, 1);
2651510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Int16", -3, 1);
2661510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
2671510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Uint16", -1, 1);
2681510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Uint16", -2, 1);
2691510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Uint16", -3, 1);
2701510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
2711510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Int32", -1, 66051);
2721510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Int32", -3, 66051);
2731510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Int32", -5, 66051);
2741510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
2751510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Uint32", -1, 66051);
2761510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Uint32", -3, 66051);
2771510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Uint32", -5, 66051);
2781510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
2791510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  createDataView([0, 0, 0, 0, 0, 0, 0, 0], 0, true, 0, 8);
2801510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
2811510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Float32", -1, 0);
2821510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Float32", -3, 0);
2831510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Float32", -5, 0);
2841510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
2851510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Float64", -1, 0);
2861510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Float64", -5, 0);
2871510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  test(isTestingGet, "Float64", -9, 0);
2881510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}
2891510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
2901510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
2911510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgfunction TestGetters() {
2921510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  runIntegerTestCases(true, intArray1, 0, 16);
2931510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  runFloatTestCases(true, 0);
2941510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
2951510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  runIntegerTestCases(true, intArray2, 3, 2);
2961510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  runFloatTestCases(true, 3);
2971510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
2981510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  runNegativeIndexTests(true);
2991510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}
3001510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
3011510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgfunction TestSetters() {
3021510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  runIntegerTestCases(false, initialArray, 0, 16);
3031510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  runFloatTestCases(false);
3041510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
3051510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  runIntegerTestCases(false, initialArray, 3, 2);
3061510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  runFloatTestCases(false, 7);
3071510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
3081510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  runNegativeIndexTests(false);
3091510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}
3101510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
3111510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgTestGetters();
3121510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgTestSetters();
3131510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
31410480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.orgfunction CheckOutOfRangeInt8(value, expected) {
31510480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  var view = new DataView(new ArrayBuffer(100));
31610480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  assertSame(undefined, view.setInt8(0, value));
31710480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  assertSame(expected, view.getInt8(0));
31810480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  assertSame(undefined, view.setInt8(0, value, true));
31910480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  assertSame(expected, view.getInt8(0, true));
32010480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org}
32110480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org
32210480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.orgfunction CheckOutOfRangeUint8(value, expected) {
32310480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  var view = new DataView(new ArrayBuffer(100));
32410480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  assertSame(undefined, view.setUint8(0, value));
32510480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  assertSame(expected, view.getUint8(0));
32610480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  assertSame(undefined, view.setUint8(0, value, true));
32710480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  assertSame(expected, view.getUint8(0, true));
32810480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org}
32910480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org
33010480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.orgfunction CheckOutOfRangeInt16(value, expected) {
33110480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  var view = new DataView(new ArrayBuffer(100));
33210480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  assertSame(undefined, view.setInt16(0, value));
33310480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  assertSame(expected, view.getInt16(0));
33410480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  assertSame(undefined, view.setInt16(0, value, true));
33510480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  assertSame(expected, view.getInt16(0, true));
33610480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org}
33710480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org
33810480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.orgfunction CheckOutOfRangeUint16(value, expected) {
33910480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  var view = new DataView(new ArrayBuffer(100));
34010480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  assertSame(undefined, view.setUint16(0, value));
34110480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  assertSame(expected, view.getUint16(0));
34210480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  assertSame(undefined, view.setUint16(0, value, true));
34310480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  assertSame(expected, view.getUint16(0, true));
34410480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org}
34510480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org
34610480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.orgfunction CheckOutOfRangeInt32(value, expected) {
34710480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  var view = new DataView(new ArrayBuffer(100));
34810480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  assertSame(undefined, view.setInt32(0, value));
34910480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  assertSame(expected, view.getInt32(0));
35010480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  assertSame(undefined, view.setInt32(0, value, true));
35110480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  assertSame(expected, view.getInt32(0, true));
35210480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org}
35310480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org
35410480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.orgfunction CheckOutOfRangeUint32(value, expected) {
35510480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  var view = new DataView(new ArrayBuffer(100));
35610480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  assertSame(undefined, view.setUint32(0, value));
35710480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  assertSame(expected, view.getUint32(0));
35810480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  assertSame(undefined, view.setUint32(0, value, true));
35910480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  assertSame(expected, view.getUint32(0, true));
36010480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org}
36110480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org
36210480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.orgfunction TestOutOfRange() {
36310480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  CheckOutOfRangeInt8(0x80,   -0x80);
36410480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  CheckOutOfRangeInt8(0x1000, 0);
36510480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  CheckOutOfRangeInt8(-0x81,  0x7F);
36610480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org
36710480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  CheckOutOfRangeUint8(0x100,  0);
36810480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  CheckOutOfRangeUint8(0x1000, 0);
36910480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  CheckOutOfRangeUint8(-0x80,  0x80);
37010480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  CheckOutOfRangeUint8(-1,     0xFF);
37110480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  CheckOutOfRangeUint8(-0xFF,  1);
37210480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org
37310480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  CheckOutOfRangeInt16(0x8000,  -0x8000);
37410480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  CheckOutOfRangeInt16(0x10000, 0);
37510480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  CheckOutOfRangeInt16(-0x8001, 0x7FFF);
37610480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org
37710480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  CheckOutOfRangeUint16(0x10000,  0);
37810480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  CheckOutOfRangeUint16(0x100000, 0);
37910480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  CheckOutOfRangeUint16(-0x8000,  0x8000);
38010480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  CheckOutOfRangeUint16(-1,       0xFFFF);
38110480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  CheckOutOfRangeUint16(-0xFFFF,  1);
38210480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org
38310480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  CheckOutOfRangeInt32(0x80000000,  -0x80000000);
38410480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  CheckOutOfRangeInt32(0x100000000, 0);
38510480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  CheckOutOfRangeInt32(-0x80000001, 0x7FFFFFFF);
38610480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org
38710480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  CheckOutOfRangeUint32(0x100000000,  0);
38810480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  CheckOutOfRangeUint32(0x1000000000, 0);
38910480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  CheckOutOfRangeUint32(-0x80000000,  0x80000000);
39010480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  CheckOutOfRangeUint32(-1,           0xFFFFFFFF);
39110480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  CheckOutOfRangeUint32(-0xFFFFFFFF,  1);
39210480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org}
39310480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org
39410480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.orgTestOutOfRange();
39510480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org
3961510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgfunction TestGeneralAccessors() {
3971510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  var a = new DataView(new ArrayBuffer(256));
3981510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  function CheckAccessor(name) {
3991510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    var f = a[name];
400169691d93a961c8b511f8ac8fd8ee33d081ca10fdanno@chromium.org    assertThrows(function() { f(); }, TypeError);
4011510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    f.call(a, 0, 0); // should not throw
4021510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    assertThrows(function() { f.call({}, 0, 0); }, TypeError);
403169691d93a961c8b511f8ac8fd8ee33d081ca10fdanno@chromium.org    assertThrows(function() { f.call(a); }, TypeError);
404fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    if (name.indexOf("set") == 0) {
405fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org      assertThrows(function() { f.call(a, 1); }, TypeError);
406fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    } else {
407fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org      f.call(a, 1); // should not throw
408fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    }
4091510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  }
4101510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  CheckAccessor("getUint8");
4111510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  CheckAccessor("setUint8");
4121510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  CheckAccessor("getInt8");
4131510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  CheckAccessor("setInt8");
4141510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  CheckAccessor("getUint16");
4151510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  CheckAccessor("setUint16");
4161510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  CheckAccessor("getInt16");
4171510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  CheckAccessor("setInt16");
4181510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  CheckAccessor("getUint32");
4191510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  CheckAccessor("setUint32");
4201510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  CheckAccessor("getInt32");
4211510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  CheckAccessor("setInt32");
4221510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  CheckAccessor("getFloat32");
4231510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  CheckAccessor("setFloat32");
4241510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  CheckAccessor("getFloat64");
4251510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  CheckAccessor("setFloat64");
4261510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}
4271510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
4281510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgTestGeneralAccessors();
429fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
430fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgfunction TestInsufficientArguments() {
431fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org  var a = new DataView(new ArrayBuffer(256));
432fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
433fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org  assertThrows(function() { a.getUint8(); }, TypeError);
434fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org  assertThrows(function() { a.getInt8(); }, TypeError);
435fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org  assertThrows(function() { a.getUint16(); }, TypeError);
436fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org  assertThrows(function() { a.getInt16(); }, TypeError);
437fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org  assertThrows(function() { a.getUint32(); }, TypeError);
438fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org  assertThrows(function() { a.getInt32(); }, TypeError);
439fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org  assertThrows(function() { a.getFloat32(); }, TypeError);
440fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org  assertThrows(function() { a.getFloat64(); }, TypeError);
441fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
442fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org  assertThrows(function() { a.setUint8(); }, TypeError);
443fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org  assertThrows(function() { a.setInt8(); }, TypeError);
444fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org  assertThrows(function() { a.setUint16(); }, TypeError);
445fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org  assertThrows(function() { a.setInt16(); }, TypeError);
446fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org  assertThrows(function() { a.setUint32(); }, TypeError);
447fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org  assertThrows(function() { a.setInt32(); }, TypeError);
448fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org  assertThrows(function() { a.setFloat32(); }, TypeError);
449fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org  assertThrows(function() { a.setFloat64(); }, TypeError);
450fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
451fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org  assertThrows(function() { a.setUint8(1) }, TypeError);
452fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org  assertThrows(function() { a.setInt8(1) }, TypeError);
453fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org  assertThrows(function() { a.setUint16(1) }, TypeError);
454fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org  assertThrows(function() { a.setInt16(1) }, TypeError);
455fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org  assertThrows(function() { a.setUint32(1) }, TypeError);
456fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org  assertThrows(function() { a.setInt32(1) }, TypeError);
457fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org  assertThrows(function() { a.setFloat32(1) }, TypeError);
458fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org  assertThrows(function() { a.setFloat64(1) }, TypeError);
459fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org}
460fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
461fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgTestInsufficientArguments();
462