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

/**
 * @assertion A compound assignment of the form e1.v op = e2 is equivalent
 * to ((x) => x.v = x.v op e2)(e1) where x is a variable that is not used in e2.
 * @description Checks that an expression of the form e1.v &= e2 is equivalent
 * to ((x) => x.v = x.v & e2)(e1) where x is a variable that is not used in e2.
 * @author msyabro
 */

import '../../../../Utils/expect.dart';

class C {
  C(this.v);

  operator &(val) {
    C c = new C(v & val);
    return c;
  }

  var v;
}

class A {
  A(val) {
    _c = new C(val);
  }

  get c {
    ++getterInvocation;
    return _c;
  }

  set c(val) {
    ++setterInvocation;
    _c = val;
  }

  C? _c;

  int getterInvocation = 0;
  int setterInvocation = 0;
}

check(operand1, operand2) {
  A a = new A(operand1);
  var expected = operand1 & operand2;
  var res = (a.c &= operand2);
  Expect.equals(1, a.getterInvocation);     //checks that getter was invoked only one time
  Expect.equals(1, a.setterInvocation);     //checks that setter was invoked only one time
  Expect.equals(expected, a.c.v);           //checks that result was assigned
  Expect.equals(expected, res.v);           //checks value
}

main() {
  check(3, 3);
  check(10, 1);
  check(5, 7);
  check(-2, 1);
}
