// Copyright (c) 2013, 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. import "package:expect/expect.dart"; class Override { int hash = -1; int get superHash => super.hashCode; int get hashCode => hash; int foo() => hash; // Just some function that can be closurized. bool operator ==(Object other) => other is Override && other.hash == hash; } int bar() => 42; // Some global function. main() { var o = new Object(); var hash = o.hashCode; // Doesn't change. Expect.equals(hash, o.hashCode); Expect.equals(hash, identityHashCode(o)); var c = new Override(); int identityHash = c.superHash; hash = (identityHash == 42) ? 37 : 42; c.hash = hash; Expect.equals(hash, c.hashCode); Expect.equals(identityHash, identityHashCode(c)); // These classes don't override hashCode. var samples = [0, 0x10000000, 1.5, -0, null, true, false, const Object()]; for (var v in samples) { print(v); Expect.equals(v.hashCode, identityHashCode(v)); } // These do, or might do, but we can still use hashCodeOf and get the same // result each time. samples = ["string", "", (x) => 42, c.foo, bar]; for (var v in samples) { print(v); Expect.equals(v.hashCode, v.hashCode); Expect.equals(identityHashCode(v), identityHashCode(v)); } }