blob: 365bb0fffb959e76f008de2341af0a5f6be6c49d [file] [log] [blame]
// 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));
}
}