mirror of
https://github.com/dart-lang/sdk
synced 2024-10-14 10:18:13 +00:00
b101a7d002
Change-Id: Ib33169c3e0ffc870915c189404074a1dea472546 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/196548 Reviewed-by: Bob Nystrom <rnystrom@google.com> Commit-Queue: Leaf Petersen <leafp@google.com>
50 lines
1.4 KiB
Dart
50 lines
1.4 KiB
Dart
// 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.
|
|
|
|
// @dart = 2.9
|
|
|
|
import "package:expect/expect.dart";
|
|
|
|
class Override {
|
|
int hash;
|
|
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));
|
|
}
|
|
}
|