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

class Test1 {
  int t;

  void test() {
    var /*@ type=int* */ v1 = /*@target=Test1.t*/ t = getInt();

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

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

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

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

class Test2 {
  num t;

  void test() {
    var /*@ type=int* */ v1 = /*@target=Test2.t*/ t = getInt();

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

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

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

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

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

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

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

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

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

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

class Test3 {
  double t;

  void test3() {
    var /*@ type=double* */ v3 = /*@target=Test3.t*/ t = getDouble();

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

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

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

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

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

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

main() {}
