/*
 * 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 The assignment e1?.f = e2 translates to:
 *  SHORT[EXP(e1), fn[x] => x.f = EXP(e2)]
 *
 *  The other assignment operators are handled equivalently.
 *
 * @description Check that assignments like e1?.f += e2 translates to:
 *  SHORT[EXP(e1), fn[x] => x.f += EXP(e2)]
 * @author sgrekhov@unipro.ru
 */
// Requirements=nnbd-strong
import "../../Utils/expect.dart";

class C {
  int test = -1;
  init() {
    test = -1;
  }
}

void testShort(C? x, int e2) {
  x?.init();
  var actual1 = x?.test += e2;
  x?.init();
  var n0 = x;
  var expected1 = n0 == null ? null : n0.test += e2;
  Expect.equals(expected1, actual1);
}

main() {
  C? c1 = null;
  testShort(c1, 42);
  c1 = new C();
  testShort(c1, 42);

  C c2 = new C();
  testShort(c2, 42);
}
