|  | // Copyright (c) 2019, 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 "package:expect/expect.dart"; | 
|  |  | 
|  | void main() { | 
|  | const BitNot(42, 4294967253).check(); | 
|  | const BitNot(4294967253, 42).check(); | 
|  | const BitNot(-42, 41).check(); | 
|  | const BitNot(-1, 0).check(); | 
|  | const BitNot(0, 0xFFFFFFFF).check(); | 
|  | const BitNot(4294967295, 0).check(); | 
|  | const BitNot(0x12121212121212, 0xEDEDEDED).check(); | 
|  | const BitNot(0x7fffffff00000000, 0xffffffff).check(); | 
|  | const BitNot(0x8000000000000000, 0xffffffff).check(); | 
|  |  | 
|  | const Negate(0, -0).check(); | 
|  | const Negate(-0, 0).check(); | 
|  | const Negate(0.0, -0.0).check(); | 
|  | const Negate(-0.0, 0.0).check(); | 
|  | const Negate(-0.0, 0).check(); | 
|  | const Negate(-0, 0.0).check(); | 
|  | const Negate(0, -0.0).check(); | 
|  | const Negate(0.0, -0).check(); | 
|  | const Negate(1, -1).check(); | 
|  | const Negate(-1, 1).check(); | 
|  | const Negate(1.0, -1.0).check(); | 
|  | const Negate(-1.0, 1.0).check(); | 
|  | const Negate(3.14, -3.14).check(); | 
|  | const Negate(-3.14, 3.14).check(); | 
|  | const Negate(4294967295, -4294967295).check(); | 
|  | const Negate(-4294967295, 4294967295).check(); | 
|  | const Negate(4294967295.5, -4294967295.5).check(); | 
|  | const Negate(-4294967295.5, 4294967295.5).check(); | 
|  | const Negate(4294967296, -4294967296).check(); | 
|  | const Negate(-4294967296, 4294967296).check(); | 
|  | const Negate(4294967296.5, -4294967296.5).check(); | 
|  | const Negate(-4294967296.5, 4294967296.5).check(); | 
|  | const Negate(9007199254740991, -9007199254740991).check(); | 
|  | const Negate(-9007199254740991, 9007199254740991).check(); | 
|  | const Negate(9007199254740991.5, -9007199254740991.5).check(); | 
|  | const Negate(-9007199254740991.5, 9007199254740991.5).check(); | 
|  | const Negate(9007199254740992, -9007199254740992).check(); | 
|  | const Negate(-9007199254740992, 9007199254740992).check(); | 
|  | const Negate(9007199254740992.5, -9007199254740992.5).check(); | 
|  | const Negate(-9007199254740992.5, 9007199254740992.5).check(); | 
|  | const Negate(double.infinity, double.negativeInfinity).check(); | 
|  | const Negate(double.negativeInfinity, double.infinity).check(); | 
|  | const Negate(double.maxFinite, -double.maxFinite).check(); | 
|  | const Negate(-double.maxFinite, double.maxFinite).check(); | 
|  | const Negate(double.minPositive, -double.minPositive).check(); | 
|  | const Negate(-double.minPositive, double.minPositive).check(); | 
|  | const Negate(double.nan, double.nan).check(); | 
|  | const Negate(0x7fffffff00000000, -0x7fffffff00000000).check(); | 
|  | const Negate(-0x7fffffff00000000, 0x7fffffff00000000).check(); | 
|  | const Negate(0x8000000000000000, -0x8000000000000000).check(); | 
|  | const Negate(-0x8000000000000000, 0x8000000000000000).check(); | 
|  |  | 
|  | const Not(true, false).check(); | 
|  | const Not(false, true).check(); | 
|  |  | 
|  | const BitAnd(314159, 271828, 262404).check(); | 
|  | const BitAnd(271828, 314159, 262404).check(); | 
|  | const BitAnd(0, 0, 0).check(); | 
|  | const BitAnd(-1, 0, 0).check(); | 
|  | const BitAnd(-1, 314159, 314159).check(); | 
|  | const BitAnd(-1, 0xFFFFFFFF, 0xFFFFFFFF).check(); | 
|  | const BitAnd(0xff, -4, 0xfc).check(); | 
|  | const BitAnd(0, 0xFFFFFFFF, 0).check(); | 
|  | const BitAnd(0xFFFFFFFF, 0, 0).check(); | 
|  | const BitAnd(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF).check(); | 
|  | const BitAnd(0x123456789ABC, 0xEEEEEEEEEEEE, 0x46688AAC).check(); | 
|  | const BitAnd(0x7fffffff00008000, 0x8000000000008000, 0x8000).check(); | 
|  | const BitAnd(0x8000000000008000, 0x7fffffff00008000, 0x8000).check(); | 
|  | const BitAnd(true, true, true).check(); | 
|  | const BitAnd(true, false, false).check(); | 
|  | const BitAnd(false, true, false).check(); | 
|  | const BitAnd(false, false, false).check(); | 
|  |  | 
|  | const BitOr(314159, 271828, 323583).check(); | 
|  | const BitOr(271828, 314159, 323583).check(); | 
|  | const BitOr(0, 0, 0).check(); | 
|  | const BitOr(-8, 0, 0xFFFFFFF8).check(); | 
|  | const BitOr(-8, 271828, 0xFFFFFFFC).check(); | 
|  | const BitOr(-8, 0xFFFFFFFF, 0xFFFFFFFF).check(); | 
|  | const BitOr(0x1, -4, 0xFFFFFFFD).check(); | 
|  | const BitOr(0, 0xFFFFFFFF, 0xFFFFFFFF).check(); | 
|  | const BitOr(0xFFFFFFFF, 0, 0xFFFFFFFF).check(); | 
|  | const BitOr(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF).check(); | 
|  | const BitOr(0x123456789ABC, 0x111111111111, 0x57799BBD).check(); | 
|  | const BitOr(0x7000000080000000, 0x8000000000008000, 0x80008000).check(); | 
|  | const BitOr(0x8000000000008000, 0x7000000080000000, 0x80008000).check(); | 
|  | const BitOr(true, true, true).check(); | 
|  | const BitOr(true, false, true).check(); | 
|  | const BitOr(false, true, true).check(); | 
|  | const BitOr(false, false, false).check(); | 
|  |  | 
|  | const BitXor(314159, 271828, 61179).check(); | 
|  | const BitXor(271828, 314159, 61179).check(); | 
|  | const BitXor(0, 0, 0).check(); | 
|  | const BitXor(-1, 0, 0xFFFFFFFF).check(); | 
|  | const BitXor(-256, 1, 0xFFFFFF01).check(); | 
|  | const BitXor(-256, -255, 1).check(); | 
|  | const BitXor(0, 0xFFFFFFFF, 0xFFFFFFFF).check(); | 
|  | const BitXor(0xFFFFFFFF, 0, 0xFFFFFFFF).check(); | 
|  | const BitXor(0xFFFFFFFF, 0xFFFFFFFF, 0).check(); | 
|  | const BitXor(0x123456789ABC, 0x111111111111, 0x47698BAD).check(); | 
|  | const BitXor(0x7000000012340000, 0x8000000011110000, 0x03250000).check(); | 
|  | const BitXor(0x8000000011110000, 0x7000000012340000, 0x03250000).check(); | 
|  | const BitXor(true, true, false).check(); | 
|  | const BitXor(true, false, true).check(); | 
|  | const BitXor(false, true, true).check(); | 
|  | const BitXor(false, false, false).check(); | 
|  |  | 
|  | const ShiftLeft(42, 0, 42).check(); | 
|  | const ShiftLeft(42, 5, 1344).check(); | 
|  | const ShiftLeft(1, 31, 0x80000000).check(); | 
|  | const ShiftLeft(1, 32, 0).check(); | 
|  | const ShiftLeft(1, 100, 0).check(); | 
|  | const ShiftLeft(0, 0, 0).check(); | 
|  | const ShiftLeft(0, 5, 0).check(); | 
|  | const ShiftLeft(0, 31, 0).check(); | 
|  | const ShiftLeft(0, 32, 0).check(); | 
|  | const ShiftLeft(0, 100, 0).check(); | 
|  | const ShiftLeft(-1, 0, 0xFFFFFFFF).check(); | 
|  | const ShiftLeft(-1, 5, 0xFFFFFFE0).check(); | 
|  | const ShiftLeft(-1, 31, 0x80000000).check(); | 
|  | const ShiftLeft(-1, 32, 0).check(); | 
|  | const ShiftLeft(-1, 100, 0).check(); | 
|  | const ShiftLeft(0x7000000000008000, 0, 0x8000).check(); | 
|  | const ShiftLeft(0x7000000000008000, 1, 0x10000).check(); | 
|  | const ShiftLeft(0x7000000000008000, 16, 0x80000000).check(); | 
|  | const ShiftLeft(0x7000000000008000, 17, 0x0).check(); | 
|  | const ShiftLeft(0x8000000000008000, 0, 0x8000).check(); | 
|  | const ShiftLeft(0x8000000000008000, 1, 0x10000).check(); | 
|  | const ShiftLeft(0x8000000000008000, 16, 0x80000000).check(); | 
|  | const ShiftLeft(0x8000000000008000, 17, 0x0).check(); | 
|  |  | 
|  | const ShiftRight(8675309, 0, 8675309).check(); | 
|  | const ShiftRight(8675309, 5, 271103).check(); | 
|  | const ShiftRight(0xFEDCBA98, 0, 0xFEDCBA98).check(); | 
|  | const ShiftRight(0xFEDCBA98, 5, 0x07F6E5D4).check(); | 
|  | const ShiftRight(0xFEDCBA98, 31, 1).check(); | 
|  | const ShiftRight(0xFEDCBA98, 32, 0).check(); | 
|  | const ShiftRight(0xFEDCBA98, 100, 0).check(); | 
|  | const ShiftRight(0xFFFFFEDCBA98, 0, 0xFEDCBA98).check(); | 
|  | const ShiftRight(0xFFFFFEDCBA98, 5, 0x07F6E5D4).check(); | 
|  | const ShiftRight(0xFFFFFEDCBA98, 31, 1).check(); | 
|  | const ShiftRight(0xFFFFFEDCBA98, 32, 0).check(); | 
|  | const ShiftRight(0xFFFFFEDCBA98, 100, 0).check(); | 
|  | const ShiftRight(-1, 0, 0xFFFFFFFF).check(); | 
|  | const ShiftRight(-1, 5, 0xFFFFFFFF).check(); | 
|  | const ShiftRight(-1, 31, 0xFFFFFFFF).check(); | 
|  | const ShiftRight(-1, 32, 0xFFFFFFFF).check(); | 
|  | const ShiftRight(-1, 100, 0xFFFFFFFF).check(); | 
|  | const ShiftRight(-1073741824, 0, 0xC0000000).check(); | 
|  | const ShiftRight(-1073741824, 5, 0xFE000000).check(); | 
|  | const ShiftRight(-1073741824, 31, 0xFFFFFFFF).check(); | 
|  | const ShiftRight(-1073741824, 32, 0xFFFFFFFF).check(); | 
|  | const ShiftRight(-1073741824, 100, 0xFFFFFFFF).check(); | 
|  | const ShiftRight(0x7000000000008000, 0, 0x8000).check(); | 
|  | const ShiftRight(0x7000000000008000, 1, 0x4000).check(); | 
|  | const ShiftRight(0x7000000000008000, 15, 0x1).check(); | 
|  | const ShiftRight(0x7000000000008000, 16, 0).check(); | 
|  | const ShiftRight(0x8000000000008000, 0, 0x8000).check(); | 
|  | const ShiftRight(0x8000000000008000, 1, 0x4000).check(); | 
|  | const ShiftRight(0x8000000000008000, 15, 0x1).check(); | 
|  | const ShiftRight(0x8000000000008000, 16, 0).check(); | 
|  |  | 
|  | const BooleanAnd(true, true, true).check(); | 
|  | const BooleanAnd(true, false, false).check(); | 
|  | const BooleanAnd(false, true, false).check(); | 
|  | const BooleanAnd(false, false, false).check(); | 
|  | const BooleanAnd(false, null, false).check(); | 
|  |  | 
|  | const BooleanOr(true, true, true).check(); | 
|  | const BooleanOr(true, false, true).check(); | 
|  | const BooleanOr(false, true, true).check(); | 
|  | const BooleanOr(false, false, false).check(); | 
|  | const BooleanOr(true, null, true).check(); | 
|  |  | 
|  | const Subtract(314159, 271828, 42331).check(); | 
|  | const Subtract(271828, 314159, -42331).check(); | 
|  | const Subtract(0, 0, 0).check(); | 
|  | const Subtract(0, 42, -42).check(); | 
|  | const Subtract(0, -42, 42).check(); | 
|  | const Subtract(42, 0, 42).check(); | 
|  | const Subtract(42, 42, 0).check(); | 
|  | const Subtract(42, -42, 84).check(); | 
|  | const Subtract(-42, 0, -42).check(); | 
|  | const Subtract(-42, 42, -84).check(); | 
|  | const Subtract(-42, -42, 0).check(); | 
|  | const Subtract(4294967295, -1, 4294967296).check(); | 
|  | const Subtract(4294967296, -1, 4294967297).check(); | 
|  | const Subtract(9007199254740991, -1, 9007199254740992).check(); | 
|  | const Subtract(9007199254740992, -1, 9007199254740992).check(); | 
|  | const Subtract(9007199254740992, -100, 9007199254741092).check(); | 
|  | const Subtract(-4294967295, 1, -4294967296).check(); | 
|  | const Subtract(-4294967296, 1, -4294967297).check(); | 
|  | const Subtract(-9007199254740991, 1, -9007199254740992).check(); | 
|  | const Subtract(-9007199254740992, 1, -9007199254740992).check(); | 
|  | const Subtract(-9007199254740992, 100, -9007199254741092).check(); | 
|  | const Subtract( | 
|  | 0x7fffffff00000000, -0x7fffffff00000000, 2 * 0x7fffffff00000000) | 
|  | .check(); | 
|  | const Subtract(4.2, 1.5, 2.7).check(); | 
|  | const Subtract(1.5, 4.2, -2.7).check(); | 
|  | const Subtract(1.5, 0, 1.5).check(); | 
|  | const Subtract(0, 1.5, -1.5).check(); | 
|  | const Subtract(1.5, 1.5, 0.0).check(); | 
|  | const Subtract(-1.5, -1.5, 0.0).check(); | 
|  | const Subtract(0.0, 0.0, 0.0).check(); | 
|  | const Subtract(0.0, -0.0, 0.0).check(); | 
|  | const Subtract(-0.0, 0.0, -0.0).check(); | 
|  | const Subtract(-0.0, -0.0, 0.0).check(); | 
|  | const Subtract(double.maxFinite, -double.maxFinite, double.infinity).check(); | 
|  | const Subtract(-double.maxFinite, double.maxFinite, double.negativeInfinity) | 
|  | .check(); | 
|  | const Subtract(1.5, double.nan, double.nan).check(); | 
|  | const Subtract(double.nan, 1.5, double.nan).check(); | 
|  | const Subtract(double.nan, double.nan, double.nan).check(); | 
|  | const Subtract(double.nan, double.infinity, double.nan).check(); | 
|  | const Subtract(double.nan, double.negativeInfinity, double.nan).check(); | 
|  | const Subtract(double.infinity, double.nan, double.nan).check(); | 
|  | const Subtract(double.negativeInfinity, double.nan, double.nan).check(); | 
|  | const Subtract(double.infinity, double.maxFinite, double.infinity).check(); | 
|  | const Subtract(double.infinity, -double.maxFinite, double.infinity).check(); | 
|  | const Subtract( | 
|  | double.negativeInfinity, double.maxFinite, double.negativeInfinity) | 
|  | .check(); | 
|  | const Subtract( | 
|  | double.negativeInfinity, -double.maxFinite, double.negativeInfinity) | 
|  | .check(); | 
|  | const Subtract(1.5, double.infinity, double.negativeInfinity).check(); | 
|  | const Subtract(1.5, double.negativeInfinity, double.infinity).check(); | 
|  | const Subtract(double.infinity, double.infinity, double.nan).check(); | 
|  | const Subtract(double.infinity, double.negativeInfinity, double.infinity) | 
|  | .check(); | 
|  | const Subtract( | 
|  | double.negativeInfinity, double.infinity, double.negativeInfinity) | 
|  | .check(); | 
|  | const Subtract(double.negativeInfinity, double.negativeInfinity, double.nan) | 
|  | .check(); | 
|  | const Subtract(double.minPositive, double.minPositive, 0.0).check(); | 
|  | const Subtract(-double.minPositive, -double.minPositive, 0.0).check(); | 
|  |  | 
|  | const Multiply(6, 7, 42).check(); | 
|  | const Multiply(-6, 7, -42).check(); | 
|  | const Multiply(6, -7, -42).check(); | 
|  | const Multiply(-6, -7, 42).check(); | 
|  | const Multiply(0, 0, 0).check(); | 
|  | const Multiply(0, 7, 0).check(); | 
|  | const Multiply(6, 0, 0).check(); | 
|  | const Multiply(65536, 65536, 4294967296).check(); | 
|  | const Multiply(4294967296, -1, -4294967296).check(); | 
|  | const Multiply(-1, 4294967296, -4294967296).check(); | 
|  | const Multiply(134217728, 134217728, 18014398509481984).check(); | 
|  | const Multiply(18014398509481984, -1, -18014398509481984).check(); | 
|  | const Multiply(-1, 18014398509481984, -18014398509481984).check(); | 
|  | const Multiply(9000000000000000, 9000000000000000, 8.1e31).check(); | 
|  | const Multiply(0x7fff000000000000, 0x8000000000000000, 8.506799558180535e37) | 
|  | .check(); | 
|  | const Multiply(0x8000000000000000, 1.2, 11068046444225730000.0).check(); | 
|  | const Multiply(3.14, 2.72, 8.5408).check(); | 
|  | const Multiply(-3.14, 2.72, -8.5408).check(); | 
|  | const Multiply(3.14, -2.72, -8.5408).check(); | 
|  | const Multiply(-3.14, -2.72, 8.5408).check(); | 
|  | const Multiply(3.14, 0, 0.0).check(); | 
|  | const Multiply(0, 2.72, 0.0).check(); | 
|  | const Multiply(0.0, 0.0, 0.0).check(); | 
|  | const Multiply(0.0, -0.0, -0.0).check(); | 
|  | const Multiply(-0.0, 0.0, -0.0).check(); | 
|  | const Multiply(-0.0, -0.0, 0.0).check(); | 
|  | const Multiply(double.maxFinite, double.maxFinite, double.infinity).check(); | 
|  | const Multiply(double.maxFinite, -double.maxFinite, double.negativeInfinity) | 
|  | .check(); | 
|  | const Multiply(-double.maxFinite, double.maxFinite, double.negativeInfinity) | 
|  | .check(); | 
|  | const Multiply(-double.maxFinite, -double.maxFinite, double.infinity).check(); | 
|  | const Multiply(0, double.nan, double.nan).check(); | 
|  | const Multiply(double.nan, 0, double.nan).check(); | 
|  | const Multiply(double.nan, double.nan, double.nan).check(); | 
|  | const Multiply(0, double.infinity, double.nan).check(); | 
|  | const Multiply(double.infinity, 0, double.nan).check(); | 
|  | const Multiply(0, double.negativeInfinity, double.nan).check(); | 
|  | const Multiply(double.negativeInfinity, 0, double.nan).check(); | 
|  | const Multiply(-0.0, double.infinity, double.nan).check(); | 
|  | const Multiply(double.infinity, -0.0, double.nan).check(); | 
|  | const Multiply(-0.0, double.negativeInfinity, double.nan).check(); | 
|  | const Multiply(double.negativeInfinity, -0.0, double.nan).check(); | 
|  | const Multiply(double.infinity, double.infinity, double.infinity).check(); | 
|  | const Multiply( | 
|  | double.infinity, double.negativeInfinity, double.negativeInfinity) | 
|  | .check(); | 
|  | const Multiply( | 
|  | double.negativeInfinity, double.infinity, double.negativeInfinity) | 
|  | .check(); | 
|  | const Multiply( | 
|  | double.negativeInfinity, double.negativeInfinity, double.infinity) | 
|  | .check(); | 
|  | const Multiply(double.minPositive, 0.5, 0.0).check(); | 
|  | const Multiply(double.minPositive, -0.5, -0.0).check(); | 
|  | const Multiply(-double.minPositive, 0.5, -0.0).check(); | 
|  | const Multiply(-double.minPositive, -0.5, 0.0).check(); | 
|  | const Multiply(1e-300, -1e-300, -0.0).check(); | 
|  | const Multiply(double.minPositive, double.infinity, double.infinity).check(); | 
|  | const Multiply( | 
|  | double.minPositive, double.negativeInfinity, double.negativeInfinity) | 
|  | .check(); | 
|  | const Multiply(double.minPositive, double.maxFinite, 8.881784197001251e-16) | 
|  | .check(); | 
|  |  | 
|  | const Modulo(27, 314159, 27).check(); | 
|  | const Modulo(27, 1, 0).check(); | 
|  | const Modulo(27, -1, 0).check(); | 
|  | const Modulo(-27, 1, 0).check(); | 
|  | const Modulo(-27, -1, 0).check(); | 
|  | const Modulo(314159, 27, 14).check(); | 
|  | const Modulo(314159, -27, 14).check(); | 
|  | const Modulo(-314159, 27, 13).check(); | 
|  | const Modulo(-314159, -27, 13).check(); | 
|  | const Modulo(4294967295, 4294967296, 4294967295).check(); | 
|  | const Modulo(4294967295, -4294967296, 4294967295).check(); | 
|  | const Modulo(-4294967295, 4294967296, 1).check(); | 
|  | const Modulo(-4294967295, -4294967296, 1).check(); | 
|  | const Modulo(9007199254740991, 9007199254740992, 9007199254740991).check(); | 
|  | const Modulo(9007199254740991, -9007199254740992, 9007199254740991).check(); | 
|  | const Modulo(-9007199254740991, 9007199254740992, 1).check(); | 
|  | const Modulo(-9007199254740991, -9007199254740992, 1).check(); | 
|  | const Modulo(2.71828, 3.14159, 2.71828).check(); | 
|  | const Modulo(2.71828, 1, 0.71828).check(); | 
|  | const Modulo(2.71828, -1, 0.71828).check(); | 
|  | const Modulo(-2.71828, 1, 0.28171999999999997).check(); | 
|  | const Modulo(-2.71828, -1, 0.28171999999999997).check(); | 
|  | const Modulo(27.1828, 3.14159, 2.0500800000000012).check(); | 
|  | const Modulo(27.1828, -3.14159, 2.0500800000000012).check(); | 
|  | const Modulo(-27.1828, 3.14159, 1.0915099999999986).check(); | 
|  | const Modulo(-27.1828, -3.14159, 1.0915099999999986).check(); | 
|  | const Modulo(42, double.nan, double.nan).check(); | 
|  | const Modulo(double.nan, 42, double.nan).check(); | 
|  | const Modulo(0, double.nan, double.nan).check(); | 
|  | const Modulo(double.nan, double.nan, double.nan).check(); | 
|  | const Modulo(double.infinity, double.nan, double.nan).check(); | 
|  | const Modulo(double.nan, double.infinity, double.nan).check(); | 
|  | const Modulo(0.0, double.infinity, 0).check(); | 
|  | const Modulo(-0.0, double.infinity, 0).check(); | 
|  | const Modulo(0.0, double.negativeInfinity, 0).check(); | 
|  | const Modulo(-0.0, double.negativeInfinity, 0).check(); | 
|  | const Modulo(42, double.infinity, 42).check(); | 
|  | const Modulo(-42, double.infinity, double.infinity).check(); | 
|  | const Modulo(42, double.negativeInfinity, 42).check(); | 
|  | const Modulo(-42, double.negativeInfinity, double.infinity).check(); | 
|  | const Modulo(double.infinity, 42, double.nan).check(); | 
|  | const Modulo(double.infinity, -42, double.nan).check(); | 
|  | const Modulo(double.negativeInfinity, 42, double.nan).check(); | 
|  | const Modulo(double.negativeInfinity, -42, double.nan).check(); | 
|  | const Modulo(double.infinity, double.infinity, double.nan).check(); | 
|  | const Modulo(double.negativeInfinity, double.infinity, double.nan).check(); | 
|  | const Modulo(double.infinity, double.negativeInfinity, double.nan).check(); | 
|  | const Modulo(double.negativeInfinity, double.negativeInfinity, double.nan) | 
|  | .check(); | 
|  |  | 
|  | const TruncatingDivide(27, 314159, 0).check(); | 
|  | const TruncatingDivide(27, 1, 27).check(); | 
|  | const TruncatingDivide(27, -1, -27).check(); | 
|  | const TruncatingDivide(-27, 1, -27).check(); | 
|  | const TruncatingDivide(-27, -1, 27).check(); | 
|  | const TruncatingDivide(314159, 27, 11635).check(); | 
|  | const TruncatingDivide(314159, -27, -11635).check(); | 
|  | const TruncatingDivide(-314159, 27, -11635).check(); | 
|  | const TruncatingDivide(-314159, -27, 11635).check(); | 
|  | const TruncatingDivide(4294967295, 4294967296, 0).check(); | 
|  | const TruncatingDivide(4294967295, -4294967296, 0).check(); | 
|  | const TruncatingDivide(-4294967295, 4294967296, 0).check(); | 
|  | const TruncatingDivide(-4294967295, -4294967296, 0).check(); | 
|  | const TruncatingDivide(9007199254740991, 9007199254740992, 0).check(); | 
|  | const TruncatingDivide(9007199254740991, -9007199254740992, 0).check(); | 
|  | const TruncatingDivide(-9007199254740991, 9007199254740992, 0).check(); | 
|  | const TruncatingDivide(-9007199254740991, -9007199254740992, 0).check(); | 
|  | const TruncatingDivide(4294967295, 0.5, 8589934590).check(); | 
|  | const TruncatingDivide(4294967295, -0.5, -8589934590).check(); | 
|  | const TruncatingDivide(-4294967295, 0.5, -8589934590).check(); | 
|  | const TruncatingDivide(-4294967295, -0.5, 8589934590).check(); | 
|  | const TruncatingDivide(9007199254740991, 0.5, 18014398509481982).check(); | 
|  | const TruncatingDivide(9007199254740991, -0.5, -18014398509481982).check(); | 
|  | const TruncatingDivide(-9007199254740991, 0.5, -18014398509481982).check(); | 
|  | const TruncatingDivide(-9007199254740991, -0.5, 18014398509481982).check(); | 
|  | const TruncatingDivide(0x8000000000000000, -1, -0x8000000000000000).check(); | 
|  | const TruncatingDivide(0x6000000000000000, 0.5, 0xC000000000000000).check(); | 
|  | const TruncatingDivide(2.71828, 3.14159, 0).check(); | 
|  | const TruncatingDivide(2.71828, 1, 2).check(); | 
|  | const TruncatingDivide(2.71828, -1, -2).check(); | 
|  | const TruncatingDivide(-2.71828, 1, -2).check(); | 
|  | const TruncatingDivide(-2.71828, -1, 2).check(); | 
|  | const TruncatingDivide(27.1828, 3.14159, 8).check(); | 
|  | const TruncatingDivide(27.1828, -3.14159, -8).check(); | 
|  | const TruncatingDivide(-27.1828, 3.14159, -8).check(); | 
|  | const TruncatingDivide(-27.1828, -3.14159, 8).check(); | 
|  | const TruncatingDivide(0.0, double.infinity, 0).check(); | 
|  | const TruncatingDivide(-0.0, double.infinity, 0).check(); | 
|  | const TruncatingDivide(0.0, double.negativeInfinity, 0).check(); | 
|  | const TruncatingDivide(-0.0, double.negativeInfinity, 0).check(); | 
|  | const TruncatingDivide(42, double.infinity, 0).check(); | 
|  | const TruncatingDivide(-42, double.infinity, 0).check(); | 
|  | const TruncatingDivide(42, double.negativeInfinity, 0).check(); | 
|  | const TruncatingDivide(-42, double.negativeInfinity, 0).check(); | 
|  |  | 
|  | const Divide(27, 3, 9).check(); | 
|  | const Divide(27, 1, 27).check(); | 
|  | const Divide(27, -1, -27).check(); | 
|  | const Divide(-27, 1, -27).check(); | 
|  | const Divide(-27, -1, 27).check(); | 
|  | const Divide(0, 1, 0).check(); | 
|  | const Divide(0, -1, -0.0).check(); | 
|  | const Divide(-0.0, 1, -0.0).check(); | 
|  | const Divide(-0.0, -1, 0).check(); | 
|  | const Divide(314159, 27, 11635.518518518518).check(); | 
|  | const Divide(314159, -27, -11635.518518518518).check(); | 
|  | const Divide(-314159, 27, -11635.518518518518).check(); | 
|  | const Divide(-314159, -27, 11635.518518518518).check(); | 
|  | const Divide(4294967295, 4294967296, 0.9999999997671694).check(); | 
|  | const Divide(4294967295, -4294967296, -0.9999999997671694).check(); | 
|  | const Divide(-4294967295, 4294967296, -0.9999999997671694).check(); | 
|  | const Divide(-4294967295, -4294967296, 0.9999999997671694).check(); | 
|  | const Divide(9007199254740991, 9007199254740992, 0.9999999999999999).check(); | 
|  | const Divide(9007199254740991, -9007199254740992, -0.9999999999999999) | 
|  | .check(); | 
|  | const Divide(-9007199254740991, 9007199254740992, -0.9999999999999999) | 
|  | .check(); | 
|  | const Divide(-9007199254740991, -9007199254740992, 0.9999999999999999) | 
|  | .check(); | 
|  | const Divide(4294967296, 4294967295, 1.0000000002328306).check(); | 
|  | const Divide(4294967296, -4294967295, -1.0000000002328306).check(); | 
|  | const Divide(-4294967296, 4294967295, -1.0000000002328306).check(); | 
|  | const Divide(-4294967296, -4294967295, 1.0000000002328306).check(); | 
|  | const Divide(9007199254740992, 9007199254740991, 1.0000000000000002).check(); | 
|  | const Divide(9007199254740992, -9007199254740991, -1.0000000000000002) | 
|  | .check(); | 
|  | const Divide(-9007199254740992, 9007199254740991, -1.0000000000000002) | 
|  | .check(); | 
|  | const Divide(-9007199254740992, -9007199254740991, 1.0000000000000002) | 
|  | .check(); | 
|  | const Divide(4294967295, 0.5, 8589934590).check(); | 
|  | const Divide(4294967295, -0.5, -8589934590).check(); | 
|  | const Divide(-4294967295, 0.5, -8589934590).check(); | 
|  | const Divide(-4294967295, -0.5, 8589934590).check(); | 
|  | const Divide(9007199254740991, 0.5, 18014398509481982).check(); | 
|  | const Divide(9007199254740991, -0.5, -18014398509481982).check(); | 
|  | const Divide(-9007199254740991, 0.5, -18014398509481982).check(); | 
|  | const Divide(-9007199254740991, -0.5, 18014398509481982).check(); | 
|  | const Divide(2.71828, 3.14159, 0.8652561282662601).check(); | 
|  | const Divide(2.71828, 1, 2.71828).check(); | 
|  | const Divide(2.71828, -1, -2.71828).check(); | 
|  | const Divide(-2.71828, 1, -2.71828).check(); | 
|  | const Divide(-2.71828, -1, 2.71828).check(); | 
|  | const Divide(27.1828, 3.14159, 8.652561282662601).check(); | 
|  | const Divide(27.1828, -3.14159, -8.652561282662601).check(); | 
|  | const Divide(-27.1828, 3.14159, -8.652561282662601).check(); | 
|  | const Divide(-27.1828, -3.14159, 8.652561282662601).check(); | 
|  | const Divide(1, 0, double.infinity).check(); | 
|  | const Divide(1, -0.0, double.negativeInfinity).check(); | 
|  | const Divide(-1, 0, double.negativeInfinity).check(); | 
|  | const Divide(-1, -0.0, double.infinity).check(); | 
|  | const Divide(0, 0, double.nan).check(); | 
|  | const Divide(0, -0.0, double.nan).check(); | 
|  | const Divide(-0.0, 0, double.nan).check(); | 
|  | const Divide(-0.0, -0.0, double.nan).check(); | 
|  | const Divide(double.infinity, 0, double.infinity).check(); | 
|  | const Divide(double.infinity, -0.0, double.negativeInfinity).check(); | 
|  | const Divide(double.negativeInfinity, 0, double.negativeInfinity).check(); | 
|  | const Divide(double.negativeInfinity, -0.0, double.infinity).check(); | 
|  | const Divide(double.nan, 0, double.nan).check(); | 
|  | const Divide(double.nan, -0.0, double.nan).check(); | 
|  | const Divide(double.nan, 1, double.nan).check(); | 
|  | const Divide(1, double.nan, double.nan).check(); | 
|  | const Divide(0, double.nan, double.nan).check(); | 
|  | const Divide(double.nan, double.nan, double.nan).check(); | 
|  | const Divide(double.nan, double.infinity, double.nan).check(); | 
|  | const Divide(double.infinity, double.nan, double.nan).check(); | 
|  | const Divide(double.negativeInfinity, double.nan, double.nan).check(); | 
|  | const Divide(double.infinity, 1, double.infinity).check(); | 
|  | const Divide(double.infinity, -1, double.negativeInfinity).check(); | 
|  | const Divide(double.negativeInfinity, 1, double.negativeInfinity).check(); | 
|  | const Divide(double.negativeInfinity, -1, double.infinity).check(); | 
|  | const Divide(0, double.infinity, 0).check(); | 
|  | const Divide(0, double.negativeInfinity, -0.0).check(); | 
|  | const Divide(-0.0, double.infinity, -0.0).check(); | 
|  | const Divide(-0.0, double.negativeInfinity, 0).check(); | 
|  | const Divide(1, double.infinity, 0).check(); | 
|  | const Divide(1, double.negativeInfinity, -0.0).check(); | 
|  | const Divide(-1, double.infinity, -0.0).check(); | 
|  | const Divide(-1, double.negativeInfinity, 0).check(); | 
|  | const Divide(double.infinity, double.infinity, double.nan).check(); | 
|  | const Divide(double.minPositive, double.maxFinite, 0).check(); | 
|  | const Divide(double.minPositive, -double.maxFinite, -0.0).check(); | 
|  | const Divide(-double.minPositive, double.maxFinite, -0.0).check(); | 
|  | const Divide(-double.minPositive, -double.maxFinite, 0).check(); | 
|  | const Divide(double.maxFinite, double.minPositive, double.infinity).check(); | 
|  | const Divide(double.maxFinite, -double.minPositive, double.negativeInfinity) | 
|  | .check(); | 
|  | const Divide(-double.maxFinite, double.minPositive, double.negativeInfinity) | 
|  | .check(); | 
|  | const Divide(-double.maxFinite, -double.minPositive, double.infinity).check(); | 
|  |  | 
|  | const Add("", "", "").check(); | 
|  | const Add("foo", "", "foo").check(); | 
|  | const Add("", "bar", "bar").check(); | 
|  | const Add("foo", "bar", "foobar").check(); | 
|  | const Add(314159, 271828, 585987).check(); | 
|  | const Add(314159, -271828, 42331).check(); | 
|  | const Add(-314159, 271828, -42331).check(); | 
|  | const Add(-314159, -271828, -585987).check(); | 
|  | const Add(0, 0, 0).check(); | 
|  | const Add(0, 42, 42).check(); | 
|  | const Add(0, -42, -42).check(); | 
|  | const Add(42, 0, 42).check(); | 
|  | const Add(42, 42, 84).check(); | 
|  | const Add(42, -42, 0).check(); | 
|  | const Add(-42, 0, -42).check(); | 
|  | const Add(-42, 42, 0).check(); | 
|  | const Add(-42, -42, -84).check(); | 
|  | const Add(4294967295, 1, 4294967296).check(); | 
|  | const Add(4294967296, 1, 4294967297).check(); | 
|  | const Add(9007199254740991, 1, 9007199254740992).check(); | 
|  | const Add(9007199254740992, 1, 9007199254740992).check(); | 
|  | const Add(9007199254740992, 100, 9007199254741092).check(); | 
|  | const Add(-4294967295, -1, -4294967296).check(); | 
|  | const Add(-4294967296, -1, -4294967297).check(); | 
|  | const Add(-9007199254740991, -1, -9007199254740992).check(); | 
|  | const Add(-9007199254740992, -1, -9007199254740992).check(); | 
|  | const Add(-9007199254740992, -100, -9007199254741092).check(); | 
|  | const Add(4.2, 1.5, 5.7).check(); | 
|  | const Add(4.2, -1.5, 2.7).check(); | 
|  | const Add(-4.2, 1.5, -2.7).check(); | 
|  | const Add(-4.2, -1.5, -5.7).check(); | 
|  | const Add(1.5, 0, 1.5).check(); | 
|  | const Add(0, 1.5, 1.5).check(); | 
|  | const Add(1.5, -1.5, 0.0).check(); | 
|  | const Add(-1.5, 1.5, 0.0).check(); | 
|  | const Add(0.0, 0.0, 0.0).check(); | 
|  | const Add(0.0, -0.0, 0.0).check(); | 
|  | const Add(-0.0, 0.0, 0.0).check(); | 
|  | const Add(-0.0, -0.0, -0.0).check(); | 
|  | const Add(double.maxFinite, double.maxFinite, double.infinity).check(); | 
|  | const Add(-double.maxFinite, -double.maxFinite, double.negativeInfinity) | 
|  | .check(); | 
|  | const Add(1.5, double.nan, double.nan).check(); | 
|  | const Add(double.nan, 1.5, double.nan).check(); | 
|  | const Add(double.nan, double.nan, double.nan).check(); | 
|  | const Add(double.nan, double.infinity, double.nan).check(); | 
|  | const Add(double.nan, double.negativeInfinity, double.nan).check(); | 
|  | const Add(double.infinity, double.nan, double.nan).check(); | 
|  | const Add(double.negativeInfinity, double.nan, double.nan).check(); | 
|  | const Add(double.infinity, -double.maxFinite, double.infinity).check(); | 
|  | const Add(double.infinity, double.maxFinite, double.infinity).check(); | 
|  | const Add(double.negativeInfinity, -double.maxFinite, double.negativeInfinity) | 
|  | .check(); | 
|  | const Add(double.negativeInfinity, double.maxFinite, double.negativeInfinity) | 
|  | .check(); | 
|  | const Add(1.5, double.negativeInfinity, double.negativeInfinity).check(); | 
|  | const Add(1.5, double.infinity, double.infinity).check(); | 
|  | const Add(double.infinity, double.infinity, double.infinity).check(); | 
|  | const Add(double.infinity, double.negativeInfinity, double.nan).check(); | 
|  | const Add(double.negativeInfinity, double.infinity, double.nan).check(); | 
|  | const Add(double.negativeInfinity, double.negativeInfinity, | 
|  | double.negativeInfinity) | 
|  | .check(); | 
|  | const Add(double.minPositive, -double.minPositive, 0.0).check(); | 
|  | const Add(-double.minPositive, double.minPositive, 0.0).check(); | 
|  |  | 
|  | const Less(double.nan, double.nan, false).check(); | 
|  | const Less(double.nan, double.infinity, false).check(); | 
|  | const Less(double.infinity, double.nan, false).check(); | 
|  | const Less(double.nan, double.maxFinite, false).check(); | 
|  | const Less(double.maxFinite, double.nan, false).check(); | 
|  | const Less(double.nan, -double.maxFinite, false).check(); | 
|  | const Less(-double.maxFinite, double.nan, false).check(); | 
|  | const Less(double.nan, double.negativeInfinity, false).check(); | 
|  | const Less(double.negativeInfinity, double.nan, false).check(); | 
|  | const Less(double.negativeInfinity, double.negativeInfinity, false).check(); | 
|  | const Less(double.negativeInfinity, -double.maxFinite, true).check(); | 
|  | const Less(-double.maxFinite, double.negativeInfinity, false).check(); | 
|  | const Less(-double.maxFinite, -double.maxFinite, false).check(); | 
|  | const Less(-double.maxFinite, -9007199254740992, true).check(); | 
|  | const Less(-9007199254740992, -double.maxFinite, false).check(); | 
|  | const Less(-9007199254740992, -9007199254740992, false).check(); | 
|  | const Less(-9007199254740992, -4294967296, true).check(); | 
|  | const Less(-4294967296, -9007199254740992, false).check(); | 
|  | const Less(-4294967296, -4294967296, false).check(); | 
|  | const Less(-4294967296, -42, true).check(); | 
|  | const Less(-42, -4294967296, false).check(); | 
|  | const Less(-42, -42, false).check(); | 
|  | const Less(-42, -42.0, false).check(); | 
|  | const Less(-42.0, -42, false).check(); | 
|  | const Less(-42.0, -42.0, false).check(); | 
|  | const Less(-42, -3.14, true).check(); | 
|  | const Less(-3.14, -42, false).check(); | 
|  | const Less(-3.14, -3.14, false).check(); | 
|  | const Less(-3.14, -double.minPositive, true).check(); | 
|  | const Less(-double.minPositive, -3.14, false).check(); | 
|  | const Less(-double.minPositive, -double.minPositive, false).check(); | 
|  | const Less(-double.minPositive, -0.0, true).check(); | 
|  | const Less(-0.0, -double.minPositive, false).check(); | 
|  | const Less(-0.0, -0.0, false).check(); | 
|  | const Less(0, 0, false).check(); | 
|  | const Less(0.0, 0.0, false).check(); | 
|  | const Less(-0.0, 0, false).check(); | 
|  | const Less(0, -0.0, false).check(); | 
|  | const Less(-0.0, 0.0, false).check(); | 
|  | const Less(0.0, -0.0, false).check(); | 
|  | const Less(0, 0.0, false).check(); | 
|  | const Less(0.0, 0, false).check(); | 
|  | const Less(0.0, double.minPositive, true).check(); | 
|  | const Less(double.minPositive, 0.0, false).check(); | 
|  | const Less(double.minPositive, double.minPositive, false).check(); | 
|  | const Less(double.minPositive, 3.14, true).check(); | 
|  | const Less(3.14, double.minPositive, false).check(); | 
|  | const Less(3.14, 3.14, false).check(); | 
|  | const Less(3.14, 42, true).check(); | 
|  | const Less(42, 3.14, false).check(); | 
|  | const Less(42.0, 42.0, false).check(); | 
|  | const Less(42, 42.0, false).check(); | 
|  | const Less(42.0, 42, false).check(); | 
|  | const Less(42, 42, false).check(); | 
|  | const Less(42, 4294967296, true).check(); | 
|  | const Less(4294967296, 42, false).check(); | 
|  | const Less(4294967296, 4294967296, false).check(); | 
|  | const Less(4294967296, 9007199254740992, true).check(); | 
|  | const Less(9007199254740992, 4294967296, false).check(); | 
|  | const Less(9007199254740992, 9007199254740992, false).check(); | 
|  | const Less(9007199254740992, double.maxFinite, true).check(); | 
|  | const Less(double.maxFinite, 9007199254740992, false).check(); | 
|  | const Less(double.maxFinite, double.maxFinite, false).check(); | 
|  | const Less(double.maxFinite, double.infinity, true).check(); | 
|  | const Less(double.infinity, double.maxFinite, false).check(); | 
|  | const Less(double.infinity, double.infinity, false).check(); | 
|  | const Less(0x7fffffff00000000, 0x8000000000000000, true).check(); | 
|  | const Less(0x8000000000000000, 0x7fffffff00000000, false).check(); | 
|  |  | 
|  | const LessEqual(double.nan, double.nan, false).check(); | 
|  | const LessEqual(double.nan, double.infinity, false).check(); | 
|  | const LessEqual(double.infinity, double.nan, false).check(); | 
|  | const LessEqual(double.nan, double.maxFinite, false).check(); | 
|  | const LessEqual(double.maxFinite, double.nan, false).check(); | 
|  | const LessEqual(double.nan, -double.maxFinite, false).check(); | 
|  | const LessEqual(-double.maxFinite, double.nan, false).check(); | 
|  | const LessEqual(double.nan, double.negativeInfinity, false).check(); | 
|  | const LessEqual(double.negativeInfinity, double.nan, false).check(); | 
|  | const LessEqual(double.negativeInfinity, double.negativeInfinity, true) | 
|  | .check(); | 
|  | const LessEqual(double.negativeInfinity, -double.maxFinite, true).check(); | 
|  | const LessEqual(-double.maxFinite, double.negativeInfinity, false).check(); | 
|  | const LessEqual(-double.maxFinite, -double.maxFinite, true).check(); | 
|  | const LessEqual(-double.maxFinite, -9007199254740992, true).check(); | 
|  | const LessEqual(-9007199254740992, -double.maxFinite, false).check(); | 
|  | const LessEqual(-9007199254740992, -9007199254740992, true).check(); | 
|  | const LessEqual(-9007199254740992, -4294967296, true).check(); | 
|  | const LessEqual(-4294967296, -9007199254740992, false).check(); | 
|  | const LessEqual(-4294967296, -4294967296, true).check(); | 
|  | const LessEqual(-4294967296, -42, true).check(); | 
|  | const LessEqual(-42, -4294967296, false).check(); | 
|  | const LessEqual(-42, -42, true).check(); | 
|  | const LessEqual(-42, -42.0, true).check(); | 
|  | const LessEqual(-42.0, -42, true).check(); | 
|  | const LessEqual(-42.0, -42.0, true).check(); | 
|  | const LessEqual(-42, -3.14, true).check(); | 
|  | const LessEqual(-3.14, -42, false).check(); | 
|  | const LessEqual(-3.14, -3.14, true).check(); | 
|  | const LessEqual(-3.14, -double.minPositive, true).check(); | 
|  | const LessEqual(-double.minPositive, -3.14, false).check(); | 
|  | const LessEqual(-double.minPositive, -double.minPositive, true).check(); | 
|  | const LessEqual(-double.minPositive, -0.0, true).check(); | 
|  | const LessEqual(-0.0, -double.minPositive, false).check(); | 
|  | const LessEqual(-0.0, -0.0, true).check(); | 
|  | const LessEqual(0, 0, true).check(); | 
|  | const LessEqual(0.0, 0.0, true).check(); | 
|  | const LessEqual(-0.0, 0, true).check(); | 
|  | const LessEqual(0, -0.0, true).check(); | 
|  | const LessEqual(-0.0, 0.0, true).check(); | 
|  | const LessEqual(0.0, -0.0, true).check(); | 
|  | const LessEqual(0, 0.0, true).check(); | 
|  | const LessEqual(0.0, 0, true).check(); | 
|  | const LessEqual(0.0, double.minPositive, true).check(); | 
|  | const LessEqual(double.minPositive, 0.0, false).check(); | 
|  | const LessEqual(double.minPositive, double.minPositive, true).check(); | 
|  | const LessEqual(double.minPositive, 3.14, true).check(); | 
|  | const LessEqual(3.14, double.minPositive, false).check(); | 
|  | const LessEqual(3.14, 3.14, true).check(); | 
|  | const LessEqual(3.14, 42, true).check(); | 
|  | const LessEqual(42, 3.14, false).check(); | 
|  | const LessEqual(42.0, 42.0, true).check(); | 
|  | const LessEqual(42, 42.0, true).check(); | 
|  | const LessEqual(42.0, 42, true).check(); | 
|  | const LessEqual(42, 42, true).check(); | 
|  | const LessEqual(42, 4294967296, true).check(); | 
|  | const LessEqual(4294967296, 42, false).check(); | 
|  | const LessEqual(4294967296, 4294967296, true).check(); | 
|  | const LessEqual(4294967296, 9007199254740992, true).check(); | 
|  | const LessEqual(9007199254740992, 4294967296, false).check(); | 
|  | const LessEqual(9007199254740992, 9007199254740992, true).check(); | 
|  | const LessEqual(9007199254740992, double.maxFinite, true).check(); | 
|  | const LessEqual(double.maxFinite, 9007199254740992, false).check(); | 
|  | const LessEqual(double.maxFinite, double.maxFinite, true).check(); | 
|  | const LessEqual(double.maxFinite, double.infinity, true).check(); | 
|  | const LessEqual(double.infinity, double.maxFinite, false).check(); | 
|  | const LessEqual(double.infinity, double.infinity, true).check(); | 
|  | const LessEqual(0x7fffffff00000000, 0x8000000000000000, true).check(); | 
|  | const LessEqual(0x8000000000000000, 0x7fffffff00000000, false).check(); | 
|  |  | 
|  | const Greater(double.nan, double.nan, false).check(); | 
|  | const Greater(double.nan, double.infinity, false).check(); | 
|  | const Greater(double.infinity, double.nan, false).check(); | 
|  | const Greater(double.nan, double.maxFinite, false).check(); | 
|  | const Greater(double.maxFinite, double.nan, false).check(); | 
|  | const Greater(double.nan, -double.maxFinite, false).check(); | 
|  | const Greater(-double.maxFinite, double.nan, false).check(); | 
|  | const Greater(double.nan, double.negativeInfinity, false).check(); | 
|  | const Greater(double.negativeInfinity, double.nan, false).check(); | 
|  | const Greater(double.negativeInfinity, double.negativeInfinity, false) | 
|  | .check(); | 
|  | const Greater(double.negativeInfinity, -double.maxFinite, false).check(); | 
|  | const Greater(-double.maxFinite, double.negativeInfinity, true).check(); | 
|  | const Greater(-double.maxFinite, -double.maxFinite, false).check(); | 
|  | const Greater(-double.maxFinite, -9007199254740992, false).check(); | 
|  | const Greater(-9007199254740992, -double.maxFinite, true).check(); | 
|  | const Greater(-9007199254740992, -9007199254740992, false).check(); | 
|  | const Greater(-9007199254740992, -4294967296, false).check(); | 
|  | const Greater(-4294967296, -9007199254740992, true).check(); | 
|  | const Greater(-4294967296, -4294967296, false).check(); | 
|  | const Greater(-4294967296, -42, false).check(); | 
|  | const Greater(-42, -4294967296, true).check(); | 
|  | const Greater(-42, -42, false).check(); | 
|  | const Greater(-42, -42.0, false).check(); | 
|  | const Greater(-42.0, -42, false).check(); | 
|  | const Greater(-42.0, -42.0, false).check(); | 
|  | const Greater(-42, -3.14, false).check(); | 
|  | const Greater(-3.14, -42, true).check(); | 
|  | const Greater(-3.14, -3.14, false).check(); | 
|  | const Greater(-3.14, -double.minPositive, false).check(); | 
|  | const Greater(-double.minPositive, -3.14, true).check(); | 
|  | const Greater(-double.minPositive, -double.minPositive, false).check(); | 
|  | const Greater(-double.minPositive, -0.0, false).check(); | 
|  | const Greater(-0.0, -double.minPositive, true).check(); | 
|  | const Greater(-0.0, -0.0, false).check(); | 
|  | const Greater(0, 0, false).check(); | 
|  | const Greater(0.0, 0.0, false).check(); | 
|  | const Greater(-0.0, 0, false).check(); | 
|  | const Greater(0, -0.0, false).check(); | 
|  | const Greater(-0.0, 0.0, false).check(); | 
|  | const Greater(0.0, -0.0, false).check(); | 
|  | const Greater(0, 0.0, false).check(); | 
|  | const Greater(0.0, 0, false).check(); | 
|  | const Greater(0.0, double.minPositive, false).check(); | 
|  | const Greater(double.minPositive, 0.0, true).check(); | 
|  | const Greater(double.minPositive, double.minPositive, false).check(); | 
|  | const Greater(double.minPositive, 3.14, false).check(); | 
|  | const Greater(3.14, double.minPositive, true).check(); | 
|  | const Greater(3.14, 3.14, false).check(); | 
|  | const Greater(3.14, 42, false).check(); | 
|  | const Greater(42, 3.14, true).check(); | 
|  | const Greater(42.0, 42.0, false).check(); | 
|  | const Greater(42, 42.0, false).check(); | 
|  | const Greater(42.0, 42, false).check(); | 
|  | const Greater(42, 42, false).check(); | 
|  | const Greater(42, 4294967296, false).check(); | 
|  | const Greater(4294967296, 42, true).check(); | 
|  | const Greater(4294967296, 4294967296, false).check(); | 
|  | const Greater(4294967296, 9007199254740992, false).check(); | 
|  | const Greater(9007199254740992, 4294967296, true).check(); | 
|  | const Greater(9007199254740992, 9007199254740992, false).check(); | 
|  | const Greater(9007199254740992, double.maxFinite, false).check(); | 
|  | const Greater(double.maxFinite, 9007199254740992, true).check(); | 
|  | const Greater(double.maxFinite, double.maxFinite, false).check(); | 
|  | const Greater(double.maxFinite, double.infinity, false).check(); | 
|  | const Greater(double.infinity, double.maxFinite, true).check(); | 
|  | const Greater(double.infinity, double.infinity, false).check(); | 
|  | const Greater(0x7fffffff00000000, 0x8000000000000000, false).check(); | 
|  | const Greater(0x8000000000000000, 0x7fffffff00000000, true).check(); | 
|  |  | 
|  | const GreaterEqual(double.nan, double.nan, false).check(); | 
|  | const GreaterEqual(double.nan, double.infinity, false).check(); | 
|  | const GreaterEqual(double.infinity, double.nan, false).check(); | 
|  | const GreaterEqual(double.nan, double.maxFinite, false).check(); | 
|  | const GreaterEqual(double.maxFinite, double.nan, false).check(); | 
|  | const GreaterEqual(double.nan, -double.maxFinite, false).check(); | 
|  | const GreaterEqual(-double.maxFinite, double.nan, false).check(); | 
|  | const GreaterEqual(double.nan, double.negativeInfinity, false).check(); | 
|  | const GreaterEqual(double.negativeInfinity, double.nan, false).check(); | 
|  | const GreaterEqual(double.negativeInfinity, double.negativeInfinity, true) | 
|  | .check(); | 
|  | const GreaterEqual(double.negativeInfinity, -double.maxFinite, false).check(); | 
|  | const GreaterEqual(-double.maxFinite, double.negativeInfinity, true).check(); | 
|  | const GreaterEqual(-double.maxFinite, -double.maxFinite, true).check(); | 
|  | const GreaterEqual(-double.maxFinite, -9007199254740992, false).check(); | 
|  | const GreaterEqual(-9007199254740992, -double.maxFinite, true).check(); | 
|  | const GreaterEqual(-9007199254740992, -9007199254740992, true).check(); | 
|  | const GreaterEqual(-9007199254740992, -4294967296, false).check(); | 
|  | const GreaterEqual(-4294967296, -9007199254740992, true).check(); | 
|  | const GreaterEqual(-4294967296, -4294967296, true).check(); | 
|  | const GreaterEqual(-4294967296, -42, false).check(); | 
|  | const GreaterEqual(-42, -4294967296, true).check(); | 
|  | const GreaterEqual(-42, -42, true).check(); | 
|  | const GreaterEqual(-42, -42.0, true).check(); | 
|  | const GreaterEqual(-42.0, -42, true).check(); | 
|  | const GreaterEqual(-42.0, -42.0, true).check(); | 
|  | const GreaterEqual(-42, -3.14, false).check(); | 
|  | const GreaterEqual(-3.14, -42, true).check(); | 
|  | const GreaterEqual(-3.14, -3.14, true).check(); | 
|  | const GreaterEqual(-3.14, -double.minPositive, false).check(); | 
|  | const GreaterEqual(-double.minPositive, -3.14, true).check(); | 
|  | const GreaterEqual(-double.minPositive, -double.minPositive, true).check(); | 
|  | const GreaterEqual(-double.minPositive, -0.0, false).check(); | 
|  | const GreaterEqual(-0.0, -double.minPositive, true).check(); | 
|  | const GreaterEqual(-0.0, -0.0, true).check(); | 
|  | const GreaterEqual(0, 0, true).check(); | 
|  | const GreaterEqual(0.0, 0.0, true).check(); | 
|  | const GreaterEqual(-0.0, 0, true).check(); | 
|  | const GreaterEqual(0, -0.0, true).check(); | 
|  | const GreaterEqual(-0.0, 0.0, true).check(); | 
|  | const GreaterEqual(0.0, -0.0, true).check(); | 
|  | const GreaterEqual(0, 0.0, true).check(); | 
|  | const GreaterEqual(0.0, 0, true).check(); | 
|  | const GreaterEqual(0.0, double.minPositive, false).check(); | 
|  | const GreaterEqual(double.minPositive, 0.0, true).check(); | 
|  | const GreaterEqual(double.minPositive, double.minPositive, true).check(); | 
|  | const GreaterEqual(double.minPositive, 3.14, false).check(); | 
|  | const GreaterEqual(3.14, double.minPositive, true).check(); | 
|  | const GreaterEqual(3.14, 3.14, true).check(); | 
|  | const GreaterEqual(3.14, 42, false).check(); | 
|  | const GreaterEqual(42, 3.14, true).check(); | 
|  | const GreaterEqual(42.0, 42.0, true).check(); | 
|  | const GreaterEqual(42, 42.0, true).check(); | 
|  | const GreaterEqual(42.0, 42, true).check(); | 
|  | const GreaterEqual(42, 42, true).check(); | 
|  | const GreaterEqual(42, 4294967296, false).check(); | 
|  | const GreaterEqual(4294967296, 42, true).check(); | 
|  | const GreaterEqual(4294967296, 4294967296, true).check(); | 
|  | const GreaterEqual(4294967296, 9007199254740992, false).check(); | 
|  | const GreaterEqual(9007199254740992, 4294967296, true).check(); | 
|  | const GreaterEqual(9007199254740992, 9007199254740992, true).check(); | 
|  | const GreaterEqual(9007199254740992, double.maxFinite, false).check(); | 
|  | const GreaterEqual(double.maxFinite, 9007199254740992, true).check(); | 
|  | const GreaterEqual(double.maxFinite, double.maxFinite, true).check(); | 
|  | const GreaterEqual(double.maxFinite, double.infinity, false).check(); | 
|  | const GreaterEqual(double.infinity, double.maxFinite, true).check(); | 
|  | const GreaterEqual(double.infinity, double.infinity, true).check(); | 
|  | const GreaterEqual(0x7fffffff00000000, 0x8000000000000000, false).check(); | 
|  | const GreaterEqual(0x8000000000000000, 0x7fffffff00000000, true).check(); | 
|  |  | 
|  | const Equals(null, null, true).check(); | 
|  | const Equals(null, "", false).check(); | 
|  | const Equals("", null, false).check(); | 
|  | const Equals("", "", true).check(); | 
|  | const Equals(true, true, true).check(); | 
|  | const Equals(false, false, true).check(); | 
|  | const Equals(true, false, false).check(); | 
|  | const Equals(false, true, false).check(); | 
|  | const Equals(0, false, false).check(); | 
|  | const Equals(true, 1, false).check(); | 
|  | const Equals(double.nan, double.nan, false).check(); | 
|  | const Equals(0, 0, true).check(); | 
|  | const Equals(0.0, 0.0, true).check(); | 
|  | const Equals(-0.0, -0.0, true).check(); | 
|  | const Equals(0, 0.0, true).check(); | 
|  | const Equals(0.0, 0, true).check(); | 
|  | const Equals(0, -0.0, true).check(); | 
|  | const Equals(-0.0, 0, true).check(); | 
|  | const Equals(0.0, -0.0, true).check(); | 
|  | const Equals(-0.0, 0.0, true).check(); | 
|  | const Equals(1, 1, true).check(); | 
|  | const Equals(1.0, 1.0, true).check(); | 
|  | const Equals(1, 1.0, true).check(); | 
|  | const Equals(1.0, 1, true).check(); | 
|  | const Equals(double.infinity, double.infinity, true).check(); | 
|  | const Equals(double.infinity, double.negativeInfinity, false).check(); | 
|  | const Equals(double.negativeInfinity, double.infinity, false).check(); | 
|  | const Equals(double.negativeInfinity, double.negativeInfinity, true).check(); | 
|  | const Equals(0x8000000000000000, 0x8000000000000000, true).check(); | 
|  | const Equals(0x8000000000000000, -9223372036854775808, false).check(); | 
|  |  | 
|  | const Identity(null, null, true).check(); | 
|  | const Identity(null, "", false).check(); | 
|  | const Identity("", null, false).check(); | 
|  | const Identity("", "", true).check(); | 
|  | const Identity(true, true, true).check(); | 
|  | const Identity(false, false, true).check(); | 
|  | const Identity(true, false, false).check(); | 
|  | const Identity(false, true, false).check(); | 
|  | const Identity(0, false, false).check(); | 
|  | const Identity(true, 1, false).check(); | 
|  | const Identity(double.nan, double.nan, false).check(); | 
|  | const Identity(0, 0, true).check(); | 
|  | const Identity(0.0, 0.0, true).check(); | 
|  | const Identity(-0.0, -0.0, true).check(); | 
|  | const Identity(0, 0.0, true).check(); | 
|  | const Identity(0.0, 0, true).check(); | 
|  | const Identity(0, -0.0, true).check(); | 
|  | const Identity(-0.0, 0, true).check(); | 
|  | const Identity(0.0, -0.0, true).check(); | 
|  | const Identity(-0.0, 0.0, true).check(); | 
|  | const Identity(1, 1, true).check(); | 
|  | const Identity(1.0, 1.0, true).check(); | 
|  | const Identity(1, 1.0, true).check(); | 
|  | const Identity(1.0, 1, true).check(); | 
|  | const Identity(double.infinity, double.infinity, true).check(); | 
|  | const Identity(double.infinity, double.negativeInfinity, false).check(); | 
|  | const Identity(double.negativeInfinity, double.infinity, false).check(); | 
|  | const Identity(double.negativeInfinity, double.negativeInfinity, true) | 
|  | .check(); | 
|  | const Identity(0x8000000000000000, 0x8000000000000000, true).check(); | 
|  | const Identity(0x8000000000000000, -9223372036854775808, false).check(); | 
|  |  | 
|  | const IfNull(null, null, null).check(); | 
|  | const IfNull(null, 1, 1).check(); | 
|  | const IfNull("foo", 1, "foo").check(); | 
|  | const IfNull("foo", null, "foo").check(); | 
|  | } | 
|  |  | 
|  | /// Wraps [Expect.equals] to accommodate JS equality semantics. | 
|  | /// | 
|  | /// Naively using [Expect.equals] causes JS values to be compared with `===`. | 
|  | /// This can yield some unintended results: | 
|  | /// | 
|  | /// * Since `NaN === NaN` is `false`, [Expect.equals] will throw even if both | 
|  | ///   values are `NaN`. Therefore, we check for `NaN` specifically. | 
|  | /// * Since `0.0 === -0.0` is `true`, [Expect.equals] will fail to throw if one | 
|  | ///   constant evaluation results in `0` or `0.0` and the other results in | 
|  | ///   `-0.0`. Therefore, we additionally check that both values have the same | 
|  | ///   sign in this case. | 
|  | void jsEquals(expected, actual, [String reason = ""]) { | 
|  | if (expected is num && actual is num) { | 
|  | if (expected.isNaN && actual.isNaN) return; | 
|  | } | 
|  |  | 
|  | Expect.equals(expected, actual, reason); | 
|  |  | 
|  | if (expected == 0 && actual == 0) { | 
|  | Expect.equals( | 
|  | expected.isNegative, | 
|  | actual.isNegative, | 
|  | (reason == null ? "" : "$reason ") + | 
|  | "${expected.toString()} and " | 
|  | "${actual.toString()} have different signs."); | 
|  | } | 
|  | } | 
|  |  | 
|  | abstract class TestOp { | 
|  | final expected; | 
|  | final result; | 
|  |  | 
|  | const TestOp(this.expected, this.result); | 
|  |  | 
|  | @pragma('dart2js:noInline') | 
|  | checkAll(evalResult) { | 
|  | jsEquals(expected, result, | 
|  | "Frontend constant evaluation does not yield expected value."); | 
|  | jsEquals(expected, evalResult, | 
|  | "Backend constant evaluation does not yield expected value."); | 
|  | jsEquals(expected, eval(), "eval() does not yield expected value."); | 
|  | } | 
|  |  | 
|  | eval(); | 
|  | } | 
|  |  | 
|  | class BitNot extends TestOp { | 
|  | final arg; | 
|  |  | 
|  | const BitNot(this.arg, expected) : super(expected, ~arg); | 
|  |  | 
|  | @pragma('dart2js:tryInline') | 
|  | check() => checkAll(eval()); | 
|  |  | 
|  | @override | 
|  | @pragma('dart2js:tryInline') | 
|  | eval() => ~arg; | 
|  | } | 
|  |  | 
|  | class Negate extends TestOp { | 
|  | final arg; | 
|  |  | 
|  | const Negate(this.arg, expected) : super(expected, -arg); | 
|  |  | 
|  | @pragma('dart2js:tryInline') | 
|  | check() => checkAll(eval()); | 
|  |  | 
|  | @override | 
|  | @pragma('dart2js:tryInline') | 
|  | eval() => -arg; | 
|  | } | 
|  |  | 
|  | class Not extends TestOp { | 
|  | final arg; | 
|  |  | 
|  | const Not(this.arg, expected) : super(expected, !arg); | 
|  |  | 
|  | @pragma('dart2js:tryInline') | 
|  | check() => checkAll(eval()); | 
|  |  | 
|  | @override | 
|  | @pragma('dart2js:tryInline') | 
|  | eval() => !arg; | 
|  | } | 
|  |  | 
|  | class BitAnd extends TestOp { | 
|  | final arg1; | 
|  | final arg2; | 
|  |  | 
|  | const BitAnd(this.arg1, this.arg2, expected) : super(expected, arg1 & arg2); | 
|  |  | 
|  | @pragma('dart2js:tryInline') | 
|  | check() => checkAll(eval()); | 
|  |  | 
|  | @override | 
|  | @pragma('dart2js:tryInline') | 
|  | eval() => arg1 & arg2; | 
|  | } | 
|  |  | 
|  | class BitOr extends TestOp { | 
|  | final arg1; | 
|  | final arg2; | 
|  |  | 
|  | const BitOr(this.arg1, this.arg2, expected) : super(expected, arg1 | arg2); | 
|  |  | 
|  | @pragma('dart2js:tryInline') | 
|  | check() => checkAll(eval()); | 
|  |  | 
|  | @override | 
|  | @pragma('dart2js:tryInline') | 
|  | eval() => arg1 | arg2; | 
|  | } | 
|  |  | 
|  | class BitXor extends TestOp { | 
|  | final arg1; | 
|  | final arg2; | 
|  |  | 
|  | const BitXor(this.arg1, this.arg2, expected) : super(expected, arg1 ^ arg2); | 
|  |  | 
|  | @pragma('dart2js:tryInline') | 
|  | check() => checkAll(eval()); | 
|  |  | 
|  | @override | 
|  | @pragma('dart2js:tryInline') | 
|  | eval() => arg1 ^ arg2; | 
|  | } | 
|  |  | 
|  | class ShiftLeft extends TestOp { | 
|  | final arg1; | 
|  | final arg2; | 
|  |  | 
|  | const ShiftLeft(this.arg1, this.arg2, expected) | 
|  | : super(expected, arg1 << arg2); | 
|  |  | 
|  | @pragma('dart2js:tryInline') | 
|  | check() => checkAll(eval()); | 
|  |  | 
|  | @override | 
|  | @pragma('dart2js:tryInline') | 
|  | eval() => arg1 << arg2; | 
|  | } | 
|  |  | 
|  | class ShiftRight extends TestOp { | 
|  | final arg1; | 
|  | final arg2; | 
|  |  | 
|  | const ShiftRight(this.arg1, this.arg2, expected) | 
|  | : super(expected, arg1 >> arg2); | 
|  |  | 
|  | @pragma('dart2js:tryInline') | 
|  | check() => checkAll(eval()); | 
|  |  | 
|  | @override | 
|  | @pragma('dart2js:tryInline') | 
|  | eval() => arg1 >> arg2; | 
|  | } | 
|  |  | 
|  | class BooleanAnd extends TestOp { | 
|  | final arg1; | 
|  | final arg2; | 
|  |  | 
|  | const BooleanAnd(this.arg1, this.arg2, expected) | 
|  | : super(expected, arg1 && arg2); | 
|  |  | 
|  | @pragma('dart2js:tryInline') | 
|  | check() => checkAll(eval()); | 
|  |  | 
|  | @override | 
|  | @pragma('dart2js:tryInline') | 
|  | eval() => arg1 && arg2; | 
|  | } | 
|  |  | 
|  | class BooleanOr extends TestOp { | 
|  | final arg1; | 
|  | final arg2; | 
|  |  | 
|  | const BooleanOr(this.arg1, this.arg2, expected) | 
|  | : super(expected, arg1 || arg2); | 
|  |  | 
|  | @pragma('dart2js:tryInline') | 
|  | check() => checkAll(eval()); | 
|  |  | 
|  | @override | 
|  | @pragma('dart2js:tryInline') | 
|  | eval() => arg1 || arg2; | 
|  | } | 
|  |  | 
|  | class Subtract extends TestOp { | 
|  | final arg1; | 
|  | final arg2; | 
|  |  | 
|  | const Subtract(this.arg1, this.arg2, expected) : super(expected, arg1 - arg2); | 
|  |  | 
|  | @pragma('dart2js:tryInline') | 
|  | check() => checkAll(eval()); | 
|  |  | 
|  | @override | 
|  | @pragma('dart2js:tryInline') | 
|  | eval() => arg1 - arg2; | 
|  | } | 
|  |  | 
|  | class Multiply extends TestOp { | 
|  | final arg1; | 
|  | final arg2; | 
|  |  | 
|  | const Multiply(this.arg1, this.arg2, expected) : super(expected, arg1 * arg2); | 
|  |  | 
|  | @pragma('dart2js:tryInline') | 
|  | check() => checkAll(eval()); | 
|  |  | 
|  | @override | 
|  | @pragma('dart2js:tryInline') | 
|  | eval() => arg1 * arg2; | 
|  | } | 
|  |  | 
|  | class Modulo extends TestOp { | 
|  | final arg1; | 
|  | final arg2; | 
|  |  | 
|  | const Modulo(this.arg1, this.arg2, expected) : super(expected, arg1 % arg2); | 
|  |  | 
|  | @pragma('dart2js:tryInline') | 
|  | check() => checkAll(eval()); | 
|  |  | 
|  | @override | 
|  | @pragma('dart2js:tryInline') | 
|  | eval() => arg1 % arg2; | 
|  | } | 
|  |  | 
|  | class TruncatingDivide extends TestOp { | 
|  | final arg1; | 
|  | final arg2; | 
|  |  | 
|  | const TruncatingDivide(this.arg1, this.arg2, expected) | 
|  | : super(expected, arg1 ~/ arg2); | 
|  |  | 
|  | @pragma('dart2js:tryInline') | 
|  | check() => checkAll(eval()); | 
|  |  | 
|  | @override | 
|  | @pragma('dart2js:tryInline') | 
|  | eval() => arg1 ~/ arg2; | 
|  | } | 
|  |  | 
|  | class Divide extends TestOp { | 
|  | final arg1; | 
|  | final arg2; | 
|  |  | 
|  | const Divide(this.arg1, this.arg2, expected) : super(expected, arg1 / arg2); | 
|  |  | 
|  | @pragma('dart2js:tryInline') | 
|  | check() => checkAll(eval()); | 
|  |  | 
|  | @override | 
|  | @pragma('dart2js:tryInline') | 
|  | eval() => arg1 / arg2; | 
|  | } | 
|  |  | 
|  | class Add extends TestOp { | 
|  | final arg1; | 
|  | final arg2; | 
|  |  | 
|  | const Add(this.arg1, this.arg2, expected) : super(expected, arg1 + arg2); | 
|  |  | 
|  | @pragma('dart2js:tryInline') | 
|  | check() => checkAll(eval()); | 
|  |  | 
|  | @pragma('dart2js:tryInline') | 
|  | eval() => arg1 + arg2; | 
|  | } | 
|  |  | 
|  | class Less extends TestOp { | 
|  | final arg1; | 
|  | final arg2; | 
|  |  | 
|  | const Less(this.arg1, this.arg2, expected) : super(expected, arg1 < arg2); | 
|  |  | 
|  | @pragma('dart2js:tryInline') | 
|  | check() => checkAll(eval()); | 
|  |  | 
|  | @pragma('dart2js:tryInline') | 
|  | eval() => arg1 < arg2; | 
|  | } | 
|  |  | 
|  | class LessEqual extends TestOp { | 
|  | final arg1; | 
|  | final arg2; | 
|  |  | 
|  | const LessEqual(this.arg1, this.arg2, expected) | 
|  | : super(expected, arg1 <= arg2); | 
|  |  | 
|  | @pragma('dart2js:tryInline') | 
|  | check() => checkAll(eval()); | 
|  |  | 
|  | @pragma('dart2js:tryInline') | 
|  | eval() => arg1 <= arg2; | 
|  | } | 
|  |  | 
|  | class Greater extends TestOp { | 
|  | final arg1; | 
|  | final arg2; | 
|  |  | 
|  | const Greater(this.arg1, this.arg2, expected) : super(expected, arg1 > arg2); | 
|  |  | 
|  | @pragma('dart2js:tryInline') | 
|  | check() => checkAll(eval()); | 
|  |  | 
|  | @pragma('dart2js:tryInline') | 
|  | eval() => arg1 > arg2; | 
|  | } | 
|  |  | 
|  | class GreaterEqual extends TestOp { | 
|  | final arg1; | 
|  | final arg2; | 
|  |  | 
|  | const GreaterEqual(this.arg1, this.arg2, expected) | 
|  | : super(expected, arg1 >= arg2); | 
|  |  | 
|  | @pragma('dart2js:tryInline') | 
|  | check() => checkAll(eval()); | 
|  |  | 
|  | @pragma('dart2js:tryInline') | 
|  | eval() => arg1 >= arg2; | 
|  | } | 
|  |  | 
|  | class Equals extends TestOp { | 
|  | final arg1; | 
|  | final arg2; | 
|  |  | 
|  | const Equals(this.arg1, this.arg2, expected) : super(expected, arg1 == arg2); | 
|  |  | 
|  | @pragma('dart2js:tryInline') | 
|  | check() => checkAll(eval()); | 
|  |  | 
|  | @pragma('dart2js:tryInline') | 
|  | eval() => arg1 == arg2; | 
|  | } | 
|  |  | 
|  | class Identity extends TestOp { | 
|  | final arg1; | 
|  | final arg2; | 
|  |  | 
|  | const Identity(this.arg1, this.arg2, expected) | 
|  | : super(expected, identical(arg1, arg2)); | 
|  |  | 
|  | @pragma('dart2js:tryInline') | 
|  | check() => checkAll(eval()); | 
|  |  | 
|  | @pragma('dart2js:tryInline') | 
|  | eval() => identical(arg1, arg2); | 
|  | } | 
|  |  | 
|  | class IfNull extends TestOp { | 
|  | final arg1; | 
|  | final arg2; | 
|  |  | 
|  | const IfNull(this.arg1, this.arg2, expected) : super(expected, arg1 ?? arg2); | 
|  |  | 
|  | @pragma('dart2js:tryInline') | 
|  | check() => checkAll(eval()); | 
|  |  | 
|  | @pragma('dart2js:tryInline') | 
|  | eval() => arg1 ?? arg2; | 
|  | } |