/*
 * 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.
 */
/**
 * A set literal <E>{elem_1 ... elem_n} is evaluated as follows:
 *   1. Create a fresh instance of set of a class that implements
 *      [LinkedHashSet<E>].
 *   ...
 *   3. The result of the literal expression is [set].
 *   @description Checks that result set is correct if two spread elements
 *   contain duplicated values
 * @author iarkh@unipro.ru
 */
// SharedOptions=--enable-experiment=constant-update-2018

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

main() {
  List aList = [];
  Map aMap = {};
  List list1 = [1, 2, 3, 4, 5];
  List list2 = [3, 2, "checkme", 1];
  List longlist = [1, 2, 3, 4, 5, 6, 7, 144, 148, -1, 14, 143, 55, 11, "string",
    null, aList, aMap, "1", 101, "10", 110, "a", "b", "c", "d", "e", "f", "g",
    "h", 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009];

  Expect.setEquals({1, 2, 3, 4, 5, "checkme"}, {...list1, ...list2});
  Expect.setEquals({3, 2, "checkme", 1, 4, 5}, {...list2, ...list1});
  Expect.setEquals(
    {10000, 1, 2, 3, 4, 5, 11000, 6, 7, 144, 148, -1, 14, 143, 55, 11,
      "string", null, aList, aMap, "1", 101, "10", 110, "a", "b", "c", "d", "e",
      "f", "g", "h", 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009,
      12000},
    {10000, ...list1, 11000, ...longlist, 12000});
  Expect.setEquals(
    {-1, -2, "a", "d", 1, 2, 3, 4, 5, 6, 7, 144, 148, 14, 143, 55, 11,
      "string", null, aList, aMap, "1", 101, "10", 110, "b", "c", "e", "f", "g",
      "h", 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, -3, -4,
      "checkme", -5, -6, -7},
    {-1, -2, "a", "d", ...longlist, -3, 1007, -4, ...list2, -5, -6, -7});
}
