// 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 The grammar changes for map and set are a little more complex
/// because of the potential ambiguity of collections containing only spreads.
/// The changed and new rules are:
///
///    setOrMapLiteral:
///    mapLiteral |
///    setLiteral |
///    mapOrSetLiteral
///    ;
///
///    mapLiteral:
///    const? typeArguments? '{' mapLiteralEntryList? '}'
///    ;
///
///    mapLiteralEntryList:
///    mapLiteralEntry ( ',' mapLiteralEntry )* ','?
///    ;
///
///    mapLiteralEntry:
///    expression ':' expression |
///    spread
///    ;
///
///    setLiteral:
///    'const'? typeArguments? '{' spreadableList '}' ;
///
///    mapOrSetLiteral:
///    'const'?  '{' spread (',' spread)* '}' ;
///
/// @description Checks that spreadable set can have type arguments.
/// @author iarkh@unipro.ru


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

main() {
  List list1 = [1, 2, 3];
  Expect.setEquals({1, 2, 3}, <int>{...list1});
  Expect.setEquals({1, 2, 3, 12}, <int>{...list1, 12});
  Expect.setEquals({12, 1, 2, 3}, <int>{12, ...list1});
}
