OLD | NEW |
| (Empty) |
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | |
2 // for details. All rights reserved. Use of this source code is governed by a | |
3 // BSD-style license that can be found in the LICENSE file. | |
4 // Dart test using an identity hash. | |
5 | |
6 interface BigGame extends Hashable { | |
7 final String name; | |
8 } | |
9 | |
10 class Giraffe implements BigGame { | |
11 final String name; | |
12 final int identityHash_; | |
13 | |
14 Giraffe(this.name) : identityHash_ = nextId() {} | |
15 | |
16 int hashCode() { | |
17 return identityHash_; | |
18 } | |
19 | |
20 // Calculate identity hash for a giraffe. | |
21 static int nextId_; | |
22 static int nextId() { | |
23 if (nextId_ == null) { | |
24 nextId_ = 17; | |
25 } | |
26 return nextId_++; | |
27 } | |
28 } | |
29 | |
30 class Zebra implements BigGame { | |
31 final String name; | |
32 Zebra(this.name) {} | |
33 } | |
34 | |
35 | |
36 class SavannahTest { | |
37 | |
38 static void testMain() { | |
39 Map<BigGame, String> savannah = new Map<BigGame, String>(); | |
40 Giraffe giraffe1 = new Giraffe("Tony"); | |
41 Giraffe giraffe2 = new Giraffe("Rose"); | |
42 savannah[giraffe1] = giraffe1.name; | |
43 savannah[giraffe2] = giraffe2.name; | |
44 | |
45 var count = savannah.length; | |
46 print("getCount is $count"); | |
47 Expect.equals(2, count); | |
48 print("giraffe1: " + savannah[giraffe1]); | |
49 print("giraffe2: " + savannah[giraffe2]); | |
50 Expect.equals("Tony", savannah[giraffe1]); | |
51 Expect.equals("Rose", savannah[giraffe2]); | |
52 | |
53 bool caught = false; | |
54 Zebra zebra1 = new Zebra("Paul"); | |
55 Zebra zebra2 = new Zebra("Joe"); | |
56 try { | |
57 savannah[zebra1] = zebra1.name; | |
58 savannah[zebra2] = zebra2.name; | |
59 } catch (NoSuchMethodException e) { | |
60 print("Caught: $e"); | |
61 caught = true; | |
62 } | |
63 Expect.equals(true, caught); | |
64 | |
65 count = savannah.length; | |
66 print("getCount is $count"); | |
67 Expect.equals(2, count); | |
68 | |
69 caught = false; | |
70 try { | |
71 print("zebra1: " + savannah[zebra1]); | |
72 print("zebra2: " + savannah[zebra2]); | |
73 } catch (NoSuchMethodException e) { | |
74 print("Caught: $e"); | |
75 caught = true; | |
76 } | |
77 Expect.equals(true, caught); | |
78 } | |
79 | |
80 } | |
81 | |
82 main() { | |
83 SavannahTest.testMain(); | |
84 } | |
OLD | NEW |