// 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 new Expando([String name])
/// Creates a new Expando. The optional name is only used for debugging purposes
/// and creating two different Expandos with the same name yields two Expandos
/// that work on different properties of the objects they are used on.
/// @description Checks two Expandos constructed with identical arguments are
/// still different objects.
/// @author rodionov

import "../../../Utils/expect.dart";

main() {
  Expect.isFalse(identical(new Expando(), new Expando()));
}
