| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2012, 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 | |
| 5 import "package:expect/expect.dart"; | |
| 6 | |
| 7 // Test that 'identical(a,b)' is a compile-time constant. | |
| 8 | |
| 9 class C { | |
| 10 final x; | |
| 11 const C(this.x); | |
| 12 static f3() {} | |
| 13 static f4() {} | |
| 14 } | |
| 15 | |
| 16 const i1 = 1; | |
| 17 const i2 = 2; | |
| 18 const d1 = 1.5; | |
| 19 const d2 = 2.5; | |
| 20 const b1 = true; | |
| 21 const b2 = false; | |
| 22 const s1 = "1"; | |
| 23 const s2 = "2"; | |
| 24 const l1 = const [1, 2]; | |
| 25 const l2 = const [2, 3]; | |
| 26 const m1 = const {"x": 1}; | |
| 27 const m2 = const {"x": 2}; | |
| 28 const c1 = const C(1); | |
| 29 const c2 = const C(2); | |
| 30 f1() {} | |
| 31 f2() {} | |
| 32 const id = identical; | |
| 33 | |
| 34 class CT { | |
| 35 final x1; | |
| 36 final x2; | |
| 37 final bool id; | |
| 38 const CT(var x1, var x2) | |
| 39 : this.x1 = x1, | |
| 40 this.x2 = x2, | |
| 41 this.id = identical(x1, x2); | |
| 42 void test(void expect(a, b), name) { | |
| 43 expect(id, "$name: identical($x1,$x2)"); | |
| 44 } | |
| 45 } | |
| 46 | |
| 47 const trueTests = const [ | |
| 48 const CT(2 - 1, i1), | |
| 49 const CT(1 + 1, i2), | |
| 50 const CT(2.5 - 1.0, d1), | |
| 51 const CT(1.5 + 1.0, d2), | |
| 52 const CT(false || true, b1), | |
| 53 const CT(true && false, b2), | |
| 54 const CT('$i1', s1), | |
| 55 const CT('$i2', s2), | |
| 56 const CT(const [i1, 2], l1), | |
| 57 const CT(const [i2, 3], l2), | |
| 58 const CT(const {"x": i1}, m1), | |
| 59 const CT(const {"x": i2}, m2), | |
| 60 const CT(const C(i1), c1), | |
| 61 const CT(const C(i2), c2), | |
| 62 const CT(f1, f1), | |
| 63 const CT(f2, f2), | |
| 64 const CT(C.f3, C.f3), | |
| 65 const CT(C.f4, C.f4), | |
| 66 const CT(id, identical), | |
| 67 ]; | |
| 68 | |
| 69 const falseTests = const [ | |
| 70 const CT(i1, i2), | |
| 71 const CT(d1, d2), | |
| 72 const CT(b1, b2), | |
| 73 const CT(s1, s2), | |
| 74 const CT(l1, l2), | |
| 75 const CT(m1, m2), | |
| 76 const CT(c1, c2), | |
| 77 const CT(f1, f2), | |
| 78 const CT(i1, d1), | |
| 79 const CT(d1, b1), | |
| 80 const CT(b1, s1), | |
| 81 const CT(s1, l1), | |
| 82 const CT(l1, m1), | |
| 83 const CT(m1, c1), | |
| 84 const CT(c1, f1), | |
| 85 const CT(f1, C.f3), | |
| 86 const CT(C.f3, identical), | |
| 87 const CT(identical, i1), | |
| 88 ]; | |
| 89 | |
| 90 // Not a constant if it's not written 'identical'. | |
| 91 const idtest = id(i1, i2); // //# 01: compile-time error | |
| 92 | |
| 93 // Not a constant if aliased? (Current interpretation, waiting for | |
| 94 // confirmation). | |
| 95 class T { // //# 02: compile-time error | |
| 96 static const identical = id; // //# 02: continued | |
| 97 static const idtest2 = identical(i1, i2); // //# 02: continued | |
| 98 } // //# 02: continued | |
| 99 | |
| 100 main() { | |
| 101 for (int i = 0; i < trueTests.length; i++) { | |
| 102 trueTests[i].test(Expect.isTrue, "true[$i]"); | |
| 103 } | |
| 104 for (int i = 0; i < falseTests.length; i++) { | |
| 105 falseTests[i].test(Expect.isFalse, "false[$i]"); | |
| 106 } | |
| 107 | |
| 108 var x = idtest; // //# 01: continued | |
| 109 var x = T.idtest2; // //# 02: continued | |
| 110 } | |
| OLD | NEW |