// Copyright (c) 2019, 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 iarkh@unipro.ru
 */
// SharedOptions=--enable-experiment=triple-shift

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 one time only
  Expect.equals(1, a.setterInvocation); //checks that setter was invoked one time only
  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);
}
