// 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. // Derived from tests/web/constant_folding_test import "package:expect/expect.dart"; /*member: main:calls=[checkAll$1(1),checkAll$1(1),checkAll$1(1),checkAll$1(1),checkAll$1(1),checkAll$1(1),checkAll$1(1)],params=0*/ 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(); } /*member: jsEquals:calls=[Expect_equals(3),Expect_equals(3),get$isNegative(1),get$isNegative(1),toString$0(1),toString$0(1)],params=3*/ 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); /*member: TestOp.checkAll:access=[arg,expected,result],calls=[jsEquals(3),jsEquals(3),jsEquals(3)],params=1*/ @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 { /*member: BitNot.arg:emitted*/ final arg; const BitNot(this.arg, expected) : super(expected, ~arg); @pragma('dart2js:tryInline') check() => checkAll(eval()); @override @pragma('dart2js:tryInline') eval() => ~arg; }