| // Copyright (c) 2014, 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. | |
| // Test constant folding on numbers. | |
| import 'package:expect/async_helper.dart'; | |
| import '../helpers/compiler_helper.dart'; | |
| const String INT_PLUS_ZERO = """ | |
| int foo(int x) => x; | |
| main() { | |
| int x = foo(0); | |
| return (x & 1) + 0; | |
| } | |
| """; | |
| const String ZERO_PLUS_INT = """ | |
| int foo(int x) => x; | |
| main() { | |
| int x = foo(0); | |
| return 0 + (x & 1); | |
| } | |
| """; | |
| const String NUM_PLUS_ZERO = """ | |
| num foo(num x) => x; | |
| main() { | |
| num x = foo(0); | |
| return x + 0; | |
| } | |
| """; | |
| const String ZERO_PLUS_NUM = """ | |
| num foo(num x) => x; | |
| main() { | |
| num x = foo(0); | |
| return 0 + x; | |
| } | |
| """; | |
| const String INT_TIMES_ONE = """ | |
| int foo(int x) => x; | |
| main() { | |
| int x = foo(0); | |
| return (x & 1) * 1; | |
| } | |
| """; | |
| const String ONE_TIMES_INT = """ | |
| int foo(int x) => x; | |
| main() { | |
| int x = foo(0); | |
| return 1 * (x & 1); | |
| } | |
| """; | |
| const String NUM_TIMES_ONE = """ | |
| num foo(num x) => x; | |
| main() { | |
| num x = foo(0); | |
| return x * 1; | |
| } | |
| """; | |
| const String ONE_TIMES_NUM = """ | |
| num foo(num x) => x; | |
| main() { | |
| num x = foo(0); | |
| return 1 * x; | |
| } | |
| """; | |
| main() { | |
| var plusZero = RegExp(r"\+ 0"); | |
| var zeroPlus = RegExp(r"0 \+"); | |
| var timesOne = RegExp(r"\* 1"); | |
| var oneTimes = RegExp(r"1 \*"); | |
| test() async { | |
| await compileAndDoNotMatch(INT_PLUS_ZERO, 'main', plusZero); | |
| await compileAndDoNotMatch(ZERO_PLUS_INT, 'main', zeroPlus); | |
| await compileAndMatch(NUM_PLUS_ZERO, 'main', plusZero); | |
| await compileAndMatch(ZERO_PLUS_NUM, 'main', zeroPlus); | |
| await compileAndDoNotMatch(INT_TIMES_ONE, 'main', timesOne); | |
| await compileAndDoNotMatch(ONE_TIMES_INT, 'main', oneTimes); | |
| await compileAndDoNotMatch(NUM_TIMES_ONE, 'main', timesOne); | |
| await compileAndDoNotMatch(ONE_TIMES_NUM, 'main', oneTimes); | |
| } | |
| asyncTest(() async { | |
| print('--test from kernel------------------------------------------------'); | |
| await test(); | |
| }); | |
| } |