/*
 * 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.
 */
/**
 * @assertion Note that you can spread any [Iterable] into a set literal, not
 * just other sets
 * @description Checks that list and custom [Iterable] cannot be assigned to
 * set, but can be spreaded into a set literal.
 * @author iarkh@unipro.ru
 */
// SharedOptions=--enable-experiment=constant-update-2018

import "dart:collection";

class MyIterable extends IterableBase {

  MyIterable();

  Iterator get iterator => MyIterator();
}

class MyIterator extends Iterator {
  int i = -1;

  MyIterator() {}

  @override
  bool moveNext() { return ++i < 10; }

  @override
  dynamic get current { return i; }
}

main() {
  Set set = {1, 2, 3};
  List list = [null, 14, "testme"];
  Iterable i = new MyIterable();

  Set set1 = {...set};
  Set set2 = {...list};
  Set set3 = {...i};

  Set set4 = {...?set};
  Set set5 = {...?list};
  Set set6 = {...?i};
}
