| // Copyright (c) 2018, 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. |
| |
| import "dart:async" show FutureOr; |
| |
| import "package:expect/expect.dart"; |
| |
| // Check that integer literals in a double context are allowed |
| // for various double context. |
| |
| main() { |
| // Variable initializer context. |
| double v1 = 0; |
| Expect.identical(0.0, v1); |
| double v2 = 1; |
| Expect.identical(1.0, v2); |
| double v3 = -0; |
| Expect.identical(-0.0, v3); |
| double v4 = -1; |
| Expect.identical(-1.0, v4); |
| double v5 = 9223372036854775808; // 2^63, not valid signed 64-bit integer. |
| Expect.identical(9223372036854775808.0, v5); |
| double v6 = 18446744073709551616; // 2^64. |
| Expect.identical(18446744073709551616.0, v6); |
| double v7 = 0x02; // Hex literal. |
| Expect.identical(2.0, v7); |
| double v8 = -0x02; // Hex literal. |
| Expect.identical(-2.0, v8); |
| |
| // Const variable initializer context. |
| const double c1 = 0; |
| Expect.identical(0.0, c1); |
| const double c2 = 1; |
| Expect.identical(1.0, c2); |
| const double c3 = -0; |
| Expect.identical(-0.0, c3); |
| const double c4 = -1; |
| Expect.identical(-1.0, c4); |
| const double c5 = 9223372036854775808; |
| Expect.identical(9223372036854775808.0, c5); |
| const double c6 = 18446744073709551616; |
| Expect.identical(18446744073709551616.0, c6); |
| const double c7 = 0x02; // Hex literal. |
| Expect.identical(2.0, c7); |
| const double c8 = -0x02; // Hex literal. |
| Expect.identical(-2.0, c8); |
| |
| // Assignment context, variable. |
| double value; |
| value = 0; |
| Expect.identical(0.0, value); |
| value = 1; |
| Expect.identical(1.0, value); |
| value = -0; |
| Expect.identical(-0.0, value); |
| value = -1; |
| Expect.identical(-1.0, value); |
| value = 9223372036854775808; |
| Expect.identical(9223372036854775808.0, value); |
| value = 18446744073709551616; |
| Expect.identical(18446744073709551616.0, value); |
| value = 0x02; |
| Expect.identical(2.0, value); |
| value = -0x02; |
| Expect.identical(-2.0, value); |
| |
| // Assignment context, setter. |
| setter = 0; |
| Expect.identical(0.0, lastSetValue); |
| setter = 1; |
| Expect.identical(1.0, lastSetValue); |
| setter = -0; |
| Expect.identical(-0.0, lastSetValue); |
| setter = -1; |
| Expect.identical(-1.0, lastSetValue); |
| setter = 9223372036854775808; |
| Expect.identical(9223372036854775808.0, lastSetValue); |
| setter = 18446744073709551616; |
| Expect.identical(18446744073709551616.0, lastSetValue); |
| setter = 0x02; |
| Expect.identical(2.0, lastSetValue); |
| setter = -0x02; |
| Expect.identical(-2.0, lastSetValue); |
| |
| // Argument context. |
| test(0.0, 0); |
| test(1.0, 1); |
| test(-0.0, -0); |
| test(-1.0, -1); |
| test(9223372036854775808.0, 9223372036854775808); |
| test(18446744073709551616.0, 18446744073709551616); |
| test(2.0, 0x02); |
| test(-2.0, -0x02); |
| |
| // Argument context, operator setter. |
| List<double> box = [0.5]; |
| box[0] = 0; |
| Expect.identical(0.0, box[0]); |
| box[0] = 1; |
| Expect.identical(1.0, box[0]); |
| box[0] = -0; |
| Expect.identical(-0.0, box[0]); |
| box[0] = -1; |
| Expect.identical(-1.0, box[0]); |
| box[0] = 9223372036854775808; |
| Expect.identical(9223372036854775808.0, box[0]); |
| box[0] = 18446744073709551616; |
| Expect.identical(18446744073709551616.0, box[0]); |
| box[0] = 0x02; |
| Expect.identical(2.0, box[0]); |
| box[0] = -0x02; |
| Expect.identical(-2.0, box[0]); |
| |
| // Argument context, custom operators. |
| var oper = Oper(); |
| Expect.identical(0.0, oper + 0); |
| Expect.identical(1.0, oper + 1); |
| Expect.identical(-0.0, oper + -0); |
| Expect.identical(-1.0, oper + -1); |
| Expect.identical(9223372036854775808.0, oper + 9223372036854775808); |
| Expect.identical(18446744073709551616.0, oper + 18446744073709551616); |
| Expect.identical(2.0, oper + 0x02); |
| Expect.identical(-2.0, oper + -0x02); |
| |
| Expect.identical(0.0, oper >> 0); |
| Expect.identical(1.0, oper >> 1); |
| Expect.identical(-0.0, oper >> -0); |
| Expect.identical(-1.0, oper >> -1); |
| Expect.identical(9223372036854775808.0, oper >> 9223372036854775808); |
| Expect.identical(18446744073709551616.0, oper >> 18446744073709551616); |
| Expect.identical(2.0, oper >> 0x02); |
| Expect.identical(-2.0, oper >> -0x02); |
| |
| Expect.identical(0.0, oper[0]); |
| Expect.identical(1.0, oper[1]); |
| Expect.identical(-0.0, oper[-0]); |
| Expect.identical(-1.0, oper[-1]); |
| Expect.identical(9223372036854775808.0, oper[9223372036854775808]); |
| Expect.identical(18446744073709551616.0, oper[18446744073709551616]); |
| Expect.identical(2.0, oper[0x02]); |
| Expect.identical(-2.0, oper[-0x02]); |
| |
| // Explicit return context. |
| double fun1() => 0; |
| Expect.identical(0.0, fun1()); |
| double fun2() => 1; |
| Expect.identical(1.0, fun2()); |
| double fun3() => -0; |
| Expect.identical(-0.0, fun3()); |
| double fun4() => -1; |
| Expect.identical(-1.0, fun4()); |
| double fun5() => 9223372036854775808; |
| Expect.identical(9223372036854775808.0, fun5()); |
| double fun6() => 18446744073709551616; |
| Expect.identical(18446744073709551616.0, fun6()); |
| double fun7() => 0x02; |
| Expect.identical(2.0, fun7()); |
| double fun8() => -0x02; |
| Expect.identical(-2.0, fun8()); |
| |
| // Inferred return context. |
| testFun(0.0, () => 0); |
| testFun(1.0, () => 1); |
| testFun(-0.0, () => -0); |
| testFun(-1.0, () => -1); |
| testFun(9223372036854775808.0, () => 9223372036854775808); |
| testFun(18446744073709551616.0, () => 18446744073709551616); |
| testFun(2.0, () => 0x02); |
| testFun(-2.0, () => -0x02); |
| |
| // Function default value context. |
| Object deffun1([double v = 0]) => v; |
| Expect.identical(0.0, deffun1()); |
| Object deffun2([double v = 1]) => v; |
| Expect.identical(1.0, deffun2()); |
| Object deffun3([double v = -0]) => v; |
| Expect.identical(-0.0, deffun3()); |
| Object deffun4([double v = -1]) => v; |
| Expect.identical(-1.0, deffun4()); |
| Object deffun5([double v = 9223372036854775808]) => v; |
| Expect.identical(9223372036854775808.0, deffun5()); |
| Object deffun6([double v = 18446744073709551616]) => v; |
| Expect.identical(18446744073709551616.0, deffun6()); |
| Object deffun7([double v = 0x02]) => v; |
| Expect.identical(2.0, deffun7()); |
| Object deffun8([double v = -0x02]) => v; |
| Expect.identical(-2.0, deffun8()); |
| |
| // Explicit collection literal context. |
| box = <double>[0]; |
| Expect.identical(0.0, box[0]); |
| box = <double>[1]; |
| Expect.identical(1.0, box[0]); |
| box = <double>[-0]; |
| Expect.identical(-0.0, box[0]); |
| box = <double>[-1]; |
| Expect.identical(-1.0, box[0]); |
| box = <double>[9223372036854775808]; |
| Expect.identical(9223372036854775808.0, box[0]); |
| box = <double>[18446744073709551616]; |
| Expect.identical(18446744073709551616.0, box[0]); |
| box = <double>[0x02]; |
| Expect.identical(2.0, box[0]); |
| box = <double>[-0x02]; |
| Expect.identical(-2.0, box[0]); |
| |
| // Implicit collection literal context. |
| box = [0]; |
| Expect.identical(0.0, box[0]); |
| box = [1]; |
| Expect.identical(1.0, box[0]); |
| box = [-0]; |
| Expect.identical(-0.0, box[0]); |
| box = [-1]; |
| Expect.identical(-1.0, box[0]); |
| box = [9223372036854775808]; |
| Expect.identical(9223372036854775808.0, box[0]); |
| box = [18446744073709551616]; |
| Expect.identical(18446744073709551616.0, box[0]); |
| box = [0x02]; |
| Expect.identical(2.0, box[0]); |
| box = [-0x02]; |
| Expect.identical(-2.0, box[0]); |
| |
| Map<double?, double?> map; |
| // Explicit map key context. |
| map = <double, Null>{0: null}; |
| Expect.identical(0.0, map.keys.first); |
| map = <double, Null>{1: null}; |
| Expect.identical(1.0, map.keys.first); |
| map = <double, Null>{-0: null}; |
| Expect.identical(-0.0, map.keys.first); |
| map = <double, Null>{-1: null}; |
| Expect.identical(-1.0, map.keys.first); |
| map = <double, Null>{9223372036854775808: null}; |
| Expect.identical(9223372036854775808.0, map.keys.first); |
| map = <double, Null>{18446744073709551616: null}; |
| Expect.identical(18446744073709551616.0, map.keys.first); |
| map = <double, Null>{0x02: null}; |
| Expect.identical(2.0, map.keys.first); |
| map = <double, Null>{-0x02: null}; |
| Expect.identical(-2.0, map.keys.first); |
| |
| // Implicit map key context. |
| map = {0: null}; |
| Expect.identical(0.0, map.keys.first); |
| map = {1: null}; |
| Expect.identical(1.0, map.keys.first); |
| map = {-0: null}; |
| Expect.identical(-0.0, map.keys.first); |
| map = {-1: null}; |
| Expect.identical(-1.0, map.keys.first); |
| map = {9223372036854775808: null}; |
| Expect.identical(9223372036854775808.0, map.keys.first); |
| map = {18446744073709551616: null}; |
| Expect.identical(18446744073709551616.0, map.keys.first); |
| map = {0x02: null}; |
| Expect.identical(2.0, map.keys.first); |
| map = {-0x02: null}; |
| Expect.identical(-2.0, map.keys.first); |
| |
| // Explicit map value context. |
| map = <Null, double>{null: 0}; |
| Expect.identical(0.0, map.values.first); |
| map = <Null, double>{null: 1}; |
| Expect.identical(1.0, map.values.first); |
| map = <Null, double>{null: -0}; |
| Expect.identical(-0.0, map.values.first); |
| map = <Null, double>{null: -1}; |
| Expect.identical(-1.0, map.values.first); |
| map = <Null, double>{null: 9223372036854775808}; |
| Expect.identical(9223372036854775808.0, map.values.first); |
| map = <Null, double>{null: 18446744073709551616}; |
| Expect.identical(18446744073709551616.0, map.values.first); |
| map = <Null, double>{null: 0x02}; |
| Expect.identical(2.0, map.values.first); |
| map = <Null, double>{null: -0x02}; |
| Expect.identical(-2.0, map.values.first); |
| |
| // Implicit map value context. |
| map = {null: 0}; |
| Expect.identical(0.0, map.values.first); |
| map = {null: 1}; |
| Expect.identical(1.0, map.values.first); |
| map = {null: -0}; |
| Expect.identical(-0.0, map.values.first); |
| map = {null: -1}; |
| Expect.identical(-1.0, map.values.first); |
| map = {null: 9223372036854775808}; |
| Expect.identical(9223372036854775808.0, map.values.first); |
| map = {null: 18446744073709551616}; |
| Expect.identical(18446744073709551616.0, map.values.first); |
| map = {null: 0x02}; |
| Expect.identical(2.0, map.values.first); |
| map = {null: -0x02}; |
| Expect.identical(-2.0, map.values.first); |
| |
| // Top-level contexts |
| Expect.identical(0.0, ts1); |
| Expect.identical(1.0, ts2); |
| Expect.identical(-0.0, ts3); |
| Expect.identical(-1.0, ts4); |
| Expect.identical(9223372036854775808.0, ts5); |
| Expect.identical(18446744073709551616.0, ts6); |
| Expect.identical(2.0, ts7); |
| Expect.identical(-2.0, ts8); |
| |
| Expect.identical(0.0, tc1); |
| Expect.identical(1.0, tc2); |
| Expect.identical(-0.0, tc3); |
| Expect.identical(-1.0, tc4); |
| Expect.identical(9223372036854775808.0, tc5); |
| Expect.identical(18446744073709551616.0, tc6); |
| Expect.identical(2.0, tc7); |
| Expect.identical(-2.0, tc8); |
| |
| Expect.identical(0.0, tg1); |
| Expect.identical(1.0, tg2); |
| Expect.identical(-0.0, tg3); |
| Expect.identical(-1.0, tg4); |
| Expect.identical(9223372036854775808.0, tg5); |
| Expect.identical(18446744073709551616.0, tg6); |
| Expect.identical(2.0, tg7); |
| Expect.identical(-2.0, tg8); |
| |
| // Class contexts |
| var c = new C.ci1(); |
| Expect.identical(0.0, c.v1); |
| Expect.identical(1.0, c.v2); |
| Expect.identical(-0.0, c.v3); |
| Expect.identical(-1.0, c.v4); |
| Expect.identical(9223372036854775808.0, c.v5); |
| Expect.identical(18446744073709551616.0, c.v6); |
| Expect.identical(2.0, c.v7); |
| Expect.identical(-2.0, c.v8); |
| |
| Expect.identical(0.0, C.s1); |
| Expect.identical(1.0, C.s2); |
| Expect.identical(-0.0, C.s3); |
| Expect.identical(-1.0, C.s4); |
| Expect.identical(9223372036854775808.0, C.s5); |
| Expect.identical(18446744073709551616.0, C.s6); |
| Expect.identical(2.0, C.s7); |
| Expect.identical(-2.0, C.s8); |
| |
| Expect.identical(0.0, C.c1); |
| Expect.identical(1.0, C.c2); |
| Expect.identical(-0.0, C.c3); |
| Expect.identical(-1.0, C.c4); |
| Expect.identical(9223372036854775808.0, C.c5); |
| Expect.identical(18446744073709551616.0, C.c6); |
| Expect.identical(2.0, C.c7); |
| Expect.identical(-2.0, C.c8); |
| |
| Expect.identical(0.0, new C.cc1().d); |
| Expect.identical(1.0, new C.cc2().d); |
| Expect.identical(-0.0, new C.cc3().d); |
| Expect.identical(-1.0, new C.cc4().d); |
| Expect.identical(9223372036854775808.0, new C.cc5().d); |
| Expect.identical(18446744073709551616.0, new C.cc6().d); |
| Expect.identical(2.0, new C.cc7().d); |
| Expect.identical(-2.0, new C.cc8().d); |
| |
| Expect.identical(0.0, const C.cc1().d); |
| Expect.identical(1.0, const C.cc2().d); |
| Expect.identical(-0.0, const C.cc3().d); |
| Expect.identical(-1.0, const C.cc4().d); |
| Expect.identical(9223372036854775808.0, const C.cc5().d); |
| Expect.identical(18446744073709551616.0, const C.cc6().d); |
| Expect.identical(2.0, const C.cc7().d); |
| Expect.identical(-2.0, const C.cc8().d); |
| |
| Expect.identical(0.0, new C.ci1().d); |
| Expect.identical(1.0, new C.ci2().d); |
| Expect.identical(-0.0, new C.ci3().d); |
| Expect.identical(-1.0, new C.ci4().d); |
| Expect.identical(9223372036854775808.0, new C.ci5().d); |
| Expect.identical(18446744073709551616.0, new C.ci6().d); |
| Expect.identical(2.0, new C.ci7().d); |
| Expect.identical(-2.0, new C.ci8().d); |
| |
| Expect.identical(0.0, const C.ci1().d); |
| Expect.identical(1.0, const C.ci2().d); |
| Expect.identical(-0.0, const C.ci3().d); |
| Expect.identical(-1.0, const C.ci4().d); |
| Expect.identical(9223372036854775808.0, const C.ci5().d); |
| Expect.identical(18446744073709551616.0, const C.ci6().d); |
| Expect.identical(2.0, const C.ci7().d); |
| Expect.identical(-2.0, const C.ci8().d); |
| |
| // Nested context, `?:`. |
| v1 = false ? 42.0 : 0; |
| Expect.identical(0.0, v1); |
| v2 = false ? 42.0 : 1; |
| Expect.identical(1.0, v2); |
| v3 = false ? 42.0 : -0; |
| Expect.identical(-0.0, v3); |
| v4 = false ? 42.0 : -1; |
| Expect.identical(-1.0, v4); |
| v5 = false ? 42.0 : 9223372036854775808; |
| Expect.identical(9223372036854775808.0, v5); |
| v6 = false ? 42.0 : 18446744073709551616; |
| Expect.identical(18446744073709551616.0, v6); |
| v7 = false ? 42.0 : 0x02; // Hex literal. |
| Expect.identical(2.0, v7); |
| v8 = false ? 42.0 : -0x02; // Hex literal. |
| Expect.identical(-2.0, v8); |
| |
| // Nested context, `??`. |
| double? nl = double.tryParse("not a double"); // Returns null typed as double. |
| v1 = nl ?? 0; |
| Expect.identical(0.0, v1); |
| v2 = nl ?? 1; |
| Expect.identical(1.0, v2); |
| v3 = nl ?? -0; |
| Expect.identical(-0.0, v3); |
| v4 = nl ?? -1; |
| Expect.identical(-1.0, v4); |
| v5 = nl ?? 9223372036854775808; |
| Expect.identical(9223372036854775808.0, v5); |
| v6 = nl ?? 18446744073709551616; |
| Expect.identical(18446744073709551616.0, v6); |
| v7 = nl ?? 0x02; // Hex literal. |
| Expect.identical(2.0, v7); |
| v8 = nl ?? -0x02; // Hex literal. |
| Expect.identical(-2.0, v8); |
| |
| // Nested context, `..`. |
| v1 = 0..toString(); |
| Expect.identical(0.0, v1); |
| v2 = 1..toString(); |
| Expect.identical(1.0, v2); |
| v3 = -0 |
| ..toString(); |
| Expect.identical(-0.0, v3); |
| v4 = -1 |
| ..toString(); |
| Expect.identical(-1.0, v4); |
| v5 = 9223372036854775808..toString(); |
| Expect.identical(9223372036854775808.0, v5); |
| v6 = 18446744073709551616..toString(); |
| Expect.identical(18446744073709551616.0, v6); |
| v7 = 0x02..toString(); // Hex literal. |
| Expect.identical(2.0, v7); |
| v8 = -0x02 |
| ..toString(); // Hex literal. |
| Expect.identical(-2.0, v8); |
| |
| // Nexted context, double assignment. |
| Object object; |
| object = value = 0; |
| Expect.identical(0.0, value); |
| object = value = 1; |
| Expect.identical(1.0, value); |
| object = value = -0; |
| Expect.identical(-0.0, value); |
| object = value = -1; |
| Expect.identical(-1.0, value); |
| object = value = 9223372036854775808; |
| Expect.identical(9223372036854775808.0, value); |
| object = value = 18446744073709551616; |
| Expect.identical(18446744073709551616.0, value); |
| object = value = 0x02; |
| Expect.identical(2.0, value); |
| object = value = -0x02; |
| Expect.identical(-2.0, value); |
| |
| // Nested context, value of assignment. |
| Expect.identical(0.0, value = 0); |
| Expect.identical(1.0, value = 1); |
| Expect.identical(-0.0, value = -0); |
| Expect.identical(-1.0, value = -1); |
| Expect.identical(9223372036854775808.0, value = 9223372036854775808); |
| Expect.identical(18446744073709551616.0, value = 18446744073709551616); |
| Expect.identical(2.0, value = 0x02); |
| Expect.identical(-2.0, value = -0x02); |
| |
| // JavaScript platforms represent integers as doubles, so negating them will |
| // result in negative zero, unfortunately. |
| int zero = 0; |
| bool platformHasNegativeZeroInts = (-zero).isNegative; |
| |
| // Not promoted without a double context. |
| num x = -0; |
| Expect.identical(0, x); |
| Expect.equals(x.isNegative, platformHasNegativeZeroInts); |
| |
| var list = [3.14, 2.17, -0]; |
| Expect.notType<List<double>>(list); |
| Expect.identical(0, list[2]); |
| Expect.equals(list[2].isNegative, platformHasNegativeZeroInts); |
| |
| // FutureOr<double> also forces double. |
| // "Type that int is not assignable to, but double is." |
| FutureOr<double> fo1 = 0; |
| Expect.identical(0.0, fo1); |
| FutureOr<double> fo2 = 1; |
| Expect.identical(1.0, fo2); |
| FutureOr<double> fo3 = -0; |
| Expect.identical(-0.0, fo3); |
| FutureOr<double> fo4 = -1; |
| Expect.identical(-1.0, fo4); |
| FutureOr<double> fo5 = 9223372036854775808; |
| Expect.identical(9223372036854775808.0, fo5); |
| FutureOr<double> fo6 = 18446744073709551616; |
| Expect.identical(18446744073709551616.0, fo6); |
| FutureOr<double> fo7 = 0x02; // Hex literal. |
| Expect.identical(2.0, fo7); |
| FutureOr<double> fo8 = -0x02; // Hex literal. |
| Expect.identical(-2.0, fo8); |
| |
| // Some other FutureOr cases, without being exhaustive. |
| { |
| Object func([FutureOr<double> x = 9223372036854775808]) => x; |
| Expect.identical(9223372036854775808.0, func(9223372036854775808)); |
| Expect.identical(9223372036854775808.0, func()); |
| FutureOr<double> func2() => 9223372036854775808; |
| Expect.identical(9223372036854775808.0, func2()); |
| testGeneric<FutureOr<double>>(9223372036854775808.0, 9223372036854775808); |
| List<FutureOr<double>> l = [9223372036854775808]; |
| testGeneric<FutureOr<double>>(9223372036854775808.0, l[0]); |
| l.add(9223372036854775808); |
| testGeneric<FutureOr<double>>(9223372036854775808.0, l[1]); |
| l.add(0.0); |
| l[2] = 9223372036854775808; |
| testGeneric<FutureOr<double>>(9223372036854775808.0, l[2]); |
| } |
| |
| // Type variables statically bound to double also force doubles: |
| testGeneric<double>(0.0, 0); |
| testGeneric<double>(1.0, 1); |
| testGeneric<double>(-0.0, -0); |
| testGeneric<double>(-1.0, -1); |
| testGeneric<double>(9223372036854775808.0, 9223372036854775808); |
| testGeneric<double>(18446744073709551616.0, 18446744073709551616); |
| testGeneric<double>(2.0, 0x02); |
| testGeneric<double>(-2.0, -0x02); |
| |
| // Uses static type, not run-time type. |
| Super sub = Sub(); |
| Expect.identical(0.0, sub.method(0)); |
| Expect.identical(1.0, sub.method(1)); |
| Expect.identical(-0.0, sub.method(-0)); |
| Expect.identical(-1.0, sub.method(-1)); |
| Expect.identical(9223372036854775808.0, sub.method(9223372036854775808)); |
| Expect.identical(18446744073709551616.0, sub.method(18446744073709551616)); |
| Expect.identical(2.0, sub.method(0x02)); |
| Expect.identical(-2.0, sub.method(-0x02)); |
| |
| { |
| // Check that the correct value is used as receiver for the cascade. |
| var collector = StringBuffer(); |
| double tricky = -42 |
| ..toString().codeUnits.forEach(collector.writeCharCode); |
| Expect.equals("${-42.0}", collector.toString()); |
| } |
| |
| bool isDigit(int charCode) => (charCode ^ 0x30) <= 9; |
| // Throws because double context does not affect "4", so the toString does |
| // not contain any non-digit (like ".", which it would if 4 was a double). |
| // The context type of "4.toString..." is not double, and the `-` |
| // is not having a literal as operand. |
| Expect.throws(() { |
| double tricky = |
| -4.toString().codeUnits.firstWhere((c) => !isDigit(c)).toDouble(); |
| }); |
| } |
| |
| void test(double expect, double value) { |
| Expect.identical(expect, value); |
| } |
| |
| void testFun(double expect, double f()) { |
| Expect.identical(expect, f()); |
| } |
| |
| void testGeneric<T>(double expect, T value) { |
| Expect.identical(expect, value); |
| } |
| |
| class Oper { |
| Object operator +(double value) => value; |
| Object operator >>(double value) => value; |
| Object operator [](double value) => value; |
| } |
| |
| class C { |
| // Instance variable initializer |
| final double v1 = 0; |
| final double v2 = 1; |
| final double v3 = -0; |
| final double v4 = -1; |
| final double v5 = 9223372036854775808; |
| final double v6 = 18446744073709551616; |
| final double v7 = 0x02; // Hex literal. |
| final double v8 = -0x02; // Hex literal. |
| |
| // Static class variable initializer |
| static double s1 = 0; |
| static double s2 = 1; |
| static double s3 = -0; |
| static double s4 = -1; |
| static double s5 = 9223372036854775808; |
| static double s6 = 18446744073709551616; |
| static double s7 = 0x02; // Hex literal. |
| static double s8 = -0x02; // Hex literal. |
| |
| // Const class variable initializer context. |
| static const double c1 = 0; |
| static const double c2 = 1; |
| static const double c3 = -0; |
| static const double c4 = -1; |
| static const double c5 = 9223372036854775808; |
| static const double c6 = 18446744073709551616; |
| static const double c7 = 0x02; // Hex literal. |
| static const double c8 = -0x02; // Hex literal. |
| |
| final double d; |
| |
| // Default value context for a double initializing formal. |
| const C.cc1([this.d = 0]); |
| const C.cc2([this.d = 1]); |
| const C.cc3([this.d = -0]); |
| const C.cc4([this.d = -1]); |
| const C.cc5([this.d = 9223372036854775808]); |
| const C.cc6([this.d = 18446744073709551616]); |
| const C.cc7([this.d = 0x02]); |
| const C.cc8([this.d = -0x02]); |
| |
| // Initializer list expressions context. |
| const C.ci1() : this.d = 0; |
| const C.ci2() : this.d = 1; |
| const C.ci3() : this.d = -0; |
| const C.ci4() : this.d = -1; |
| const C.ci5() : this.d = 9223372036854775808; |
| const C.ci6() : this.d = 18446744073709551616; |
| const C.ci7() : this.d = 0x02; |
| const C.ci8() : this.d = -0x02; |
| } |
| |
| // Top-level lazy variable initializer |
| double ts1 = 0; |
| double ts2 = 1; |
| double ts3 = -0; |
| double ts4 = -1; |
| double ts5 = 9223372036854775808; |
| double ts6 = 18446744073709551616; |
| double ts7 = 0x02; // Hex literal. |
| double ts8 = -0x02; // Hex literal. |
| |
| // Top-level const variable initializer. |
| const double tc1 = 0; |
| const double tc2 = 1; |
| const double tc3 = -0; |
| const double tc4 = -1; |
| const double tc5 = 9223372036854775808; // 2^63, invalid signed 64-bit integer. |
| const double tc6 = 18446744073709551616; |
| const double tc7 = 0x02; // Hex literal. |
| const double tc8 = -0x02; // Hex literal. |
| |
| // Top-level getter return context. |
| double get tg1 => 0; |
| double get tg2 => 1; |
| double get tg3 => -0; |
| double get tg4 => -1; |
| double get tg5 => 9223372036854775808; |
| double get tg6 => 18446744073709551616; |
| double get tg7 => 0x02; // Hex literal. |
| double get tg8 => -0x02; // Hex literal. |
| |
| Object? lastSetValue = null; |
| void set setter(double v) { |
| lastSetValue = v; |
| } |
| |
| abstract class Super { |
| Object method(double v); |
| } |
| |
| class Sub implements Super { |
| Object method(Object o) => o; |
| } |