| // 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=20 --no-use-osr --no-background-compilation | |
| 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)); | |
| } | |
| } |