// 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  It is a compile-time error if any two of the values are equal
/// according to ==.
///
/// @description Checks that it is a compile-time error if any two of the values
/// are equal according to ==.
/// @author sgrekhov@unipro.ru

main() {
  var v1 = const {1, 2 + 1, 3 - 1, 1};
  //       ^
  // [cfe] Constant evaluation error:
  //                               ^
  // [analyzer] COMPILE_TIME_ERROR.EQUAL_ELEMENTS_IN_CONST_SET
  const v2 = {1, 2 + 1, 3 - 1, 1, };
  //         ^
  // [cfe] Constant evaluation error:
  //                           ^
  // [analyzer] COMPILE_TIME_ERROR.EQUAL_ELEMENTS_IN_CONST_SET
  var v3 = const <int>{1 + 1, 2 + 1, 3 - 1, 1, };
  //       ^
  // [cfe] Constant evaluation error:
  //                                 ^^^^^
  // [analyzer] COMPILE_TIME_ERROR.EQUAL_ELEMENTS_IN_CONST_SET

  const v4 = {null, null};
  //         ^
  // [cfe] Constant evaluation error:
  //                ^^^^
  // [analyzer] COMPILE_TIME_ERROR.EQUAL_ELEMENTS_IN_CONST_SET
  var v5 = const {null, null};
  //       ^
  // [cfe] Constant evaluation error:
  //                    ^^^^
  // [analyzer] COMPILE_TIME_ERROR.EQUAL_ELEMENTS_IN_CONST_SET
  var v6 = const <int?>{null, null};
  //       ^
  // [cfe] Constant evaluation error:
  //                          ^^^^
  // [analyzer] COMPILE_TIME_ERROR.EQUAL_ELEMENTS_IN_CONST_SET

  const v7 = {'1', '2' + '1', "3 - 1", "1",};
  //         ^
  // [cfe] Constant evaluation error:
  //                                   ^^^
  // [analyzer] COMPILE_TIME_ERROR.EQUAL_ELEMENTS_IN_CONST_SET
  const v8 = {'1', '2' + '1', "3 - 1", true, 1 == 1};
  //         ^
  // [cfe] Constant evaluation error:
  //                                         ^^^^^^
  // [analyzer] COMPILE_TIME_ERROR.EQUAL_ELEMENTS_IN_CONST_SET
  var v9 = const {'1', '2' + '1', "3 - 1", true, 1 == 1};
  //       ^
  // [cfe] Constant evaluation error:
  //                                             ^^^^^^
  // [analyzer] COMPILE_TIME_ERROR.EQUAL_ELEMENTS_IN_CONST_SET
}
