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

// SharedOptions=--enable-experiment=set-literals

import "dart:collection" show HashSet, LinkedHashSet;

import "package:expect/expect.dart";

const Object d = 3.5;

void main() {
   var o //
      = <int>{1: 1} //# 01: compile-time error
      = <int, int, int>{} //# 02: compile-time error
      = <int, int, int>{1} //# 03: compile-time error
      = <int, int>{1} //# 04: compile-time error
      = const <int, int, int>{} //# 05: compile-time error
      = const <int, int, int>{1} //# 06: compile-time error
      = const <int, int>{1} //# 07: compile-time error
      = const {Duration(seconds: 0)} // Overrides ==. //# 08: compile-time error
      = const {4.2} // Overrides ==. //# 09: compile-time error
      = const {d} // Overrides ==. //# 10: compile-time error
      = {,} //# 11: compile-time error
      = {1,,} //# 12: compile-time error
      = {1,,1} //# 13: compile-time error
      ;
  Expect.isNull(o); // Should be unreachable with a value.

  Set<int> s //
      = {"not int"} //# 14: compile-time error
      = {4.2} //# 15: compile-time error
      = {1: 1} //# 16: compile-time error
      = {{}} //# 17: compile-time error
      ;
  Expect.isNull(s);

  Set<Set<Object>> ss //
      = {{1: 1}} //# 19: compile-time error
      = {<int, int>{}} //# 20: compile-time error
      = {<int>{1: 1}} //# 21: compile-time error
      = const {ss} //# 22: compile-time error
      ;
  Expect.isNull(ss);

  HashSet<int> hs //
      = {} // Exact type is LinkedHashSet //# 23: compile-time error
      ;
  Expect.isNull(hs);

  <T>(x) {
    // Type constants are allowed, type variables are not.
    var o //
        = const {T} //# 26: compile-time error
        = const {x} //# 27: compile-time error
        ;
    Expect.isNull(o);
  }<int>(42);

  <T extends Set<num>>() {
    // Regression test for http://dartbug.com/35300.
    // The `Set<Null>` type is not assignable to `T extends Set<num>`,
    // so we don't make this a set. You can't assign a map to `T`.
    T o //
    = {}; //# 28: compile-time error
    ;
  }();

  // Constant sets must not contain equal elements.
  const s = {
    1,
    "s",
    #foo,
    int,
    C(1),
    {1},
    1, //# 29: compile-time error
    "s", //# 30: compile-time error
    #foo, //# 31: compile-time error
    int, //# 32: compile-time error
    C(1), //# 33: compile-time error
    {1}, //# 34: compile-time error
  };
}

class C {
  final Object id;
  const C(this.id);
}
