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

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