// 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.

import "package:expect/expect.dart";

class A {
  List<int> list;
  A(int a, int b) : list = <int>[a, b];
  operator [](index) => list[index];
  operator []=(index, value) => list[index] = value;
}

class B {
  int value;
  List trace;
  B(this.trace) : value = 100;
  operator [](index) {
    trace.add(-3);
    trace.add(index);
    trace.add(this.value);
    this.value = this.value + 1;
    return this;
  }

  operator []=(index, value) {
    trace.add(-5);
    trace.add(index);
    trace.add(value.value);
    this.value = this.value + 1;
  }

  operator +(int value) {
    trace.add(-4);
    trace.add(this.value);
    trace.add(value);
    this.value = this.value + 1;
    return this;
  }
}

B getB(trace) {
  trace.add(-1);
  return new B(trace);
}
int getIndex(trace) {
  trace.add(-2);
  return 42;
}

main() {
  A a = new A(1, 2);
  Expect.equals(1, a[0]);
  Expect.equals(2, a[1]);

  Expect.equals(1, a[0]++);
  Expect.equals(2, a[0]);

  Expect.equals(2, a[0]--);
  Expect.equals(1, a[0]);

  Expect.equals(0, --a[0]);
  Expect.equals(0, a[0]);

  Expect.equals(1, ++a[0]);
  Expect.equals(1, a[0]);

  a[0] += 2;
  Expect.equals(3, a[0]);

  List trace = new List();
  getB(trace)[getIndex(trace)] += 37;

  Expect.listEquals([-1, -2, -3, 42, 100, -4, 101, 37, -5, 42, 102], trace);
}
