// Copyright (c) 2011, 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 increment operator.

class A {
  static var yy;
  static set y(v) {
    yy = v;
  }

  static get y() {
    return yy;
  }
}

class IncrOpTest {
  var x;
  static var y;

  IncrOpTest() {}

  static testMain() {
    var a = 3;
    var c = a++ + 1;
    Expect.equals(4, c);
    Expect.equals(4, a);
    c = a-- + 1;
    Expect.equals(5, c);
    Expect.equals(3, a);

    c = --a + 1;
    Expect.equals(3, c);
    Expect.equals(2, a);

    c = 2 + ++a;
    Expect.equals(5, c);
    Expect.equals(3, a);

    var obj = new IncrOpTest();
    obj.x = 100;
    Expect.equals(100, obj.x);
    obj.x++;
    Expect.equals(101, obj.x);
    Expect.equals(102, ++obj.x);
    Expect.equals(102, obj.x++);
    Expect.equals(103, obj.x);

    A.y = 55;
    Expect.equals(55, A.y++);
    Expect.equals(56, A.y);
    Expect.equals(57, ++A.y);
    Expect.equals(57, A.y);
    Expect.equals(56, --A.y);

    IncrOpTest.y = 55;
    Expect.equals(55, IncrOpTest.y++);
    Expect.equals(56, IncrOpTest.y);
    Expect.equals(57, ++IncrOpTest.y);
    Expect.equals(57, IncrOpTest.y);
    Expect.equals(56, --IncrOpTest.y);

    var list = new List(4);
    for (int i = 0; i < list.length; i++) {
      list[i] = i;
    }
    for (int i = 0; i < list.length; i++) {
      list[i]++;
    }
    for (int i = 0; i < list.length; i++) {
      Expect.equals(i + 1, list[i]);
      ++list[i];
    }
    Expect.equals(1 + 2, list[1]);
    Expect.equals(1 + 2, list[1]--);
    Expect.equals(1 + 1, list[1]);
    Expect.equals(1 + 0, --list[1]);
  }
}

main() {
  IncrOpTest.testMain();
}
