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

// We temporarily test both the new math library and the old Math
// class. This can easily be simplified once we get rid of the Math
// class entirely.
library math_test;

import "package:expect/expect.dart";
import 'dart:math' as math;

class MathLibraryTest {
  static void testConstants() {
    // Source for mathematical constants is Wolfram Alpha.
    Expect.equals(
        2.7182818284590452353602874713526624977572470936999595749669, math.e);
    Expect.equals(2.3025850929940456840179914546843642076011014886287729760333,
        math.ln10);
    Expect.equals(
        0.6931471805599453094172321214581765680755001343602552541206, math.ln2);
    Expect.equals(1.4426950408889634073599246810018921374266459541529859341354,
        math.log2e);
    Expect.equals(0.4342944819032518276511289189166050822943970058036665661144,
        math.log10e);
    Expect.equals(
        3.1415926535897932384626433832795028841971693993751058209749, math.pi);
    Expect.equals(0.7071067811865475244008443621048490392848359376884740365883,
        math.sqrt1_2);
    Expect.equals(1.4142135623730950488016887242096980785696718753769480731766,
        math.sqrt2);
  }

  static checkClose(double a, double b, EPSILON) {
    Expect.equals(true, a - EPSILON <= b);
    Expect.equals(true, b <= a + EPSILON);
  }

  static void testSin() {
    // Given the imprecision of pi we can't expect better results than this.
    final double EPSILON = 1e-15;
    checkClose(0.0, math.sin(0.0), EPSILON);
    checkClose(0.0, math.sin(math.pi), EPSILON);
    checkClose(0.0, math.sin(2.0 * math.pi), EPSILON);
    checkClose(1.0, math.sin(math.pi / 2.0), EPSILON);
    checkClose(-1.0, math.sin(math.pi * (3.0 / 2.0)), EPSILON);
  }

  static void testCos() {
    // Given the imprecision of pi we can't expect better results than this.
    final double EPSILON = 1e-15;
    checkClose(1.0, math.cos(0.0), EPSILON);
    checkClose(-1.0, math.cos(math.pi), EPSILON);
    checkClose(1.0, math.cos(2.0 * math.pi), EPSILON);
    checkClose(0.0, math.cos(math.pi / 2.0), EPSILON);
    checkClose(0.0, math.cos(math.pi * (3.0 / 2.0)), EPSILON);
  }

  static void testTan() {
    // Given the imprecision of pi we can't expect better results than this.
    final double EPSILON = 1e-15;
    checkClose(0.0, math.tan(0.0), EPSILON);
    checkClose(0.0, math.tan(math.pi), EPSILON);
    checkClose(0.0, math.tan(2.0 * math.pi), EPSILON);
    checkClose(1.0, math.tan(math.pi / 4.0), EPSILON);
  }

  static void testAsin() {
    // Given the imprecision of pi we can't expect better results than this.
    final double EPSILON = 1e-15;
    checkClose(0.0, math.asin(0.0), EPSILON);
    checkClose(math.pi / 2.0, math.asin(1.0), EPSILON);
    checkClose(-math.pi / 2.0, math.asin(-1.0), EPSILON);
  }

  static void testAcos() {
    // Given the imprecision of pi we can't expect better results than this.
    final double EPSILON = 1e-15;
    checkClose(0.0, math.acos(1.0), EPSILON);
    checkClose(math.pi, math.acos(-1.0), EPSILON);
    checkClose(math.pi / 2.0, math.acos(0.0), EPSILON);
  }

  static void testAtan() {
    // Given the imprecision of pi we can't expect better results than this.
    final double EPSILON = 1e-15;
    checkClose(0.0, math.atan(0.0), EPSILON);
    checkClose(math.pi / 4.0, math.atan(1.0), EPSILON);
    checkClose(-math.pi / 4.0, math.atan(-1.0), EPSILON);
  }

  static void testAtan2() {
    // Given the imprecision of pi we can't expect better results than this.
    final double EPSILON = 1e-15;
    checkClose(0.0, math.atan2(0.0, 5.0), EPSILON);
    checkClose(math.pi / 4.0, math.atan2(2.0, 2.0), EPSILON);
    checkClose(3 * math.pi / 4.0, math.atan2(0.5, -0.5), EPSILON);
    checkClose(-3 * math.pi / 4.0, math.atan2(-2.5, -2.5), EPSILON);
  }

  static checkVeryClose(double a, double b) {
    // We find a ulp (unit in the last place) by shifting the original number
    // to the right. This only works if we are not too close to infinity or if
    // we work with denormals.
    // We special case or 0.0, but not for infinity.
    if (a == 0.0) {
      final minimalDouble = 4.9406564584124654e-324;
      Expect.equals(true, b.abs() <= minimalDouble);
      return;
    }
    if (b == 0.0) {
      // No need to look if they are close. Otherwise the check for 'a' above
      // whould have triggered.
      Expect.equals(a, b);
    }
    final double shiftRightBy52 = 2.220446049250313080847263336181640625e-16;
    final double shiftedA = (a * shiftRightBy52).abs();
    // Compared to 'a', 'shiftedA' is now ~1-2 ulp.

    final double limitLow = a - shiftedA;
    final double limitHigh = a + shiftedA;
    Expect.equals(false, a == limitLow);
    Expect.equals(false, a == limitHigh);
    Expect.equals(true, limitLow <= b);
    Expect.equals(true, b <= limitHigh);
  }

  static void testSqrt() {
    checkVeryClose(2.0, math.sqrt(4.0));
    checkVeryClose(math.sqrt2, math.sqrt(2.0));
    checkVeryClose(math.sqrt1_2, math.sqrt(0.5));
    checkVeryClose(1e50, math.sqrt(1e100));
    checkVeryClose(1.1111111061110855443054405046358901279277111935183977e56,
        math.sqrt(12345678901234e99));
  }

  static void testExp() {
    checkVeryClose(math.e, math.exp(1.0));
    final EPSILON = 1e-15;
    checkClose(10.0, math.exp(math.ln10), EPSILON);
    checkClose(2.0, math.exp(math.ln2), EPSILON);
  }

  static void testLog() {
    // Even though E is imprecise, it is good enough to get really close to 1.
    // We still provide an epsilon.
    checkClose(1.0, math.log(math.e), 1e-16);
    checkVeryClose(math.ln10, math.log(10.0));
    checkVeryClose(math.ln2, math.log(2.0));
  }

  static void testPow() {
    checkVeryClose(16.0, math.pow(4.0, 2.0));
    checkVeryClose(math.sqrt2, math.pow(2.0, 0.5));
    checkVeryClose(math.sqrt1_2, math.pow(0.5, 0.5));
  }

  static bool parseIntThrowsFormatException(str) {
    try {
      int.parse(str);
      return false;
    } on FormatException catch (e) {
      return true;
    }
  }

  static void testParseInt() {
    Expect.equals(499, int.parse("499"));
    Expect.equals(499, int.parse("+499"));
    Expect.equals(-499, int.parse("-499"));
    Expect.equals(499, int.parse("   499   "));
    Expect.equals(499, int.parse("   +499   "));
    Expect.equals(-499, int.parse("   -499   "));
    Expect.equals(0, int.parse("0"));
    Expect.equals(0, int.parse("+0"));
    Expect.equals(0, int.parse("-0"));
    Expect.equals(0, int.parse("   0   "));
    Expect.equals(0, int.parse("   +0   "));
    Expect.equals(0, int.parse("   -0   "));
    Expect.equals(0x1234567890, int.parse("0x1234567890"));
    Expect.equals(-0x1234567890, int.parse("-0x1234567890"));
    Expect.equals(0x1234567890, int.parse("   0x1234567890   "));
    Expect.equals(-0x1234567890, int.parse("   -0x1234567890   "));
    Expect.equals(256, int.parse("0x100"));
    Expect.equals(-256, int.parse("-0x100"));
    Expect.equals(256, int.parse("   0x100   "));
    Expect.equals(-256, int.parse("   -0x100   "));
    Expect.equals(0xabcdef, int.parse("0xabcdef"));
    Expect.equals(0xABCDEF, int.parse("0xABCDEF"));
    Expect.equals(0xabcdef, int.parse("0xabCDEf"));
    Expect.equals(-0xabcdef, int.parse("-0xabcdef"));
    Expect.equals(-0xABCDEF, int.parse("-0xABCDEF"));
    Expect.equals(0xabcdef, int.parse("   0xabcdef   "));
    Expect.equals(0xABCDEF, int.parse("   0xABCDEF   "));
    Expect.equals(-0xabcdef, int.parse("   -0xabcdef   "));
    Expect.equals(-0xABCDEF, int.parse("   -0xABCDEF   "));
    Expect.equals(0xabcdef, int.parse("0x00000abcdef"));
    Expect.equals(0xABCDEF, int.parse("0x00000ABCDEF"));
    Expect.equals(-0xabcdef, int.parse("-0x00000abcdef"));
    Expect.equals(-0xABCDEF, int.parse("-0x00000ABCDEF"));
    Expect.equals(0xabcdef, int.parse("   0x00000abcdef   "));
    Expect.equals(0xABCDEF, int.parse("   0x00000ABCDEF   "));
    Expect.equals(-0xabcdef, int.parse("   -0x00000abcdef   "));
    Expect.equals(-0xABCDEF, int.parse("   -0x00000ABCDEF   "));
    Expect.equals(10, int.parse("010"));
    Expect.equals(-10, int.parse("-010"));
    Expect.equals(10, int.parse("   010   "));
    Expect.equals(-10, int.parse("   -010   "));
    Expect.equals(9, int.parse("09"));
    Expect.equals(9, int.parse(" 09 "));
    Expect.equals(-9, int.parse("-09"));
    Expect.equals(0x1234567890, int.parse("+0x1234567890"));
    Expect.equals(0x1234567890, int.parse("   +0x1234567890   "));
    Expect.equals(0x100, int.parse("+0x100"));
    Expect.equals(0x100, int.parse("   +0x100   "));

    Expect.equals(true, parseIntThrowsFormatException("1b"));
    Expect.equals(true, parseIntThrowsFormatException(" 1b "));
    Expect.equals(true, parseIntThrowsFormatException(" 1 b "));
    Expect.equals(true, parseIntThrowsFormatException("1e2"));
    Expect.equals(true, parseIntThrowsFormatException(" 1e2 "));
    Expect.equals(true, parseIntThrowsFormatException("00x12"));
    Expect.equals(true, parseIntThrowsFormatException(" 00x12 "));
    Expect.equals(true, parseIntThrowsFormatException("-1b"));
    Expect.equals(true, parseIntThrowsFormatException(" -1b "));
    Expect.equals(true, parseIntThrowsFormatException(" -1 b "));
    Expect.equals(true, parseIntThrowsFormatException("-1e2"));
    Expect.equals(true, parseIntThrowsFormatException(" -1e2 "));
    Expect.equals(true, parseIntThrowsFormatException("-00x12"));
    Expect.equals(true, parseIntThrowsFormatException(" -00x12 "));
    Expect.equals(true, parseIntThrowsFormatException("  -00x12 "));
    Expect.equals(true, parseIntThrowsFormatException("0x0x12"));
    Expect.equals(true, parseIntThrowsFormatException("0.1"));
    Expect.equals(true, parseIntThrowsFormatException("0x3.1"));
    Expect.equals(true, parseIntThrowsFormatException("5."));
    Expect.equals(true, parseIntThrowsFormatException("+-5"));
    Expect.equals(true, parseIntThrowsFormatException("-+5"));
    Expect.equals(true, parseIntThrowsFormatException("--5"));
    Expect.equals(true, parseIntThrowsFormatException("++5"));
    Expect.equals(true, parseIntThrowsFormatException("+ 5"));
    Expect.equals(true, parseIntThrowsFormatException("- 5"));
    Expect.equals(true, parseIntThrowsFormatException(""));
    Expect.equals(true, parseIntThrowsFormatException("  "));
  }

  static testMain() {
    testConstants();
    testSin();
    testCos();
    testTan();
    testAsin();
    testAcos();
    testAtan();
    testAtan2();
    testSqrt();
    testLog();
    testExp();
    testPow();
    testParseInt();
  }
}

main() {
  MathLibraryTest.testMain();
}
