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

// @dart = 2.9

/// @assertion The predeﬁned Dart function identical() is deﬁned such that
/// identical(c1, c2) iff:
///  • c1 and c2 are constant maps that are deﬁned to be identical in the
///    speciﬁcation of literal map expressions.
/// @description Checks that constatnt maps are identical() if they have both
/// identical types and content.
/// @author kaigorodov

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

const nums1 = const <num, String>{1:"1", 2:"2", 3:"3"};
const nums2 = const <num, String>{1:"1", 2:"2", 3:"3"};
const ints1 = const <int, String>{1:"1", 2:"2", 3:"3"};
const ints2 = const <int, String>{1:"1", 2:"2", 3:"3"};

// Expression/Maps: map literal with double key is illegal, since
// it's not an int nor String and implements ==
//const doubles1=const <double,String>{1.0:"1", 2.0:"2", 3.0:"3"};
//const doubles2=const <double,String>{1.0:"1", 2.0:"2", 3.0:"3"};

main() {
  Expect.isTrue(identical(nums1, nums2));
  Expect.isTrue(identical(ints1, ints2));
  //Expect.isTrue(identical(doubles1, doubles2));

  Expect.isFalse(identical(nums1, ints1));
  //Expect.isFalse(identical(nums1, doubles1));
  //Expect.isFalse(identical(ints1, doubles1));
}
