// 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.

// @dart = 2.9

/// @assertion From the Unified collection Spec:
/// A spreadElement starting with [...] is a constant element if its expression
/// is constant and it evaluates to a constant List, Set or Map instance
/// originally created by a list, set or map literal. It is a potentially
/// constant element if the expression is a potentially constant expression.
/// @description: Checks some disambiguilty cases for sets and maps.
/// @author iarkh@unipro.ru


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

const l1 = [];
const s1 = {11};
const m1 = {1: 1};
const int i1 = 25;
const n = null;

Set emptyset = {};

main() {
  const res1 = {...l1};
  Expect.setEquals(emptyset, res1);

  const res2 = {1, ...l1, 2};
  Expect.setEquals({1, 2}, res2);

  const res3 = {...s1};
  Expect.setEquals({11}, res3);

  const res4 = {1, ...s1, 2};
  Expect.setEquals({1, 11, 2}, res4);

  const res5 = {...m1};
  Expect.mapEquals(m1, res5);

  const res6 = {7: 1, ...m1, 3: 14};
  Expect.mapEquals({7: 1, 1: 1, 3: 14}, res6);
}
