// 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

library math_vm_test;

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));
}


main() {
  for (int i = 0; i < 200; i++) {
    MathTest.testMain();
    testDoublePow();
  }
}
