// 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=int* */ v4 = t ??= getInt();
  var /*@ type=int* */ v7 = t += getInt();
  var /*@ type=int* */ v10 = ++t;
  var /*@ type=int* */ v11 = t++;
}

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 ??= getInt();
  var /*@ type=num* */ v5 = t ??= getNum();
  var /*@ type=num* */ v6 = t ??= getDouble();
  var /*@ type=num* */ v7 = t += getInt();
  var /*@ type=num* */ v8 = t += getNum();
  var /*@ type=num* */ v9 = t += getDouble();
  var /*@ type=num* */ v10 = ++t;
  var /*@ type=num* */ v11 = t++;
}

void test3(double t) {
  var /*@ type=double* */ v3 = t = getDouble();
  var /*@ type=double* */ v6 = t ??= getDouble();
  var /*@ type=double* */ v7 = t += getInt();
  var /*@ type=double* */ v8 = t += getNum();
  var /*@ type=double* */ v9 = t += getDouble();
  var /*@ type=double* */ v10 = ++t;
  var /*@ type=double* */ v11 = t++;
}

main() {}
