/*
 * 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()));
}
