// 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() {}
