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

import 'dart:math' show Random;

test2() {
  List<num> o;
  var /*@ type=Iterable<num*>* */ y =
      o. /*@ typeArgs=num* */ /*@target=Iterable.map*/ map(
          /*@ returnType=num* */ (/*@ type=num* */ x) {
    if (new Random(). /*@target=dart.math::Random.nextBool*/ nextBool()) {
      return x. /*@target=num.toInt*/ toInt() /*@target=num.+*/ + 1;
    } else {
      return x. /*@target=num.toDouble*/ toDouble();
    }
  });
  Iterable<num> w = y;
  Iterable<int> z = /*info:ASSIGNMENT_CAST*/ y;
}

main() {}
