blob: 3200d2f42fa0dc5d7e32b01a365e18c285b8d6a0 [file] [log] [blame]
// 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.
// Dart test using an identity hash.
// @dart = 2.9
import "package:expect/expect.dart";
abstract class BigGame {
String get name;
}
// Giraffe overrides hashCode and provides its own identity hash.
class Giraffe implements BigGame {
final String name;
final int identityHash_;
Giraffe(this.name) : identityHash_ = nextId() {}
int get hashCode {
return identityHash_;
}
// Calculate identity hash for a giraffe.
static int nextId_;
static int nextId() {
if (nextId_ == null) {
nextId_ = 17;
}
return nextId_++;
}
}
// Zebra relies on the system provided identity hash.
class Zebra implements BigGame {
final String name;
Zebra(this.name) {}
}
class SavannahTest {
static void testMain() {
Map<BigGame, String> savannah = new Map<BigGame, String>();
Giraffe giraffe1 = new Giraffe("Tony");
Giraffe giraffe2 = new Giraffe("Rose");
savannah[giraffe1] = giraffe1.name;
savannah[giraffe2] = giraffe2.name;
print("giraffe1 hash: ${giraffe1.hashCode}");
print("giraffe2 hash: ${giraffe2.hashCode}");
var count = savannah.length;
print("getCount is $count");
Expect.equals(2, count);
print("giraffe1: ${savannah[giraffe1]}");
print("giraffe2: ${savannah[giraffe2]}");
Expect.equals("Tony", savannah[giraffe1]);
Expect.equals("Rose", savannah[giraffe2]);
Zebra zebra1 = new Zebra("Paolo");
Zebra zebra2 = new Zebra("Zeeta");
savannah[zebra1] = zebra1.name;
savannah[zebra2] = zebra2.name;
print("zebra1 hash: ${zebra1.hashCode}");
print("zebra2 hash: ${zebra2.hashCode}");
count = savannah.length;
print("getCount is $count");
Expect.equals(4, count);
print("zebra1: ${savannah[zebra1]}");
print("zebra2: ${savannah[zebra2]}");
Expect.equals("Paolo", savannah[zebra1]);
Expect.equals("Zeeta", savannah[zebra2]);
}
}
main() {
SavannahTest.testMain();
}