/*
 * 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.
 */
/**
 * @assertion The static type of s is Set<T>.
 *
 * @description Checks that the static type of s is Set<T>.
 * @author sgrekhov@unipro.ru
 */
import "dart:collection";

class C {}

main() {
  LinkedHashSet<int> test1() => <int>{};
  //                            ^^^^^^^
  // [analyzer] COMPILE_TIME_ERROR.RETURN_OF_INVALID_TYPE
  //                                 ^
  // [cfe] A value of type 'Set<int>' can't be returned from a function with return type 'LinkedHashSet<int>'.
  LinkedHashSet<int> test2() => const <int>{};
  //                            ^^^^^^^^^^^^^
  // [analyzer] COMPILE_TIME_ERROR.RETURN_OF_INVALID_TYPE
  // [cfe] A value of type 'Set<int>' can't be returned from a function with return type 'LinkedHashSet<int>'.
  LinkedHashSet<int> test3() => <int>{1, 2};
  //                            ^^^^^^^^^^^
  // [analyzer] COMPILE_TIME_ERROR.RETURN_OF_INVALID_TYPE
  //                                 ^
  // [cfe] A value of type 'Set<int>' can't be returned from a function with return type 'LinkedHashSet<int>'.
  LinkedHashSet<int> test4() => {1, 2};
  //                            ^^^^^^
  // [analyzer] COMPILE_TIME_ERROR.RETURN_OF_INVALID_TYPE
  // [cfe] A value of type 'Set<int>' can't be returned from a function with return type 'LinkedHashSet<int>'.
  LinkedHashSet<int> test5() => const <int>{1, 2};
  //                            ^^^^^^^^^^^^^^^^^
  // [analyzer] COMPILE_TIME_ERROR.RETURN_OF_INVALID_TYPE
  // [cfe] A value of type 'Set<int>' can't be returned from a function with return type 'LinkedHashSet<int>'.

  LinkedHashSet test6()  => <int>{};
  //                        ^^^^^^^
  // [analyzer] COMPILE_TIME_ERROR.RETURN_OF_INVALID_TYPE
  //                             ^
  // [cfe] A value of type 'Set<int>' can't be returned from a function with return type 'LinkedHashSet<dynamic>'.
  LinkedHashSet test7()  => const <int>{};
  //                        ^^^^^^^^^^^^^
  // [analyzer] COMPILE_TIME_ERROR.RETURN_OF_INVALID_TYPE
  // [cfe] A value of type 'Set<int>' can't be returned from a function with return type 'LinkedHashSet<dynamic>'.
  LinkedHashSet test8()  => <int>{1, 2};
  //                        ^^^^^^^^^^^
  // [analyzer] COMPILE_TIME_ERROR.RETURN_OF_INVALID_TYPE
  //                             ^
  // [cfe] A value of type 'Set<int>' can't be returned from a function with return type 'LinkedHashSet<dynamic>'.
  LinkedHashSet test9()  => {1, 2};
  //                        ^^^^^^
  // [analyzer] COMPILE_TIME_ERROR.RETURN_OF_INVALID_TYPE
  // [cfe] A value of type 'Set<int>' can't be returned from a function with return type 'LinkedHashSet<dynamic>'.
  LinkedHashSet test10() => const <int>{1, 2};
  //                        ^^^^^^^^^^^^^^^^^
  // [analyzer] COMPILE_TIME_ERROR.RETURN_OF_INVALID_TYPE
  // [cfe] A value of type 'Set<int>' can't be returned from a function with return type 'LinkedHashSet<dynamic>'.

  LinkedHashSet<C> test11() => <C>{};
  //                           ^^^^^
  // [analyzer] COMPILE_TIME_ERROR.RETURN_OF_INVALID_TYPE
  //                              ^
  // [cfe] A value of type 'Set<C>' can't be returned from a function with return type 'LinkedHashSet<C>'.
  LinkedHashSet<C> test12() => const <C>{};
  //                           ^^^^^^^^^^^
  // [analyzer] COMPILE_TIME_ERROR.RETURN_OF_INVALID_TYPE
  // [cfe] A value of type 'Set<C>' can't be returned from a function with return type 'LinkedHashSet<C>'.
  LinkedHashSet<C> test13() => <C>{new C()}
// [error line 72, column 0]
// [analyzer] unspecified
// [cfe] unspecified
  LinkedHashSet<int> test14() => {new C()};
  //                             ^^^^^^^^^
  // [analyzer] COMPILE_TIME_ERROR.RETURN_OF_INVALID_TYPE
  // [cfe] A value of type 'Set<C>' can't be returned from a function with return type 'LinkedHashSet<int>'.

  LinkedHashSet test15() => <C>{};
  //                        ^^^^^
  // [analyzer] COMPILE_TIME_ERROR.RETURN_OF_INVALID_TYPE
  //                           ^
  // [cfe] A value of type 'Set<C>' can't be returned from a function with return type 'LinkedHashSet<dynamic>'.
  LinkedHashSet test16() => const <C>{};
  //                        ^^^^^^^^^^^
  // [analyzer] COMPILE_TIME_ERROR.RETURN_OF_INVALID_TYPE
  // [cfe] A value of type 'Set<C>' can't be returned from a function with return type 'LinkedHashSet<dynamic>'.
  LinkedHashSet test17() => <C>{new C()};
  //                        ^^^^^^^^^^^^
  // [analyzer] COMPILE_TIME_ERROR.RETURN_OF_INVALID_TYPE
  //                           ^
  // [cfe] A value of type 'Set<C>' can't be returned from a function with return type 'LinkedHashSet<dynamic>'.
  LinkedHashSet test18() => {new C()};
  //                        ^^^^^^^^^
  // [analyzer] COMPILE_TIME_ERROR.RETURN_OF_INVALID_TYPE
  // [cfe] A value of type 'Set<C>' can't be returned from a function with return type 'LinkedHashSet<dynamic>'.
}
