/*
 * Copyright (c) 2011, 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 Let map1 = const< K, V > {k11 : e11 . . . k1n : e1n } and map2 =
 * const< J, U > {k21 : e21 . . . k2n : e2n } be two constant map literals. Let
 * the keys of map1 and map2 evaluate to s11 . . . s1n and s21 . . . s2n respectively,
 * and let the elements of map1 and map2 evaluate to o11 . . . o1n and o21 . . . o2n
 * respectively. Iff identical(o1i , o2i ) and identical(s1i , s2i ) for i ∈ 1..n, and V = U
 * then identical(map1 , map2 ).
 * @description Checks that constant map literals with identical entries
 * and type arguments are identical.
 * @author msyabro
 * @reviewer kaigorodov
 */
import "../../Utils/expect.dart";

main() {
  Expect.isTrue(identical(const {}, const {}));

  Expect.isTrue(identical(const {"key 1": 1, "key 2": 2}, const {"key 1": 1, "key 2": 2}));
  Expect.isTrue(identical(const {"": true}, const {"": true}));
  Expect.isTrue(identical(const {"key": "value", "value": "key"}, const {"key": "value", "value": "key"}));
  Expect.isTrue(identical(const <String, int>{"1": 1}, const <String, int>{"1": 1}));

  var m1 = const {"k1": 1, "k2": true, "k3": ""};
  var m2 = const {"k1": 1, "k2": true, "k3": ""};
  Expect.isTrue(identical(m1, m2));
}
