// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
//
// Dart test program for testing native int arrays.

// Library tag to be able to run in html test framework.
library IntArrayTest;

import "package:expect/expect.dart";
import 'dart:typed_data';

void testInt16() {
  Int16List intArray = new Int16List(4);
  intArray[0] = 0;
  intArray[1] = -1;
  intArray[2] = -2;
  intArray[3] = -3;
  for (int i = 0; i < intArray.length; i++) {
    intArray[i]++;
  }
  var x = intArray[0];
  var y = intArray[1];
  var z = intArray[2];
  var w = intArray[3];
  Expect.equals(1, x);
  Expect.equals(0, y);
  Expect.equals(-1, z);
  Expect.equals(-2, w);
  var t = y + 1;
  intArray[0] = t;
  Expect.equals(t, intArray[0]);
}

void testUint16() {
  Uint16List intArray = new Uint16List(4);
  intArray[0] = 0;
  intArray[1] = 1;
  intArray[2] = 2;
  intArray[3] = 3;
  for (int i = 0; i < intArray.length; i++) {
    intArray[i]--;
  }
  var x = intArray[0];
  var y = intArray[1];
  var z = intArray[2];
  var w = intArray[3];
  Expect.equals(65535, x);
  Expect.equals(0, y);
  Expect.equals(1, z);
  Expect.equals(2, w);
  var t = y + 1;
  intArray[0] = t;
  Expect.equals(t, intArray[0]);
}

void testInt32ToSmi() {
  Int32List intArray;

  intArray = new Int32List(4);
  intArray[0] = 1073741823; // SmiMax
  intArray[1] = -1073741824; // SmiMin
  intArray[2] = 1073741824; // SmiMax+1
  intArray[3] = -1073741825; // SmiMin-1
  var x = intArray[0];
  var y = intArray[1];
  var z = intArray[2];
  var w = intArray[3];
  Expect.equals(1073741823, x);
  Expect.equals(-1073741824, y);
  Expect.equals(1073741824, z);
  Expect.equals(-1073741825, w);
}

void testUint32ToSmi() {
  Uint32List intArray;

  intArray = new Uint32List(4);
  intArray[0] = 1073741823; // SmiMax
  intArray[1] = -1; // 0xFFFFFFFF : 4294967295
  intArray[2] = 1073741830; // SmiMax+7
  intArray[3] = -1073741825; // 0xbfffffff : 3221225471
  var x = intArray[0];
  var y = intArray[1];
  var z = intArray[2];
  var w = intArray[3];
  Expect.equals(1073741823, x);
  Expect.equals(4294967295, y);
  Expect.equals(1073741830, z);
  Expect.equals(3221225471, w);
}

void testInt64ToSmi() {
  Int64List intArray;

  intArray = new Int64List(4);
  intArray[0] = 4611686018427387903; // SmiMax
  intArray[1] = -4611686018427387904; // SmiMin
  intArray[2] = 4611686018427387904; // SmiMax+1
  intArray[3] = -4611686018427387905; // SmiMin-1
  var x = intArray[0];
  var y = intArray[1];
  var z = intArray[2];
  var w = intArray[3];
  Expect.equals(4611686018427387903, x);
  Expect.equals(-4611686018427387904, y);
  Expect.equals(4611686018427387904, z);
  Expect.equals(-4611686018427387905, w);
}

void testUint64ToSmi() {
  Uint64List intArray;

  intArray = new Uint64List(4);
  intArray[0] = 4611686018427387903; // SmiMax
  intArray[1] = -1; // 0xFFFFFFFFFFFFFFFF : 18446744073709551615
  intArray[2] = 4611686018427387904; // SmiMax+1
  intArray[3] = -9223372036854775808;
  var x = intArray[0];
  var y = intArray[1];
  var z = intArray[2];
  var w = intArray[3];
  Expect.equals(4611686018427387903, x);
  Expect.equals(-1, y);
  Expect.equals(4611686018427387904, z);
  Expect.equals(-9223372036854775808, w);
}

main() {
  testUint64ToSmi();
  for (int i = 0; i < 2000; i++) {
    testInt16();
    testUint16();
    testInt32ToSmi();
    testUint32ToSmi();
    testInt64ToSmi();
    testUint64ToSmi();
  }
}
