// Copyright (c) 2017, 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.

/*@testedFeatures=inference*/
library test;

int getInt() => 0;
num getNum() => 0;
double getDouble() => 0.0;

void test1(int t) {
  var /*@ type=int* */ v1 = t = getInt();

  var /*@ type=num* */ v2 = t = getNum();

  var /*@ type=int* */ v4 = t /*@ target=num::== */ ??= getInt();

  var /*@ type=num* */ v5 = t /*@ target=num::== */ ??= getNum();

  var /*@ type=int* */ v7 = t /*@ target=num::+ */ += getInt();

  var /*@ type=num* */ v8 = t /*@ target=num::+ */ += getNum();

  var /*@ type=int* */ v10 = /*@ target=num::+ */ ++t;

  var /*@ type=int* */ v11 =
      /*@ type=int* */ t /*@ type=int* */ /*@ target=num::+ */ ++;
}

void test2(num t) {
  var /*@ type=int* */ v1 = t = getInt();

  var /*@ type=num* */ v2 = t = getNum();

  var /*@ type=double* */ v3 = t = getDouble();

  var /*@ type=num* */ v4 = t /*@ target=num::== */ ??= getInt();

  var /*@ type=num* */ v5 = t /*@ target=num::== */ ??= getNum();

  var /*@ type=num* */ v6 = t /*@ target=num::== */ ??= getDouble();

  var /*@ type=num* */ v7 = t /*@ target=num::+ */ += getInt();

  var /*@ type=num* */ v8 = t /*@ target=num::+ */ += getNum();

  var /*@ type=num* */ v9 = t /*@ target=num::+ */ += getDouble();

  var /*@ type=num* */ v10 = /*@ target=num::+ */ ++t;

  var /*@ type=num* */ v11 =
      /*@ type=num* */ t /*@ type=num* */ /*@ target=num::+ */ ++;
}

void test3(double t) {
  var /*@ type=num* */ v2 = t = getNum();

  var /*@ type=double* */ v3 = t = getDouble();

  var /*@ type=num* */ v5 = t /*@ target=num::== */ ??= getNum();

  var /*@ type=double* */ v6 = t /*@ target=num::== */ ??= getDouble();

  var /*@ type=double* */ v7 = t /*@ target=double::+ */ += getInt();

  var /*@ type=double* */ v8 = t /*@ target=double::+ */ += getNum();

  var /*@ type=double* */ v9 = t /*@ target=double::+ */ += getDouble();

  var /*@ type=double* */ v10 = /*@ target=double::+ */ ++t;

  var /*@ type=double* */ v11 =
      /*@ type=double* */ t /*@ type=double* */ /*@ target=double::+ */ ++;
}

main() {}
