| // 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. |
| // Testing optimized 'is' tests. |
| // VMOptions=--optimization-counter-threshold=5 --no-use-osr --no-background-compilation |
| |
| // @dart = 2.9 |
| |
| import "package:expect/expect.dart"; |
| |
| bool isInt(x) => x is int; |
| |
| int isIntRes(x) { |
| if (x is int) { |
| return 1; |
| } else { |
| return 0; |
| } |
| } |
| |
| int isNotIntRes(x) { |
| if (x is! int) { |
| return 1; |
| } else { |
| return 0; |
| } |
| } |
| |
| int isIfThenElseIntRes(x) { |
| return x is int ? 1 : 0; |
| } |
| |
| bool isString(x) => x is String; |
| |
| int isStringRes(x) { |
| if (x is String) { |
| return 1; |
| } else { |
| return 0; |
| } |
| } |
| |
| int isNotStringRes(x) { |
| if (x is! String) { |
| return 1; |
| } else { |
| return 0; |
| } |
| } |
| |
| main() { |
| for (int i = 0; i < 20; i++) { |
| Expect.isFalse(isInt(3.2)); |
| Expect.isTrue(isInt(3)); |
| Expect.isTrue(isInt(17179869184)); // Mint on ia32. |
| Expect.isFalse(isString(2.0)); |
| Expect.isTrue(isString("Morgan")); |
| } |
| // No deoptimization of isInt possible since all types are known by the compiler |
| |
| Expect.isFalse(isString(true)); |
| for (int i = 0; i < 20; i++) { |
| Expect.isFalse(isInt(3.2)); |
| Expect.isTrue(isInt(3)); |
| Expect.isTrue(isInt(17179869184)); // Mint on ia32. |
| Expect.isFalse(isInt("hu")); |
| Expect.isFalse(isString(2.0)); |
| Expect.isTrue(isString("Morgan")); |
| Expect.isFalse(isString(true)); |
| } |
| |
| for (int i = 0; i < 20; i++) { |
| Expect.equals(0, isIntRes(3.2)); |
| Expect.equals(1, isIntRes(3)); |
| Expect.equals(0, isIntRes("hi")); |
| Expect.equals(1, isNotIntRes(3.2)); |
| Expect.equals(0, isNotIntRes(3)); |
| Expect.equals(1, isNotIntRes("hi")); |
| Expect.equals(0, isIfThenElseIntRes(3.2)); |
| Expect.equals(1, isIfThenElseIntRes(3)); |
| Expect.equals(0, isIfThenElseIntRes("hi")); |
| } |
| |
| for (int i = 0; i < 20; i++) { |
| Expect.equals(0, isStringRes(3.2)); |
| Expect.equals(1, isStringRes("Lotus")); |
| Expect.equals(1, isNotStringRes(3.2)); |
| Expect.equals(0, isNotStringRes("Lotus")); |
| } |
| |
| // Deoptimize 'isStringRes', 'isNotIntRes'. |
| Expect.equals(0, isStringRes(null)); |
| Expect.equals(1, isNotIntRes(null)); |
| for (int i = 0; i < 20; i++) { |
| Expect.equals(0, isStringRes(3.2)); |
| Expect.equals(1, isStringRes("Lotus")); |
| Expect.equals(0, isStringRes(null)); |
| |
| Expect.equals(1, isNotStringRes(3.2)); |
| Expect.equals(0, isNotStringRes("Lotus")); |
| Expect.equals(1, isNotStringRes(null)); |
| } |
| } |