// Copyright 2016 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Here we are not trying to do anything comprehensive, just to sanity check
// that this is hooked up to something.

#include <float.h>  // for DBL_MIN
#include <math.h>   // for HUGE_VAL
#include "starboard/double.h"
#include "starboard/string.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace starboard {
namespace nplb {
namespace {

// positive number
TEST(SbStringParseDoubleTest, Positive) {
  const char kDouble[] = "  123.4";
  const double kExpected = 123.4;
  char* end = NULL;
  EXPECT_EQ(kExpected, SbStringParseDouble(kDouble, &end));
  EXPECT_EQ(kDouble + 7, end);
}

// positive number without decimal
TEST(SbStringParseDoubleTest, PositiveNoDecimal) {
  const char kDouble[] = "  123";
  const double kExpected = 123;
  char* end = NULL;
  EXPECT_EQ(kExpected, SbStringParseDouble(kDouble, &end));
  EXPECT_EQ(kDouble + 5, end);
}

// negative number
TEST(SbStringParseDoubleTest, Negative) {
  const char kDouble[] = "  -123.4";
  const double kExpected = -123.4;
  char* end = NULL;
  EXPECT_EQ(kExpected, SbStringParseDouble(kDouble, &end));
  EXPECT_EQ(kDouble + 8, end);
}

// zero (in case it gets confused with null)
TEST(SbStringParseDoubleTest, Zero) {
  const char kDouble[] = "0";
  const double kExpected = 0;
  char* end = NULL;
  EXPECT_DOUBLE_EQ(kExpected, SbStringParseDouble(kDouble, &end));
  EXPECT_EQ(kDouble + 1, end);
}

TEST(SbStringParseDoubleTest, TabSpacesNewLinePrefix) {
  const char kDouble[] = "\t \n123.5";
  const double kExpected = 123.5;
  char* end = NULL;
  EXPECT_DOUBLE_EQ(kExpected, SbStringParseDouble(kDouble, &end));
  EXPECT_EQ(kDouble + 8, end);
}

TEST(SbStringParseDoubleTest, TabSpacesNewLineSuffix) {
  const char kDouble[] = "123.5\t \n";
  const double kExpected = 123.5;
  char* end = NULL;
  EXPECT_DOUBLE_EQ(kExpected, SbStringParseDouble(kDouble, &end));
  EXPECT_EQ(kDouble + 5, end);
}

TEST(SbStringParseDoubleTest, ScientificLowerCasePositiveExp) {
  const char kDouble[] = "123.5e2";
  const double kExpected = 12350;
  char* end = NULL;
  EXPECT_DOUBLE_EQ(kExpected, SbStringParseDouble(kDouble, &end));
  EXPECT_EQ(kDouble + 7, end);
}

TEST(SbStringParseDoubleTest, ScientificLowerCasePositiveExp2) {
  const char kDouble[] = "123.5e+2";
  const double kExpected = 12350;
  char* end = NULL;
  EXPECT_DOUBLE_EQ(kExpected, SbStringParseDouble(kDouble, &end));
  EXPECT_EQ(kDouble + 8, end);
}

TEST(SbStringParseDoubleTest, ScientificLowerCaseNegativeExp) {
  const char kDouble[] = "123.5e-2";
  const double kExpected = 1.235;
  char* end = NULL;
  EXPECT_DOUBLE_EQ(kExpected, SbStringParseDouble(kDouble, &end));
  EXPECT_EQ(kDouble + 8, end);
}

TEST(SbStringParseDoubleTest, ScientificUpperCasePositiveExp) {
  const char kDouble[] = "123.5E2";
  const double kExpected = 12350;
  char* end = NULL;
  EXPECT_DOUBLE_EQ(kExpected, SbStringParseDouble(kDouble, &end));
  EXPECT_EQ(kDouble + 7, end);
}

TEST(SbStringParseDoubleTest, ScientificUpperCasePositiveExp2) {
  const char kDouble[] = "123.5E+2";
  const double kExpected = 12350;
  char* end = NULL;
  EXPECT_DOUBLE_EQ(kExpected, SbStringParseDouble(kDouble, &end));
  EXPECT_EQ(kDouble + 8, end);
}

TEST(SbStringParseDoubleTest, ScientificUpperCaseNegativeExp) {
  const char kDouble[] = "123.5E-2";
  const double kExpected = 1.235;
  char* end = NULL;
  EXPECT_DOUBLE_EQ(kExpected, SbStringParseDouble(kDouble, &end));
  EXPECT_EQ(kDouble + 8, end);
}

TEST(SbStringParseDoubleTest, Empty) {
  const char kDouble[] = "";
  const double kExpected = 0.0;
  char* end = NULL;
  EXPECT_DOUBLE_EQ(kExpected, SbStringParseDouble(kDouble, &end));
  EXPECT_EQ(kDouble + 0, end);
}

TEST(SbStringParseDoubleTest, Space) {
  const char kDouble[] = " ";
  const double kExpected = 0.0;
  char* end = NULL;
  EXPECT_DOUBLE_EQ(kExpected, SbStringParseDouble(kDouble, &end));
  EXPECT_EQ(kDouble + 0, end);
}

TEST(SbStringParseDoubleTest, AlphaNumerics) {
  const char kDouble[] = "alskjdfkldd2";
  const double kExpected = 0.0;
  char* end = NULL;
  EXPECT_DOUBLE_EQ(kExpected, SbStringParseDouble(kDouble, &end));
  EXPECT_EQ(kDouble + 0, end);
}

// out of bounds
TEST(SbStringParseDoubleTest, Huge) {
  const char kDouble[] = "9e9999";
  const double kExpected = HUGE_VAL;
  char* end = NULL;
  EXPECT_DOUBLE_EQ(kExpected, SbStringParseDouble(kDouble, &end));
  EXPECT_EQ(kDouble + 6, end);
}

TEST(SbStringParseDoubleTest, HugeNeg) {
  const char kDouble[] = "-9e9999";
  const double kExpected = -HUGE_VAL;
  char* end = NULL;
  EXPECT_DOUBLE_EQ(kExpected, SbStringParseDouble(kDouble, &end));
  EXPECT_EQ(kDouble + 7, end);
}

// Some platforms do not support denormals
// Denormal support is unnecessary for Cobalt as of Sep 7, 2016
TEST(SbStringParseDoubleTest, DISABLED_Small) {
  const char kDouble[] = "1e-310";
  const double kExpected = DBL_MIN;
  char* end = NULL;
  double answer(SbStringParseDouble(kDouble, &end));
  EXPECT_GE(kExpected, answer);
  EXPECT_GT(answer, 0.0);
  EXPECT_EQ(kDouble + 6, end);
}

// Some platforms do not support denormals
// Denormal support is unnecessary for Cobalt as of Sep 7, 2016
TEST(SbStringParseDoubleTest, DISABLED_SmallNeg) {
  const char kDouble[] = "-1e-310";
  const double kExpected = -DBL_MIN;
  char* end = NULL;
  double answer(SbStringParseDouble(kDouble, &end));
  EXPECT_LE(kExpected, answer);
  EXPECT_LT(answer, 0.0);
  EXPECT_EQ(kDouble + 7, end);
}

// The following tests are disabled until we decide we want to mimic
// C11 behavior in Starboard.  NAN and INF supported was added in C11
// test NAN, and INFINITY
TEST(SbStringParseDoubleTest, NaN) {
  const char kNanDoubles[][4] = {"nan", "naN", "nAn", "nAN",
                                 "Nan", "NaN", "NAn", "NAN"};
  const double kExpected = NAN;
  char* end = NULL;
  for (size_t i(0); i != sizeof(kNanDoubles) / sizeof(kNanDoubles[0]); ++i) {
    EXPECT_TRUE(SbDoubleIsNan(SbStringParseDouble(kNanDoubles[i], &end)));
    EXPECT_EQ(kNanDoubles[i] + 3, end);
  }
}

TEST(SbStringParseDoubleTest, PosInf) {
  const char kInfDoubles[][4] = {"inf", "inF", "iNf", "iNF",
                                 "Inf", "InF", "INf", "INF"};
  char* end = NULL;
  for (size_t i(0); i != sizeof(kInfDoubles) / sizeof(kInfDoubles[0]); ++i) {
    EXPECT_FALSE(SbDoubleIsFinite(SbStringParseDouble(kInfDoubles[i], &end)));
    EXPECT_EQ(kInfDoubles[i] + 3, end);
  }

  const char kInfinity[] = "InFinIty";
  end = NULL;
  EXPECT_FALSE(SbDoubleIsFinite(SbStringParseDouble(kInfinity, &end)));
  EXPECT_EQ(kInfinity + 8, end);
}

TEST(SbStringParseDoubleTest, PosInf2) {
  const char kInfDoubles[][5] = {"+inf", "+inF", "+iNf", "+iNF",
                                 "+Inf", "+InF", "+INf", "+INF"};
  char* end = NULL;
  for (size_t i(0); i != sizeof(kInfDoubles) / sizeof(kInfDoubles[0]); ++i) {
    EXPECT_FALSE(SbDoubleIsFinite(SbStringParseDouble(kInfDoubles[i], &end)));
    EXPECT_EQ(kInfDoubles[i] + 4, end);
  }

  const char kInfinity[] = "+InFinIty";
  end = NULL;
  EXPECT_FALSE(SbDoubleIsFinite(SbStringParseDouble(kInfinity, &end)));
  EXPECT_EQ(kInfinity + 9, end);
}

TEST(SbStringParseDoubleTest, NegInf) {
  const char kInfDoubles[][5] = {"-inf", "-inF", "-iNf", "-iNF",
                                 "-Inf", "-InF", "-INf", "-INF"};
  char* end = NULL;
  for (size_t i(0); i != sizeof(kInfDoubles) / sizeof(kInfDoubles[0]); ++i) {
    EXPECT_FALSE(SbDoubleIsFinite(SbStringParseDouble(kInfDoubles[i], &end)));
    EXPECT_EQ(kInfDoubles[i] + 4, end);
  }

  const char kInfinity[] = "-InFinIty";
  end = NULL;
  EXPECT_FALSE(SbDoubleIsFinite(SbStringParseDouble(kInfinity, &end)));
  EXPECT_EQ(kInfinity + 9, end);
}

}  // namespace
}  // namespace nplb
}  // namespace starboard
