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

main() {
  num n = 1;
  int i = 1;
  double d = 1.0;

  // (double, double) -> double
  var /*@ type=double* */ ddPlus = d /*@target=double.+*/ + d;
  var /*@ type=double* */ ddMinus = d /*@target=double.-*/ - d;
  var /*@ type=double* */ ddTimes = d /*@target=double.**/ * d;
  var /*@ type=double* */ ddMod = d /*@target=double.%*/ % d;

  // (double, int) -> double
  var /*@ type=double* */ diPlus = d /*@target=double.+*/ + i;
  var /*@ type=double* */ diMinus = d /*@target=double.-*/ - i;
  var /*@ type=double* */ diTimes = d /*@target=double.**/ * i;
  var /*@ type=double* */ diMod = d /*@target=double.%*/ % i;

  // (double, num) -> double
  var /*@ type=double* */ dnPlus = d /*@target=double.+*/ + n;
  var /*@ type=double* */ dnMinus = d /*@target=double.-*/ - n;
  var /*@ type=double* */ dnTimes = d /*@target=double.**/ * n;
  var /*@ type=double* */ dnMod = d /*@target=double.%*/ % n;

  // (int, double) -> double
  var /*@ type=double* */ idPlus = i /*@target=num.+*/ + d;
  var /*@ type=double* */ idMinus = i /*@target=num.-*/ - d;
  var /*@ type=double* */ idTimes = i /*@target=num.**/ * d;
  var /*@ type=double* */ idMod = i /*@target=num.%*/ % d;

  // (int, int) -> int
  var /*@ type=int* */ iiPlus = i /*@target=num.+*/ + i;
  var /*@ type=int* */ iiMinus = i /*@target=num.-*/ - i;
  var /*@ type=int* */ iiTimes = i /*@target=num.**/ * i;
  var /*@ type=int* */ iiMod = i /*@target=num.%*/ % i;

  // (int, num) -> num
  var /*@ type=num* */ inPlus = i /*@target=num.+*/ + n;
  var /*@ type=num* */ inMinus = i /*@target=num.-*/ - n;
  var /*@ type=num* */ inTimes = i /*@target=num.**/ * n;
  var /*@ type=num* */ inMod = i /*@target=num.%*/ % n;

  // (num, double) -> num
  var /*@ type=num* */ ndPlus = n /*@target=num.+*/ + d;
  var /*@ type=num* */ ndMinus = n /*@target=num.-*/ - d;
  var /*@ type=num* */ ndTimes = n /*@target=num.**/ * d;
  var /*@ type=num* */ ndMod = n /*@target=num.%*/ % d;

  // (num, int) -> num
  var /*@ type=num* */ niPlus = n /*@target=num.+*/ + i;
  var /*@ type=num* */ niMinus = n /*@target=num.-*/ - i;
  var /*@ type=num* */ niTimes = n /*@target=num.**/ * i;
  var /*@ type=num* */ niMod = n /*@target=num.%*/ % i;

  // (num, num) -> num
  var /*@ type=num* */ nnPlus = n /*@target=num.+*/ + n;
  var /*@ type=num* */ nnMinus = n /*@target=num.-*/ - n;
  var /*@ type=num* */ nnTimes = n /*@target=num.**/ * n;
  var /*@ type=num* */ nnMod = n /*@target=num.%*/ % n;
}
