|  | // Copyright (c) 2015, 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. | 
|  |  | 
|  | // This program has many similar constants that should all have distinct | 
|  | // identities. They are sufficiently similar to have name collisions and need | 
|  | // ordering by constant value. | 
|  |  | 
|  | import "package:expect/expect.dart"; | 
|  |  | 
|  | enum E { A, B, C, D } | 
|  |  | 
|  | class Z { | 
|  | final a, b, c, d, e, f; | 
|  | const Z({ | 
|  | this.a = 1, | 
|  | this.b = 1, | 
|  | this.c = 1, | 
|  | this.d = 1, | 
|  | this.e = 1, | 
|  | this.f = 1, | 
|  | }); | 
|  | } | 
|  |  | 
|  | const c1 = const {}; | 
|  | const c2 = const <int, int>{}; | 
|  | const c3 = const <dynamic, int>{}; | 
|  | const c4 = const <int, dynamic>{}; | 
|  | const l1 = const []; | 
|  | const l2 = const <int>[]; | 
|  | const l3 = const <String>[]; | 
|  | const l4 = const <num>[]; | 
|  |  | 
|  | const ll1 = const [1, 2, 3, 4, 5, 6, 7]; | 
|  | const ll2 = const [1, 8, 3, 4, 5, 6, 7]; | 
|  | const ll3 = const [1, 2, 8, 4, 5, 6, 7]; | 
|  | const ll4 = const [1, 2, 3, 4, 8, 6, 7]; | 
|  |  | 
|  | const m1 = const <dynamic, dynamic>{1: 1, 2: 2}; | 
|  | const m2 = const <dynamic, dynamic>{1: 2, 2: 1}; | 
|  | const m3 = const <dynamic, dynamic>{1: 1, 2: 1}; | 
|  | const m4 = const <dynamic, dynamic>{1: 2, 2: 2}; | 
|  | const m5 = const <dynamic, dynamic>{2: 1, 1: 2}; | 
|  | const m6 = const <dynamic, dynamic>{2: 2, 1: 1}; | 
|  | const m7 = const <dynamic, dynamic>{2: 1, 1: 1}; | 
|  | const m8 = const <dynamic, dynamic>{2: 2, 1: 2}; | 
|  | const m9 = const <int, int>{1: 1, 2: 2}; | 
|  | const mA = const <int, int>{1: 2, 2: 1}; | 
|  | const mB = const <int, int>{1: 1, 2: 1}; | 
|  | const mC = const <int, int>{1: 2, 2: 2}; | 
|  |  | 
|  | const mE1 = const {E.A: E.B}; | 
|  | const mE2 = const {E.A: E.C}; | 
|  | const mE3 = const {E.A: 0, E.B: 0}; | 
|  | const mE4 = const {E.A: 0, E.C: 0}; | 
|  | const mE5 = const {E.A: 0, E.B: 0, E.C: 4}; | 
|  | const mE6 = const {E.A: 0, E.B: 0, E.C: 2}; | 
|  | const mE7 = const {E.A: 0, E.B: 0, E.C: 3}; | 
|  | const mE8 = const {E.A: 0, E.B: 0, E.C: 1}; | 
|  |  | 
|  | const z1 = const Z(f: 3); | 
|  | const z2 = const Z(f: 2); | 
|  | const z3 = const Z(f: 1); | 
|  | const z4 = const Z(e: 2); | 
|  | const z5 = const Z(d: 3); | 
|  | const z6 = const Z(d: 2); | 
|  |  | 
|  | makeAll() => { | 
|  | 'E.A': E.A, | 
|  | 'E.B': E.B, | 
|  | 'E.C': E.C, | 
|  | 'E.D': E.D, | 
|  | 'c1': c1, | 
|  | 'c2': c2, | 
|  | 'c3': c3, | 
|  | 'c4': c4, | 
|  | 'l1': l1, | 
|  | 'l2': l2, | 
|  | 'l3': l3, | 
|  | 'l4': l4, | 
|  | 'll1': ll1, | 
|  | 'll2': ll2, | 
|  | 'll3': ll3, | 
|  | 'l4': ll4, | 
|  | 'm1': m1, | 
|  | 'm2': m2, | 
|  | 'm3': m3, | 
|  | 'm4': m4, | 
|  | 'm5': m5, | 
|  | 'm6': m6, | 
|  | 'm7': m7, | 
|  | 'm8': m8, | 
|  | 'm9': m9, | 
|  | 'mA': mA, | 
|  | 'mB': mB, | 
|  | 'mC': mC, | 
|  | 'mE1': mE1, | 
|  | 'mE2': mE2, | 
|  | 'mE3': mE3, | 
|  | 'mE4': mE4, | 
|  | 'mE5': mE5, | 
|  | 'mE6': mE6, | 
|  | 'mE7': mE7, | 
|  | 'mE8': mE8, | 
|  | 'z1': z1, | 
|  | 'z2': z2, | 
|  | 'z3': z3, | 
|  | 'z4': z4, | 
|  | 'z5': z5, | 
|  | 'z6': z6, | 
|  | }; | 
|  |  | 
|  | main() { | 
|  | var all1 = makeAll(); | 
|  | var all2 = makeAll(); | 
|  |  | 
|  | for (var name1 in all1.keys) { | 
|  | var e1 = all1[name1]; | 
|  | for (var name2 in all2.keys) { | 
|  | if (name1 == name2) continue; | 
|  | var e2 = all2[name2]; | 
|  | Expect.isFalse( | 
|  | identical(e1, e2), | 
|  | 'Different instances  $name1: $e1  $name2: $e2', | 
|  | ); | 
|  | } | 
|  | } | 
|  | } |