| // Copyright (c) 2018, 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"; | |
| // We want to run each test with and without inlining of the target functions. | |
| // We accomplish this by using VM options in the yes-inlining variant to set the | |
| // "enable_inlining" constant variable to true. This maximizes code sharing | |
| // between the two variants, which are otherwise identical. | |
| const String NeverInline = | |
| const bool.fromEnvironment("enable_inlining") ? "" : "NeverInline"; | |
| // All these tests can be run in test mode or in benchmark mode. In benchmark | |
| // mode, there is introspection is omitted and the tests runs for many more | |
| // iterations. | |
| const bool benchmarkMode = const bool.fromEnvironment("benchmark_mode"); | |
| int expectedEntryPoint = -1; | |
| int expectedTearoffEntryPoint = -1; | |
| // We check that this is true at the end of the test to ensure that the | |
| // introspection machinery is operational. | |
| bool validateRan = false; | |
| _validateHelper(int expected, int ep) { | |
| validateRan = true; | |
| if (ep < 0 || ep > 2) { | |
| Expect.fail("ERROR: invalid entry-point ($ep) passed by VM."); | |
| } | |
| if (expected < -1 || expected > 2) { | |
| Expect.fail("ERROR: invalid expected entry-point set ($expected)"); | |
| } | |
| if (expected == -1) return; | |
| Expect.equals(expected, ep); | |
| } | |
| void _validateFn(String _, int ep) => _validateHelper(expectedEntryPoint, ep); | |
| // Invocation of tearoffs go through a tearoff wrapper. We want to independently | |
| // test which entrypoint was used for the tearoff wrapper vs. which was used for | |
| // actual target. | |
| _validateTearoffFn(String name, int entryPoint) { | |
| _validateHelper( | |
| name.endsWith("#tearoff") | |
| ? expectedTearoffEntryPoint | |
| : expectedEntryPoint, | |
| entryPoint); | |
| } | |
| const validate = benchmarkMode ? null : _validateFn; | |
| const validateTearoff = benchmarkMode ? null : _validateTearoffFn; |