| // Copyright (c) 2012, 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. |
| // Tests that the VM does not crash on weird corner cases of class Math. |
| // VMOptions=--optimization_counter_threshold=100 --no-background_compilation |
| |
| // @dart = 2.9 |
| |
| library math_vm_test; |
| |
| import "package:expect/expect.dart"; |
| import 'dart:math'; |
| |
| class FakeNumber { |
| const FakeNumber(); |
| void toDouble() {} |
| } |
| |
| class MathTest { |
| static bool testParseInt(x) { |
| try { |
| int.parse(x); // Expects string. |
| return true; |
| } catch (e) { |
| return false; |
| } |
| } |
| |
| static bool testSqrt(x) { |
| try { |
| sqrt(x); // Expects number. |
| return true; |
| } catch (e) { |
| return false; |
| } |
| } |
| |
| static void testMain() { |
| Expect.equals(false, testParseInt(5)); |
| Expect.equals(false, testSqrt(const FakeNumber())); |
| } |
| } |
| |
| testDoublePow() { |
| Expect.equals((1 << 32).toDouble(), pow(2.0, 32)); |
| } |
| |
| testSinCos(a) { |
| double sVal = sin(a); |
| double cVal = cos(a); |
| return sVal + cVal; |
| } |
| |
| main() { |
| const double value = 1.54; |
| final firstRes = testSinCos(value); |
| for (int i = 0; i < 200; i++) { |
| MathTest.testMain(); |
| testDoublePow(); |
| testSinCos(value); |
| } |
| Expect.equals(firstRes, testSinCos(value)); |
| } |