/*
 * 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.
 */
/**
 * @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
 */
// SharedOptions=--enable-experiment=constant-update-2018

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);
}
