// Copyright (c) 2019, 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.

// @dart = 2.9

/// @assertion To infer the type of element:
/// ...
/// If element is a spreadElement with expression e1:
/// ...
/// If P is Set<Ps> then let S be the inferred type of e1 in context Iterable<Ps>:
/// ...
/// If S is a non-Null subtype of Iterable<Object>, then the inferred set element
/// type of element is T where T is the type such that Iterable<T> is a
/// superinterface of S (the result of constraint matching for X using the
/// constraint S <: Iterable<X>).
///
/// @description Checks that if S is a non-Null subtype of Iterable<Object>, then
/// the inferred set element type of element is T where T is the type such that
/// Iterable<T> is a superinterface of S
/// @author sgrekhov@unipro.ru

import "../../Utils/expect.dart";

main() {
  var s1 = [1, 2, 3, 4];
  var x1 = {...s1};
  Expect.isTrue(x1 is Set<int>);

  var s2 = [1.0, 2.0, 3, 4];
  var x2 = {...s2};
  Expect.isTrue(x2 is Set<num>);
  Expect.isFalse(x2 is Set<int>);
  Expect.isFalse(x2 is Set<double>);

  var s3 = [1.0, 2, "3", 4];
  var x3 = {...s3};
  Expect.isTrue(x3 is Set<Object>);
  Expect.isFalse(x3 is Set<num>);
  Expect.isFalse(x3 is Set<String>);
}
