/*
 * Copyright (C) 2012 Google Inc. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 *
 *     * Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above
 * copyright notice, this list of conditions and the following disclaimer
 * in the documentation and/or other materials provided with the
 * distribution.
 *     * Neither the name of Google Inc. nor the names of its
 * contributors may be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#include "platform/Decimal.h"

#include <float.h>
#include "platform/wtf/MathExtras.h"
#include "platform/wtf/text/CString.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace blink {

// Simulate core/html/forms/StepRange
class DecimalStepRange {
 public:
  Decimal maximum;
  Decimal minimum;
  Decimal step;

  DecimalStepRange(const Decimal& minimum,
                   const Decimal& maximum,
                   const Decimal& step)
      : maximum(maximum), minimum(minimum), step(step) {}

  Decimal ClampValue(Decimal value) const {
    const Decimal result = minimum + ((value - minimum) / step).Round() * step;
    DCHECK(result.IsFinite());
    return result > maximum ? result - step : result;
  }
};

class DecimalTest : public ::testing::Test {
 protected:
  using Sign = Decimal::Sign;
  static const Sign kPositive = Decimal::kPositive;
  static const Sign kNegative = Decimal::kNegative;

  Decimal Encode(uint64_t coefficient, int exponent, Sign sign) {
    return Decimal(sign, exponent, coefficient);
  }

  Decimal FromString(const String& string) {
    return Decimal::FromString(string);
  }

  Decimal StepDown(const String& minimum,
                   const String& maximum,
                   const String& step,
                   const String& value_string,
                   int number_of_step_times) {
    DecimalStepRange step_range(FromString(minimum), FromString(maximum),
                                FromString(step));
    Decimal value = FromString(value_string);
    for (int i = 0; i < number_of_step_times; ++i) {
      value -= step_range.step;
      value = step_range.ClampValue(value);
    }
    return value;
  }

  Decimal StepUp(const String& minimum,
                 const String& maximum,
                 const String& step,
                 const String& value_string,
                 int number_of_step_times) {
    DecimalStepRange step_range(FromString(minimum), FromString(maximum),
                                FromString(step));
    Decimal value = FromString(value_string);
    for (int i = 0; i < number_of_step_times; ++i) {
      value += step_range.step;
      value = step_range.ClampValue(value);
    }
    return value;
  }
};

// FIXME: We should use expectedSign without "Decimal::", however, g++ causes
// undefined references for DecimalTest::Positive and Negative.
#define EXPECT_DECIMAL_ENCODED_DATA_EQ(expectedCoefficient, expectedExponent, \
                                       expectedSign, decimal)                 \
  EXPECT_EQ((expectedCoefficient), (decimal).Value().Coefficient());          \
  EXPECT_EQ((expectedExponent), (decimal).Value().Exponent());                \
  EXPECT_EQ(Decimal::expectedSign, (decimal).Value().GetSign());

#define EXPECT_DECIMAL_STREQ(expected, decimal) \
  EXPECT_STREQ((expected), (decimal).ToString().Ascii().data())

TEST_F(DecimalTest, Abs) {
  EXPECT_EQ(Encode(0, 0, kPositive), Encode(0, 0, kPositive).Abs());
  EXPECT_EQ(Encode(0, 0, kPositive), Encode(0, 0, kNegative).Abs());

  EXPECT_EQ(Encode(0, 10, kPositive), Encode(0, 10, kPositive).Abs());
  EXPECT_EQ(Encode(0, 10, kPositive), Encode(0, 10, kNegative).Abs());

  EXPECT_EQ(Encode(0, -10, kPositive), Encode(0, -10, kPositive).Abs());
  EXPECT_EQ(Encode(0, -10, kPositive), Encode(0, -10, kNegative).Abs());

  EXPECT_EQ(Encode(1, 0, kPositive), Encode(1, 0, kPositive).Abs());
  EXPECT_EQ(Encode(1, 0, kPositive), Encode(1, 0, kNegative).Abs());

  EXPECT_EQ(Encode(1, 10, kPositive), Encode(1, 10, kPositive).Abs());
  EXPECT_EQ(Encode(1, 10, kPositive), Encode(1, 10, kNegative).Abs());

  EXPECT_EQ(Encode(1, -10, kPositive), Encode(1, -10, kPositive).Abs());
  EXPECT_EQ(Encode(1, -10, kPositive), Encode(1, -10, kNegative).Abs());
}

TEST_F(DecimalTest, AbsBigExponent) {
  EXPECT_EQ(Encode(1, 1000, kPositive), Encode(1, 1000, kPositive).Abs());
  EXPECT_EQ(Encode(1, 1000, kPositive), Encode(1, 1000, kNegative).Abs());
}

TEST_F(DecimalTest, AbsSmallExponent) {
  EXPECT_EQ(Encode(1, -1000, kPositive), Encode(1, -1000, kPositive).Abs());
  EXPECT_EQ(Encode(1, -1000, kPositive), Encode(1, -1000, kNegative).Abs());
}

TEST_F(DecimalTest, AbsSpecialValues) {
  EXPECT_EQ(Decimal::Infinity(kPositive), Decimal::Infinity(kPositive).Abs());
  EXPECT_EQ(Decimal::Infinity(kPositive), Decimal::Infinity(kNegative).Abs());
  EXPECT_EQ(Decimal::Nan(), Decimal::Nan().Abs());
}

TEST_F(DecimalTest, Add) {
  EXPECT_EQ(Encode(0, 0, kPositive), Decimal(0) + Decimal(0));
  EXPECT_EQ(Decimal(1), Decimal(2) + Decimal(-1));
  EXPECT_EQ(Decimal(1), Decimal(-1) + Decimal(2));
  EXPECT_EQ(Encode(100, 0, kPositive), Decimal(99) + Decimal(1));
  EXPECT_EQ(Encode(100, 0, kNegative), Decimal(-50) + Decimal(-50));
  EXPECT_EQ(Encode(UINT64_C(1000000000000000), 35, kPositive),
            Encode(1, 50, kPositive) + Decimal(1));
  EXPECT_EQ(Encode(UINT64_C(1000000000000000), 35, kPositive),
            Decimal(1) + Encode(1, 50, kPositive));
  EXPECT_EQ(Encode(UINT64_C(10000000001), 0, kPositive),
            Encode(1, 10, kPositive) + Decimal(1));
  EXPECT_EQ(Encode(UINT64_C(10000000001), 0, kPositive),
            Decimal(1) + Encode(1, 10, kPositive));
  EXPECT_EQ(Encode(1, 0, kPositive),
            Encode(1, -1022, kPositive) + Encode(1, 0, kPositive));
  EXPECT_EQ(Encode(2, -1022, kPositive),
            Encode(1, -1022, kPositive) + Encode(1, -1022, kPositive));
}

TEST_F(DecimalTest, AddBigExponent) {
  EXPECT_EQ(Encode(1, 1022, kPositive),
            Encode(1, 1022, kPositive) + Encode(1, 0, kPositive));
  EXPECT_EQ(Encode(2, 1022, kPositive),
            Encode(1, 1022, kPositive) + Encode(1, 1022, kPositive));
  EXPECT_EQ(Decimal::Infinity(kPositive),
            Encode(std::numeric_limits<uint64_t>::max(), 1022, kPositive) +
                Encode(1, 0, kPositive));
  EXPECT_EQ(Encode(1, 1022, kPositive),
            Encode(1, 1022, kPositive) + Encode(1, -1000, kPositive));
}

TEST_F(DecimalTest, AddSmallExponent) {
  EXPECT_EQ(Encode(1, 0, kPositive),
            Encode(1, -1022, kPositive) + Encode(1, 0, kPositive));
  EXPECT_EQ(Encode(2, -1022, kPositive),
            Encode(1, -1022, kPositive) + Encode(1, -1022, kPositive));
}

TEST_F(DecimalTest, AddSpecialValues) {
  const Decimal infinity(Decimal::Infinity(kPositive));
  const Decimal minus_infinity(Decimal::Infinity(kNegative));
  const Decimal na_n(Decimal::Nan());
  const Decimal ten(10);

  EXPECT_EQ(infinity, infinity + infinity);
  EXPECT_EQ(na_n, infinity + minus_infinity);
  EXPECT_EQ(na_n, minus_infinity + infinity);
  EXPECT_EQ(minus_infinity, minus_infinity + minus_infinity);

  EXPECT_EQ(infinity, infinity + ten);
  EXPECT_EQ(infinity, ten + infinity);
  EXPECT_EQ(minus_infinity, minus_infinity + ten);
  EXPECT_EQ(minus_infinity, ten + minus_infinity);

  EXPECT_EQ(na_n, na_n + na_n);
  EXPECT_EQ(na_n, na_n + ten);
  EXPECT_EQ(na_n, ten + na_n);

  EXPECT_EQ(na_n, na_n - infinity);
  EXPECT_EQ(na_n, na_n - minus_infinity);
  EXPECT_EQ(na_n, infinity - na_n);
  EXPECT_EQ(na_n, minus_infinity - na_n);
}

TEST_F(DecimalTest, Ceil) {
  EXPECT_EQ(Decimal(1), Decimal(1).Ceil());
  EXPECT_EQ(Decimal(1), Encode(1, -10, kPositive).Ceil());
  EXPECT_EQ(Decimal(2), Encode(11, -1, kPositive).Ceil());
  EXPECT_EQ(Decimal(2), Encode(13, -1, kPositive).Ceil());
  EXPECT_EQ(Decimal(2), Encode(15, -1, kPositive).Ceil());
  EXPECT_EQ(Decimal(2), Encode(19, -1, kPositive).Ceil());
  EXPECT_EQ(Decimal(2), Encode(151, -2, kPositive).Ceil());
  EXPECT_EQ(Decimal(2), Encode(101, -2, kPositive).Ceil());
  EXPECT_EQ(Decimal(1), Encode(199, -3, kPositive).Ceil());
  EXPECT_EQ(Decimal(2), Encode(199, -2, kPositive).Ceil());
  EXPECT_EQ(Decimal(3), Encode(209, -2, kPositive).Ceil());

  EXPECT_EQ(Decimal(-1), Decimal(-1).Ceil());
  EXPECT_EQ(Decimal(0), Encode(1, -10, kNegative).Ceil());
  EXPECT_EQ(Decimal(-1), Encode(11, -1, kNegative).Ceil());
  EXPECT_EQ(Decimal(-1), Encode(13, -1, kNegative).Ceil());
  EXPECT_EQ(Decimal(-1), Encode(15, -1, kNegative).Ceil());
  EXPECT_EQ(Decimal(-1), Encode(19, -1, kNegative).Ceil());
  EXPECT_EQ(Decimal(-1), Encode(151, -2, kNegative).Ceil());
  EXPECT_EQ(Decimal(-1), Encode(101, -2, kNegative).Ceil());
  EXPECT_EQ(Decimal(0), Encode(199, -3, kNegative).Ceil());
  EXPECT_EQ(Decimal(-1), Encode(199, -2, kNegative).Ceil());
  EXPECT_EQ(Decimal(-2), Encode(209, -2, kNegative).Ceil());
  EXPECT_EQ(Decimal(1),
            Encode(UINT64_C(123456789012345678), -18, kPositive).Ceil());
}

TEST_F(DecimalTest, CeilingBigExponent) {
  EXPECT_EQ(Encode(1, 1000, kPositive), Encode(1, 1000, kPositive).Ceil());
  EXPECT_EQ(Encode(1, 1000, kNegative), Encode(1, 1000, kNegative).Ceil());
}

TEST_F(DecimalTest, CeilingSmallExponent) {
  EXPECT_EQ(Encode(1, 0, kPositive), Encode(1, -1000, kPositive).Ceil());
  EXPECT_EQ(Encode(0, 0, kNegative), Encode(1, -1000, kNegative).Ceil());
}

TEST_F(DecimalTest, CeilingSpecialValues) {
  EXPECT_EQ(Decimal::Infinity(kPositive), Decimal::Infinity(kPositive).Ceil());
  EXPECT_EQ(Decimal::Infinity(kNegative), Decimal::Infinity(kNegative).Ceil());
  EXPECT_EQ(Decimal::Nan(), Decimal::Nan().Ceil());
}

TEST_F(DecimalTest, Compare) {
  EXPECT_TRUE(Decimal(0) == Decimal(0));
  EXPECT_TRUE(Decimal(0) != Decimal(1));
  EXPECT_TRUE(Decimal(0) < Decimal(1));
  EXPECT_TRUE(Decimal(0) <= Decimal(0));
  EXPECT_TRUE(Decimal(0) > Decimal(-1));
  EXPECT_TRUE(Decimal(0) >= Decimal(0));

  EXPECT_FALSE(Decimal(1) == Decimal(2));
  EXPECT_FALSE(Decimal(1) != Decimal(1));
  EXPECT_FALSE(Decimal(1) < Decimal(0));
  EXPECT_FALSE(Decimal(1) <= Decimal(0));
  EXPECT_FALSE(Decimal(1) > Decimal(2));
  EXPECT_FALSE(Decimal(1) >= Decimal(2));
}

TEST_F(DecimalTest, CompareBigExponent) {
  EXPECT_TRUE(Encode(1, 1000, kPositive) == Encode(1, 1000, kPositive));
  EXPECT_FALSE(Encode(1, 1000, kPositive) != Encode(1, 1000, kPositive));
  EXPECT_FALSE(Encode(1, 1000, kPositive) < Encode(1, 1000, kPositive));
  EXPECT_TRUE(Encode(1, 1000, kPositive) <= Encode(1, 1000, kPositive));
  EXPECT_FALSE(Encode(1, 1000, kPositive) > Encode(1, 1000, kPositive));
  EXPECT_TRUE(Encode(1, 1000, kPositive) >= Encode(1, 1000, kPositive));

  EXPECT_TRUE(Encode(1, 1000, kNegative) == Encode(1, 1000, kNegative));
  EXPECT_FALSE(Encode(1, 1000, kNegative) != Encode(1, 1000, kNegative));
  EXPECT_FALSE(Encode(1, 1000, kNegative) < Encode(1, 1000, kNegative));
  EXPECT_TRUE(Encode(1, 1000, kNegative) <= Encode(1, 1000, kNegative));
  EXPECT_FALSE(Encode(1, 1000, kNegative) > Encode(1, 1000, kNegative));
  EXPECT_TRUE(Encode(1, 1000, kNegative) >= Encode(1, 1000, kNegative));

  EXPECT_FALSE(Encode(2, 1000, kPositive) == Encode(1, 1000, kPositive));
  EXPECT_TRUE(Encode(2, 1000, kPositive) != Encode(1, 1000, kPositive));
  EXPECT_FALSE(Encode(2, 1000, kPositive) < Encode(1, 1000, kPositive));
  EXPECT_FALSE(Encode(2, 1000, kPositive) <= Encode(1, 1000, kPositive));
  EXPECT_TRUE(Encode(2, 1000, kPositive) > Encode(1, 1000, kPositive));
  EXPECT_TRUE(Encode(2, 1000, kPositive) >= Encode(1, 1000, kPositive));

  EXPECT_FALSE(Encode(2, 1000, kNegative) == Encode(1, 1000, kNegative));
  EXPECT_TRUE(Encode(2, 1000, kNegative) != Encode(1, 1000, kNegative));
  EXPECT_TRUE(Encode(2, 1000, kNegative) < Encode(1, 1000, kNegative));
  EXPECT_TRUE(Encode(2, 1000, kNegative) <= Encode(1, 1000, kNegative));
  EXPECT_FALSE(Encode(2, 1000, kNegative) > Encode(1, 1000, kNegative));
  EXPECT_FALSE(Encode(2, 1000, kNegative) >= Encode(1, 1000, kNegative));
}

TEST_F(DecimalTest, CompareSmallExponent) {
  EXPECT_TRUE(Encode(1, -1000, kPositive) == Encode(1, -1000, kPositive));
  EXPECT_FALSE(Encode(1, -1000, kPositive) != Encode(1, -1000, kPositive));
  EXPECT_FALSE(Encode(1, -1000, kPositive) < Encode(1, -1000, kPositive));
  EXPECT_TRUE(Encode(1, -1000, kPositive) <= Encode(1, -1000, kPositive));
  EXPECT_FALSE(Encode(1, -1000, kPositive) > Encode(1, -1000, kPositive));
  EXPECT_TRUE(Encode(1, -1000, kPositive) >= Encode(1, -1000, kPositive));

  EXPECT_TRUE(Encode(1, -1000, kNegative) == Encode(1, -1000, kNegative));
  EXPECT_FALSE(Encode(1, -1000, kNegative) != Encode(1, -1000, kNegative));
  EXPECT_FALSE(Encode(1, -1000, kNegative) < Encode(1, -1000, kNegative));
  EXPECT_TRUE(Encode(1, -1000, kNegative) <= Encode(1, -1000, kNegative));
  EXPECT_FALSE(Encode(1, -1000, kNegative) > Encode(1, -1000, kNegative));
  EXPECT_TRUE(Encode(1, -1000, kNegative) >= Encode(1, -1000, kNegative));

  EXPECT_FALSE(Encode(2, -1000, kPositive) == Encode(1, -1000, kPositive));
  EXPECT_TRUE(Encode(2, -1000, kPositive) != Encode(1, -1000, kPositive));
  EXPECT_FALSE(Encode(2, -1000, kPositive) < Encode(1, -1000, kPositive));
  EXPECT_FALSE(Encode(2, -1000, kPositive) <= Encode(1, -1000, kPositive));
  EXPECT_TRUE(Encode(2, -1000, kPositive) > Encode(1, -1000, kPositive));
  EXPECT_TRUE(Encode(2, -1000, kPositive) >= Encode(1, -1000, kPositive));

  EXPECT_FALSE(Encode(2, -1000, kNegative) == Encode(1, -1000, kNegative));
  EXPECT_TRUE(Encode(2, -1000, kNegative) != Encode(1, -1000, kNegative));
  EXPECT_TRUE(Encode(2, -1000, kNegative) < Encode(1, -1000, kNegative));
  EXPECT_TRUE(Encode(2, -1000, kNegative) <= Encode(1, -1000, kNegative));
  EXPECT_FALSE(Encode(2, -1000, kNegative) > Encode(1, -1000, kNegative));
  EXPECT_FALSE(Encode(2, -1000, kNegative) >= Encode(1, -1000, kNegative));
}

TEST_F(DecimalTest, CompareSpecialValues) {
  const Decimal infinity(Decimal::Infinity(kPositive));
  const Decimal minus_infinity(Decimal::Infinity(kNegative));
  const Decimal na_n(Decimal::Nan());
  const Decimal zero(Decimal::Zero(kPositive));
  const Decimal minus_zero(Decimal::Zero(kNegative));
  const Decimal ten(10);

  EXPECT_TRUE(zero == zero);
  EXPECT_FALSE(zero != zero);
  EXPECT_FALSE(zero < zero);
  EXPECT_TRUE(zero <= zero);
  EXPECT_FALSE(zero > zero);
  EXPECT_TRUE(zero >= zero);

  EXPECT_TRUE(zero == minus_zero);
  EXPECT_FALSE(zero != minus_zero);
  EXPECT_FALSE(zero < minus_zero);
  EXPECT_TRUE(zero <= minus_zero);
  EXPECT_FALSE(zero > minus_zero);
  EXPECT_TRUE(zero >= minus_zero);

  EXPECT_TRUE(minus_zero == zero);
  EXPECT_FALSE(minus_zero != zero);
  EXPECT_FALSE(minus_zero < zero);
  EXPECT_TRUE(minus_zero <= zero);
  EXPECT_FALSE(minus_zero > zero);
  EXPECT_TRUE(minus_zero >= zero);

  EXPECT_TRUE(minus_zero == minus_zero);
  EXPECT_FALSE(minus_zero != minus_zero);
  EXPECT_FALSE(minus_zero < minus_zero);
  EXPECT_TRUE(minus_zero <= minus_zero);
  EXPECT_FALSE(minus_zero > minus_zero);
  EXPECT_TRUE(minus_zero >= minus_zero);

  EXPECT_TRUE(infinity == infinity);
  EXPECT_FALSE(infinity != infinity);
  EXPECT_FALSE(infinity < infinity);
  EXPECT_TRUE(infinity <= infinity);
  EXPECT_FALSE(infinity > infinity);
  EXPECT_TRUE(infinity >= infinity);

  EXPECT_FALSE(infinity == ten);
  EXPECT_TRUE(infinity != ten);
  EXPECT_FALSE(infinity < ten);
  EXPECT_FALSE(infinity <= ten);
  EXPECT_TRUE(infinity > ten);
  EXPECT_TRUE(infinity >= ten);

  EXPECT_FALSE(infinity == minus_infinity);
  EXPECT_TRUE(infinity != minus_infinity);
  EXPECT_FALSE(infinity < minus_infinity);
  EXPECT_FALSE(infinity <= minus_infinity);
  EXPECT_TRUE(infinity > minus_infinity);
  EXPECT_TRUE(infinity >= minus_infinity);

  EXPECT_FALSE(infinity == na_n);
  EXPECT_FALSE(infinity != na_n);
  EXPECT_FALSE(infinity < na_n);
  EXPECT_FALSE(infinity <= na_n);
  EXPECT_FALSE(infinity > na_n);
  EXPECT_FALSE(infinity >= na_n);

  EXPECT_FALSE(minus_infinity == infinity);
  EXPECT_TRUE(minus_infinity != infinity);
  EXPECT_TRUE(minus_infinity < infinity);
  EXPECT_TRUE(minus_infinity <= infinity);
  EXPECT_FALSE(minus_infinity > infinity);
  EXPECT_FALSE(minus_infinity >= infinity);

  EXPECT_FALSE(minus_infinity == ten);
  EXPECT_TRUE(minus_infinity != ten);
  EXPECT_TRUE(minus_infinity < ten);
  EXPECT_TRUE(minus_infinity <= ten);
  EXPECT_FALSE(minus_infinity > ten);
  EXPECT_FALSE(minus_infinity >= ten);

  EXPECT_TRUE(minus_infinity == minus_infinity);
  EXPECT_FALSE(minus_infinity != minus_infinity);
  EXPECT_FALSE(minus_infinity < minus_infinity);
  EXPECT_TRUE(minus_infinity <= minus_infinity);
  EXPECT_FALSE(minus_infinity > minus_infinity);
  EXPECT_TRUE(minus_infinity >= minus_infinity);

  EXPECT_FALSE(minus_infinity == na_n);
  EXPECT_FALSE(minus_infinity != na_n);
  EXPECT_FALSE(minus_infinity < na_n);
  EXPECT_FALSE(minus_infinity <= na_n);
  EXPECT_FALSE(minus_infinity > na_n);
  EXPECT_FALSE(minus_infinity >= na_n);

  EXPECT_FALSE(na_n == infinity);
  EXPECT_FALSE(na_n != infinity);
  EXPECT_FALSE(na_n < infinity);
  EXPECT_FALSE(na_n <= infinity);
  EXPECT_FALSE(na_n > infinity);
  EXPECT_FALSE(na_n >= infinity);

  EXPECT_FALSE(na_n == ten);
  EXPECT_FALSE(na_n != ten);
  EXPECT_FALSE(na_n < ten);
  EXPECT_FALSE(na_n <= ten);
  EXPECT_FALSE(na_n > ten);
  EXPECT_FALSE(na_n >= ten);

  EXPECT_FALSE(na_n == minus_infinity);
  EXPECT_FALSE(na_n != minus_infinity);
  EXPECT_FALSE(na_n < minus_infinity);
  EXPECT_FALSE(na_n <= minus_infinity);
  EXPECT_FALSE(na_n > minus_infinity);
  EXPECT_FALSE(na_n >= minus_infinity);

  EXPECT_TRUE(na_n == na_n);
  EXPECT_FALSE(na_n != na_n);
  EXPECT_FALSE(na_n < na_n);
  EXPECT_TRUE(na_n <= na_n);
  EXPECT_FALSE(na_n > na_n);
  EXPECT_TRUE(na_n >= na_n);
}

TEST_F(DecimalTest, Constructor) {
  EXPECT_DECIMAL_ENCODED_DATA_EQ(0u, 0, kPositive, Encode(0, 0, kPositive));
  EXPECT_DECIMAL_ENCODED_DATA_EQ(0u, 0, kNegative, Encode(0, 0, kNegative));
  EXPECT_DECIMAL_ENCODED_DATA_EQ(1u, 0, kPositive, Encode(1, 0, kPositive));
  EXPECT_DECIMAL_ENCODED_DATA_EQ(1u, 0, kNegative, Encode(1, 0, kNegative));
  EXPECT_DECIMAL_ENCODED_DATA_EQ(1u, 1022, kPositive,
                                 Encode(1, 1022, kPositive));
  EXPECT_DECIMAL_ENCODED_DATA_EQ(1u, 1022, kNegative,
                                 Encode(1, 1022, kNegative));
  EXPECT_DECIMAL_ENCODED_DATA_EQ(1u, 1023, kPositive,
                                 Encode(1, 1023, kPositive));
  EXPECT_DECIMAL_ENCODED_DATA_EQ(1u, 1023, kNegative,
                                 Encode(1, 1023, kNegative));
  EXPECT_TRUE(Encode(1, 2000, kPositive).IsInfinity());
  EXPECT_TRUE(Encode(1, 2000, kNegative).IsInfinity());
  EXPECT_DECIMAL_ENCODED_DATA_EQ(0u, 0, kPositive, Encode(1, -2000, kPositive));
  EXPECT_DECIMAL_ENCODED_DATA_EQ(0u, 0, kNegative, Encode(1, -2000, kNegative));
  EXPECT_DECIMAL_ENCODED_DATA_EQ(
      UINT64_C(99999999999999998), 0, kPositive,
      Encode(UINT64_C(99999999999999998), 0, kPositive));
  EXPECT_DECIMAL_ENCODED_DATA_EQ(
      UINT64_C(99999999999999998), 0, kNegative,
      Encode(UINT64_C(99999999999999998), 0, kNegative));
  EXPECT_DECIMAL_ENCODED_DATA_EQ(
      UINT64_C(99999999999999999), 0, kPositive,
      Encode(UINT64_C(99999999999999999), 0, kPositive));
  EXPECT_DECIMAL_ENCODED_DATA_EQ(
      UINT64_C(99999999999999999), 0, kNegative,
      Encode(UINT64_C(99999999999999999), 0, kNegative));
  EXPECT_DECIMAL_ENCODED_DATA_EQ(
      UINT64_C(100000000000000000), 0, kPositive,
      Encode(UINT64_C(100000000000000000), 0, kPositive));
  EXPECT_DECIMAL_ENCODED_DATA_EQ(
      UINT64_C(100000000000000000), 0, kNegative,
      Encode(UINT64_C(100000000000000000), 0, kNegative));
}

TEST_F(DecimalTest, Division) {
  EXPECT_EQ(Encode(0, 0, kPositive), Decimal(0) / Decimal(1));
  EXPECT_EQ(Encode(2, 0, kNegative), Decimal(2) / Decimal(-1));
  EXPECT_EQ(Encode(5, -1, kNegative), Decimal(-1) / Decimal(2));
  EXPECT_EQ(Encode(99, 0, kPositive), Decimal(99) / Decimal(1));
  EXPECT_EQ(Decimal(1), Decimal(-50) / Decimal(-50));
  EXPECT_EQ(Encode(UINT64_C(333333333333333333), -18, kPositive),
            Decimal(1) / Decimal(3));
  EXPECT_EQ(Encode(UINT64_C(12345678901234), -1, kPositive),
            Encode(UINT64_C(12345678901234), 0, kPositive) / Decimal(10));
  EXPECT_EQ(Encode(UINT64_C(500005000050000500), -18, kPositive),
            Decimal(50000) / Decimal(99999));
}

TEST_F(DecimalTest, DivisionBigExponent) {
  EXPECT_EQ(Encode(1, 1022, kPositive),
            Encode(1, 1022, kPositive) / Encode(1, 0, kPositive));
  EXPECT_EQ(Encode(1, 0, kPositive),
            Encode(1, 1022, kPositive) / Encode(1, 1022, kPositive));
  EXPECT_EQ(Decimal::Infinity(kPositive),
            Encode(1, 1022, kPositive) / Encode(1, -1000, kPositive));
}

TEST_F(DecimalTest, DivisionSmallExponent) {
  EXPECT_EQ(Encode(1, -1022, kPositive),
            Encode(1, -1022, kPositive) / Encode(1, 0, kPositive));
  EXPECT_EQ(Encode(1, 0, kPositive),
            Encode(1, -1022, kPositive) / Encode(1, -1022, kPositive));
}

TEST_F(DecimalTest, DivisionSpecialValues) {
  const Decimal infinity(Decimal::Infinity(kPositive));
  const Decimal minus_infinity(Decimal::Infinity(kNegative));
  const Decimal na_n(Decimal::Nan());
  const Decimal zero(Decimal::Zero(kPositive));
  const Decimal minus_zero(Decimal::Zero(kNegative));
  const Decimal ten(10);
  const Decimal minus_ten(-10);

  EXPECT_EQ(na_n, zero / zero);
  EXPECT_EQ(na_n, zero / minus_zero);
  EXPECT_EQ(na_n, minus_zero / zero);
  EXPECT_EQ(na_n, minus_zero / minus_zero);

  EXPECT_EQ(infinity, ten / zero);
  EXPECT_EQ(minus_infinity, ten / minus_zero);
  EXPECT_EQ(minus_infinity, minus_ten / zero);
  EXPECT_EQ(infinity, minus_ten / minus_zero);

  EXPECT_EQ(infinity, infinity / zero);
  EXPECT_EQ(minus_infinity, infinity / minus_zero);
  EXPECT_EQ(minus_infinity, minus_infinity / zero);
  EXPECT_EQ(infinity, minus_infinity / minus_zero);

  EXPECT_EQ(na_n, infinity / infinity);
  EXPECT_EQ(na_n, infinity / minus_infinity);
  EXPECT_EQ(na_n, minus_infinity / infinity);
  EXPECT_EQ(na_n, minus_infinity / minus_infinity);

  EXPECT_EQ(zero, ten / infinity);
  EXPECT_EQ(minus_zero, ten / minus_infinity);
  EXPECT_EQ(minus_zero, minus_ten / infinity);
  EXPECT_EQ(zero, minus_ten / minus_infinity);

  EXPECT_EQ(na_n, na_n / na_n);
  EXPECT_EQ(na_n, na_n / ten);
  EXPECT_EQ(na_n, ten / na_n);

  EXPECT_EQ(na_n, na_n / infinity);
  EXPECT_EQ(na_n, na_n / minus_infinity);
  EXPECT_EQ(na_n, infinity / na_n);
  EXPECT_EQ(na_n, minus_infinity / na_n);
}

TEST_F(DecimalTest, EncodedData) {
  EXPECT_EQ(Encode(0, 0, kPositive), Encode(0, 0, kPositive));
  EXPECT_EQ(Encode(0, 0, kNegative), Encode(0, 0, kNegative));
  EXPECT_EQ(Decimal(1), Decimal(1));
  EXPECT_EQ(Encode(1, 0, kNegative), Encode(1, 0, kNegative));
  EXPECT_EQ(Decimal::Infinity(kPositive), Encode(1, 2000, kPositive));
  EXPECT_EQ(Decimal::Zero(kPositive), Encode(1, -2000, kPositive));
}

TEST_F(DecimalTest, Floor) {
  EXPECT_EQ(Decimal(1), Decimal(1).Floor());
  EXPECT_EQ(Decimal(0), Encode(1, -10, kPositive).Floor());
  EXPECT_EQ(Decimal(1), Encode(11, -1, kPositive).Floor());
  EXPECT_EQ(Decimal(1), Encode(13, -1, kPositive).Floor());
  EXPECT_EQ(Decimal(1), Encode(15, -1, kPositive).Floor());
  EXPECT_EQ(Decimal(1), Encode(19, -1, kPositive).Floor());
  EXPECT_EQ(Decimal(1), Encode(193332, -5, kPositive).Floor());
  EXPECT_EQ(Decimal(12), Encode(12002, -3, kPositive).Floor());

  EXPECT_EQ(Decimal(-1), Decimal(-1).Floor());
  EXPECT_EQ(Decimal(-1), Encode(1, -10, kNegative).Floor());
  EXPECT_EQ(Decimal(-2), Encode(11, -1, kNegative).Floor());
  EXPECT_EQ(Decimal(-2), Encode(13, -1, kNegative).Floor());
  EXPECT_EQ(Decimal(-2), Encode(15, -1, kNegative).Floor());
  EXPECT_EQ(Decimal(-2), Encode(19, -1, kNegative).Floor());
  EXPECT_EQ(Decimal(-2), Encode(193332, -5, kNegative).Floor());
  EXPECT_EQ(Decimal(-13), Encode(12002, -3, kNegative).Floor());

  // crbug.com/572769
  EXPECT_EQ(Decimal(-1), Encode(992971299197409433, -18, kNegative).Floor());
}

TEST_F(DecimalTest, FloorBigExponent) {
  EXPECT_EQ(Encode(1, 1000, kPositive), Encode(1, 1000, kPositive).Floor());
  EXPECT_EQ(Encode(1, 1000, kNegative), Encode(1, 1000, kNegative).Floor());
}

TEST_F(DecimalTest, FloorSmallExponent) {
  EXPECT_EQ(Encode(0, 0, kPositive), Encode(1, -1000, kPositive).Floor());
  EXPECT_EQ(Encode(1, 0, kNegative), Encode(1, -1000, kNegative).Floor());
}

TEST_F(DecimalTest, FloorSpecialValues) {
  EXPECT_EQ(Decimal::Infinity(kPositive), Decimal::Infinity(kPositive).Floor());
  EXPECT_EQ(Decimal::Infinity(kNegative), Decimal::Infinity(kNegative).Floor());
  EXPECT_EQ(Decimal::Nan(), Decimal::Nan().Floor());
}

TEST_F(DecimalTest, FromDouble) {
  EXPECT_EQ(Encode(0, 0, kPositive), Decimal::FromDouble(0.0));
  EXPECT_EQ(Encode(0, 0, kNegative), Decimal::FromDouble(-0.0));
  EXPECT_EQ(Encode(1, 0, kPositive), Decimal::FromDouble(1));
  EXPECT_EQ(Encode(1, 0, kNegative), Decimal::FromDouble(-1));
  EXPECT_EQ(Encode(123, 0, kPositive), Decimal::FromDouble(123));
  EXPECT_EQ(Encode(123, 0, kNegative), Decimal::FromDouble(-123));
  EXPECT_EQ(Encode(1, -1, kPositive), Decimal::FromDouble(0.1));
  EXPECT_EQ(Encode(1, -1, kNegative), Decimal::FromDouble(-0.1));
}

TEST_F(DecimalTest, FromDoubleLimits) {
  EXPECT_EQ(Encode(UINT64_C(2220446049250313), -31, kPositive),
            Decimal::FromDouble(std::numeric_limits<double>::epsilon()));
  EXPECT_EQ(Encode(UINT64_C(2220446049250313), -31, kNegative),
            Decimal::FromDouble(-std::numeric_limits<double>::epsilon()));
  EXPECT_EQ(Encode(UINT64_C(17976931348623157), 292, kPositive),
            Decimal::FromDouble(std::numeric_limits<double>::max()));
  EXPECT_EQ(Encode(UINT64_C(17976931348623157), 292, kNegative),
            Decimal::FromDouble(-std::numeric_limits<double>::max()));
  EXPECT_EQ(Encode(UINT64_C(22250738585072014), -324, kPositive),
            Decimal::FromDouble(std::numeric_limits<double>::min()));
  EXPECT_EQ(Encode(UINT64_C(22250738585072014), -324, kNegative),
            Decimal::FromDouble(-std::numeric_limits<double>::min()));
  EXPECT_TRUE(Decimal::FromDouble(std::numeric_limits<double>::infinity())
                  .IsInfinity());
  EXPECT_TRUE(Decimal::FromDouble(-std::numeric_limits<double>::infinity())
                  .IsInfinity());
  EXPECT_TRUE(
      Decimal::FromDouble(std::numeric_limits<double>::quiet_NaN()).IsNaN());
  EXPECT_TRUE(
      Decimal::FromDouble(-std::numeric_limits<double>::quiet_NaN()).IsNaN());
}

TEST_F(DecimalTest, FromInt32) {
  EXPECT_EQ(Encode(0, 0, kPositive), Decimal(0));
  EXPECT_EQ(Encode(1, 0, kPositive), Decimal(1));
  EXPECT_EQ(Encode(1, 0, kNegative), Decimal(-1));
  EXPECT_EQ(Encode(100, 0, kPositive), Decimal(100));
  EXPECT_EQ(Encode(100, 0, kNegative), Decimal(-100));
  EXPECT_EQ(Encode(0x7FFFFFFF, 0, kPositive),
            Decimal(std::numeric_limits<int32_t>::max()));
  EXPECT_EQ(Encode(0x80000000u, 0, kNegative),
            Decimal(std::numeric_limits<int32_t>::min()));
}

TEST_F(DecimalTest, FromString) {
  EXPECT_EQ(Encode(0, 0, kPositive), FromString("0"));
  EXPECT_EQ(Encode(0, 0, kNegative), FromString("-0"));
  EXPECT_EQ(Decimal(1), FromString("1"));
  EXPECT_EQ(Encode(1, 0, kNegative), FromString("-1"));
  EXPECT_EQ(Decimal(1), FromString("01"));
  EXPECT_EQ(Encode(3, 0, kPositive), FromString("+3"));
  EXPECT_EQ(Encode(0, 3, kPositive), FromString("0E3"));
  EXPECT_EQ(Encode(5, -1, kPositive), FromString(".5"));
  EXPECT_EQ(Encode(100, 0, kPositive), FromString("100"));
  EXPECT_EQ(Encode(100, 0, kNegative), FromString("-100"));
  EXPECT_EQ(Encode(123, -2, kPositive), FromString("1.23"));
  EXPECT_EQ(Encode(123, -2, kNegative), FromString("-1.23"));
  EXPECT_EQ(Encode(123, 8, kPositive), FromString("1.23E10"));
  EXPECT_EQ(Encode(123, 8, kNegative), FromString("-1.23E10"));
  EXPECT_EQ(Encode(123, 8, kPositive), FromString("1.23E+10"));
  EXPECT_EQ(Encode(123, 8, kNegative), FromString("-1.23E+10"));
  EXPECT_EQ(Encode(123, -12, kPositive), FromString("1.23E-10"));
  EXPECT_EQ(Encode(123, -12, kNegative), FromString("-1.23E-10"));
  EXPECT_EQ(Encode(5, -7, kPositive), FromString("0.0000005"));
  EXPECT_EQ(Encode(0, 0, kPositive), FromString("0e9999"));
  EXPECT_EQ(Encode(123, -3, kPositive), FromString("0.123"));
  EXPECT_EQ(Encode(0, -2, kPositive), FromString("00.00"));
  EXPECT_EQ(Encode(1, 2, kPositive), FromString("1E2"));
  EXPECT_EQ(Decimal::Infinity(kPositive), FromString("1E20000"));
  EXPECT_EQ(Decimal::Zero(kPositive), FromString("1E-20000"));
  EXPECT_EQ(Encode(1000, 1023, kPositive), FromString("1E1026"));
  EXPECT_EQ(Decimal::Zero(kPositive), FromString("1E-1026"));
  EXPECT_EQ(Decimal::Infinity(kPositive), FromString("1234567890E1036"));

  // 2^1024
  const uint64_t kLeadingDigitsOf2PowerOf1024 = UINT64_C(17976931348623159);
  EXPECT_EQ(Encode(kLeadingDigitsOf2PowerOf1024, 292, kPositive),
            FromString("1797693134862315907729305190789024733617976978942306572"
                       "7343008115773267580550096313270847732240753602112011387"
                       "9871393357658789768814416622492847430639474124377767893"
                       "4248654852763022196012460941194530829520850057688381506"
                       "8234246288147391311054082723716335051068458629823994724"
                       "5938479716304835356329624224137216"));
}

// These strings are look like proper number, but we don't accept them.
TEST_F(DecimalTest, FromStringLikeNumber) {
  EXPECT_EQ(Decimal::Nan(), FromString(" 123 "));
  EXPECT_EQ(Decimal::Nan(), FromString("1,234"));
}

// fromString doesn't support infinity and NaN.
TEST_F(DecimalTest, FromStringSpecialValues) {
  EXPECT_EQ(Decimal::Nan(), FromString("INF"));
  EXPECT_EQ(Decimal::Nan(), FromString("Infinity"));
  EXPECT_EQ(Decimal::Nan(), FromString("infinity"));
  EXPECT_EQ(Decimal::Nan(), FromString("+Infinity"));
  EXPECT_EQ(Decimal::Nan(), FromString("+infinity"));
  EXPECT_EQ(Decimal::Nan(), FromString("-Infinity"));
  EXPECT_EQ(Decimal::Nan(), FromString("-infinity"));
  EXPECT_EQ(Decimal::Nan(), FromString("NaN"));
  EXPECT_EQ(Decimal::Nan(), FromString("nan"));
  EXPECT_EQ(Decimal::Nan(), FromString("+NaN"));
  EXPECT_EQ(Decimal::Nan(), FromString("+nan"));
  EXPECT_EQ(Decimal::Nan(), FromString("-NaN"));
  EXPECT_EQ(Decimal::Nan(), FromString("-nan"));
}

TEST_F(DecimalTest, fromStringTruncated) {
  EXPECT_EQ(Decimal::Nan(), FromString("x"));
  EXPECT_EQ(Decimal::Nan(), FromString("0."));
  EXPECT_EQ(Decimal::Nan(), FromString("1x"));

  EXPECT_EQ(Decimal::Nan(), FromString("1Ex"));
  EXPECT_EQ(Decimal::Nan(), FromString("1E2x"));
  EXPECT_EQ(Decimal::Nan(), FromString("1E+x"));
}

TEST_F(DecimalTest, Multiplication) {
  EXPECT_EQ(Encode(0, 0, kPositive), Decimal(0) * Decimal(0));
  EXPECT_EQ(Encode(2, 0, kNegative), Decimal(2) * Decimal(-1));
  EXPECT_EQ(Encode(2, 0, kNegative), Decimal(-1) * Decimal(2));
  EXPECT_EQ(Encode(99, 0, kPositive), Decimal(99) * Decimal(1));
  EXPECT_EQ(Encode(2500, 0, kPositive), Decimal(-50) * Decimal(-50));
  EXPECT_EQ(Encode(1, 21, kPositive),
            Encode(UINT64_C(10000000000), 0, kPositive) *
                Encode(UINT64_C(100000000000), 0, kPositive));
}

TEST_F(DecimalTest, MultiplicationBigExponent) {
  EXPECT_EQ(Encode(1, 1022, kPositive),
            Encode(1, 1022, kPositive) * Encode(1, 0, kPositive));
  EXPECT_EQ(Decimal::Infinity(kPositive),
            Encode(1, 1022, kPositive) * Encode(1, 1022, kPositive));
  EXPECT_EQ(Encode(1, 22, kPositive),
            Encode(1, 1022, kPositive) * Encode(1, -1000, kPositive));
}

TEST_F(DecimalTest, MultiplicationSmallExponent) {
  EXPECT_EQ(Encode(1, -1022, kPositive),
            Encode(1, -1022, kPositive) * Encode(1, 0, kPositive));
  EXPECT_EQ(Encode(0, 0, kPositive),
            Encode(1, -1022, kPositive) * Encode(1, -1022, kPositive));
}

TEST_F(DecimalTest, MultiplicationSpecialValues) {
  const Decimal infinity(Decimal::Infinity(kPositive));
  const Decimal minus_infinity(Decimal::Infinity(kNegative));
  const Decimal na_n(Decimal::Nan());
  const Decimal ten(10);
  const Decimal minus_ten(-10);
  const Decimal zero(Decimal::Zero(kPositive));
  const Decimal minus_zero(Decimal::Zero(kNegative));

  EXPECT_EQ(infinity, infinity * infinity);
  EXPECT_EQ(minus_infinity, infinity * minus_infinity);
  EXPECT_EQ(minus_infinity, minus_infinity * infinity);
  EXPECT_EQ(infinity, minus_infinity * minus_infinity);

  EXPECT_EQ(na_n, infinity * zero);
  EXPECT_EQ(na_n, zero * minus_infinity);
  EXPECT_EQ(na_n, minus_infinity * zero);
  EXPECT_EQ(na_n, minus_infinity * zero);

  EXPECT_EQ(na_n, infinity * minus_zero);
  EXPECT_EQ(na_n, minus_zero * minus_infinity);
  EXPECT_EQ(na_n, minus_infinity * minus_zero);
  EXPECT_EQ(na_n, minus_infinity * minus_zero);

  EXPECT_EQ(infinity, infinity * ten);
  EXPECT_EQ(infinity, ten * infinity);
  EXPECT_EQ(minus_infinity, minus_infinity * ten);
  EXPECT_EQ(minus_infinity, ten * minus_infinity);

  EXPECT_EQ(minus_infinity, infinity * minus_ten);
  EXPECT_EQ(minus_infinity, minus_ten * infinity);
  EXPECT_EQ(infinity, minus_infinity * minus_ten);
  EXPECT_EQ(infinity, minus_ten * minus_infinity);

  EXPECT_EQ(na_n, na_n * na_n);
  EXPECT_EQ(na_n, na_n * ten);
  EXPECT_EQ(na_n, ten * na_n);

  EXPECT_EQ(na_n, na_n * infinity);
  EXPECT_EQ(na_n, na_n * minus_infinity);
  EXPECT_EQ(na_n, infinity * na_n);
  EXPECT_EQ(na_n, minus_infinity * na_n);
}

TEST_F(DecimalTest, Negate) {
  EXPECT_EQ(Encode(0, 0, kNegative), -Encode(0, 0, kPositive));
  EXPECT_EQ(Encode(0, 0, kPositive), -Encode(0, 0, kNegative));

  EXPECT_EQ(Encode(0, 10, kNegative), -Encode(0, 10, kPositive));
  EXPECT_EQ(Encode(0, 10, kPositive), -Encode(0, 10, kNegative));

  EXPECT_EQ(Encode(0, -10, kNegative), -Encode(0, -10, kPositive));
  EXPECT_EQ(Encode(0, -10, kPositive), -Encode(0, -10, kNegative));

  EXPECT_EQ(Encode(1, 0, kNegative), -Encode(1, 0, kPositive));
  EXPECT_EQ(Encode(1, 0, kPositive), -Encode(1, 0, kNegative));

  EXPECT_EQ(Encode(1, 10, kNegative), -Encode(1, 10, kPositive));
  EXPECT_EQ(Encode(1, 10, kPositive), -Encode(1, 10, kNegative));

  EXPECT_EQ(Encode(1, -10, kNegative), -Encode(1, -10, kPositive));
  EXPECT_EQ(Encode(1, -10, kPositive), -Encode(1, -10, kNegative));
}

TEST_F(DecimalTest, NegateBigExponent) {
  EXPECT_EQ(Encode(1, 1000, kNegative), -Encode(1, 1000, kPositive));
  EXPECT_EQ(Encode(1, 1000, kPositive), -Encode(1, 1000, kNegative));
}

TEST_F(DecimalTest, NegateSmallExponent) {
  EXPECT_EQ(Encode(1, -1000, kNegative), -Encode(1, -1000, kPositive));
  EXPECT_EQ(Encode(1, -1000, kPositive), -Encode(1, -1000, kNegative));
}

TEST_F(DecimalTest, NegateSpecialValues) {
  EXPECT_EQ(Decimal::Infinity(kNegative), -Decimal::Infinity(kPositive));
  EXPECT_EQ(Decimal::Infinity(kPositive), -Decimal::Infinity(kNegative));
  EXPECT_EQ(Decimal::Nan(), -Decimal::Nan());
}

TEST_F(DecimalTest, Predicates) {
  EXPECT_TRUE(Decimal::Zero(kPositive).IsFinite());
  EXPECT_FALSE(Decimal::Zero(kPositive).IsInfinity());
  EXPECT_FALSE(Decimal::Zero(kPositive).IsNaN());
  EXPECT_TRUE(Decimal::Zero(kPositive).IsPositive());
  EXPECT_FALSE(Decimal::Zero(kPositive).IsNegative());
  EXPECT_FALSE(Decimal::Zero(kPositive).IsSpecial());
  EXPECT_TRUE(Decimal::Zero(kPositive).IsZero());

  EXPECT_TRUE(Decimal::Zero(kNegative).IsFinite());
  EXPECT_FALSE(Decimal::Zero(kNegative).IsInfinity());
  EXPECT_FALSE(Decimal::Zero(kNegative).IsNaN());
  EXPECT_FALSE(Decimal::Zero(kNegative).IsPositive());
  EXPECT_TRUE(Decimal::Zero(kNegative).IsNegative());
  EXPECT_FALSE(Decimal::Zero(kNegative).IsSpecial());
  EXPECT_TRUE(Decimal::Zero(kNegative).IsZero());

  EXPECT_TRUE(Decimal(123).IsFinite());
  EXPECT_FALSE(Decimal(123).IsInfinity());
  EXPECT_FALSE(Decimal(123).IsNaN());
  EXPECT_TRUE(Decimal(123).IsPositive());
  EXPECT_FALSE(Decimal(123).IsNegative());
  EXPECT_FALSE(Decimal(123).IsSpecial());
  EXPECT_FALSE(Decimal(123).IsZero());

  EXPECT_TRUE(Decimal(-123).IsFinite());
  EXPECT_FALSE(Decimal(-123).IsInfinity());
  EXPECT_FALSE(Decimal(-123).IsNaN());
  EXPECT_FALSE(Decimal(-123).IsPositive());
  EXPECT_TRUE(Decimal(-123).IsNegative());
  EXPECT_FALSE(Decimal(-123).IsSpecial());
  EXPECT_FALSE(Decimal(-123).IsZero());
}

TEST_F(DecimalTest, PredicatesSpecialValues) {
  EXPECT_FALSE(Decimal::Infinity(kPositive).IsFinite());
  EXPECT_TRUE(Decimal::Infinity(kPositive).IsInfinity());
  EXPECT_FALSE(Decimal::Infinity(kPositive).IsNaN());
  EXPECT_TRUE(Decimal::Infinity(kPositive).IsPositive());
  EXPECT_FALSE(Decimal::Infinity(kPositive).IsNegative());
  EXPECT_TRUE(Decimal::Infinity(kPositive).IsSpecial());
  EXPECT_FALSE(Decimal::Infinity(kPositive).IsZero());

  EXPECT_FALSE(Decimal::Infinity(kNegative).IsFinite());
  EXPECT_TRUE(Decimal::Infinity(kNegative).IsInfinity());
  EXPECT_FALSE(Decimal::Infinity(kNegative).IsNaN());
  EXPECT_FALSE(Decimal::Infinity(kNegative).IsPositive());
  EXPECT_TRUE(Decimal::Infinity(kNegative).IsNegative());
  EXPECT_TRUE(Decimal::Infinity(kNegative).IsSpecial());
  EXPECT_FALSE(Decimal::Infinity(kNegative).IsZero());

  EXPECT_FALSE(Decimal::Nan().IsFinite());
  EXPECT_FALSE(Decimal::Nan().IsInfinity());
  EXPECT_TRUE(Decimal::Nan().IsNaN());
  EXPECT_TRUE(Decimal::Nan().IsSpecial());
  EXPECT_FALSE(Decimal::Nan().IsZero());
}

// LayoutTests/fast/forms/number/number-stepup-stepdown-from-renderer
TEST_F(DecimalTest, RealWorldExampleNumberStepUpStepDownFromRenderer) {
  EXPECT_DECIMAL_STREQ("10", StepDown("0", "100", "10", "19", 1));
  EXPECT_DECIMAL_STREQ("90", StepUp("0", "99", "10", "89", 1));
  EXPECT_DECIMAL_STREQ(
      "1", StepUp("0", "1", "0.33333333333333333", "0", 3));  // step=1/3
  EXPECT_DECIMAL_STREQ("0.01", StepUp("0", "0.01", "0.0033333333333333333", "0",
                                      3));  // step=1/300
  EXPECT_DECIMAL_STREQ(
      "1", StepUp("0", "1", "0.003921568627450980", "0", 255));  // step=1/255
  EXPECT_DECIMAL_STREQ("1", StepUp("0", "1", "0.1", "0", 10));
}

TEST_F(DecimalTest, RealWorldExampleNumberStepUpStepDownFromRendererRounding) {
  EXPECT_DECIMAL_STREQ("5.015", StepUp("0", "100", "0.005", "5.005", 2));
  EXPECT_DECIMAL_STREQ("5.06", StepUp("0", "100", "0.005", "5.005", 11));
  EXPECT_DECIMAL_STREQ("5.065", StepUp("0", "100", "0.005", "5.005", 12));

  EXPECT_DECIMAL_STREQ("5.015", StepUp("4", "9", "0.005", "5.005", 2));
  EXPECT_DECIMAL_STREQ("5.06", StepUp("4", "9", "0.005", "5.005", 11));
  EXPECT_DECIMAL_STREQ("5.065", StepUp("4", "9", "0.005", "5.005", 12));
}

TEST_F(DecimalTest, RealWorldExampleRangeStepUpStepDown) {
  EXPECT_DECIMAL_STREQ("1e+38", StepUp("0", "1E38", "1", "1E38", 9));
  EXPECT_DECIMAL_STREQ("1e+38", StepDown("0", "1E38", "1", "1E38", 9));
}

TEST_F(DecimalTest, Remainder) {
  EXPECT_EQ(Encode(21, -1, kPositive), Encode(21, -1, kPositive).Remainder(3));
  EXPECT_EQ(Decimal(1), Decimal(10).Remainder(3));
  EXPECT_EQ(Decimal(1), Decimal(10).Remainder(-3));
  EXPECT_EQ(Encode(1, 0, kNegative), Decimal(-10).Remainder(3));
  EXPECT_EQ(Decimal(-1), Decimal(-10).Remainder(-3));
  EXPECT_EQ(Encode(2, -1, kPositive), Encode(102, -1, kPositive).Remainder(1));
  EXPECT_EQ(Encode(1, -1, kPositive),
            Decimal(10).Remainder(Encode(3, -1, kPositive)));
  EXPECT_EQ(Decimal(1),
            Encode(36, -1, kPositive).Remainder(Encode(13, -1, kPositive)));
  EXPECT_EQ(Encode(1, 86, kPositive),
            (Encode(1234, 100, kPositive).Remainder(Decimal(3))));
  EXPECT_EQ(Decimal(500), (Decimal(500).Remainder(1000)));
  EXPECT_EQ(Decimal(-500), (Decimal(-500).Remainder(1000)));
}

TEST_F(DecimalTest, RemainderBigExponent) {
  EXPECT_EQ(Encode(0, 1022, kPositive),
            Encode(1, 1022, kPositive).Remainder(Encode(1, 0, kPositive)));
  EXPECT_EQ(Encode(0, 1022, kPositive),
            Encode(1, 1022, kPositive).Remainder(Encode(1, 1022, kPositive)));
  EXPECT_EQ(Decimal::Infinity(kPositive),
            Encode(1, 1022, kPositive).Remainder(Encode(1, -1000, kPositive)));
}

TEST_F(DecimalTest, RemainderSmallExponent) {
  EXPECT_EQ(Encode(1, -1022, kPositive),
            Encode(1, -1022, kPositive).Remainder(Encode(1, 0, kPositive)));
  EXPECT_EQ(Encode(0, -1022, kPositive),
            Encode(1, -1022, kPositive).Remainder(Encode(1, -1022, kPositive)));
}

TEST_F(DecimalTest, RemainderSpecialValues) {
  EXPECT_EQ(Decimal::Infinity(kPositive),
            Decimal::Infinity(kPositive).Remainder(1));
  EXPECT_EQ(Decimal::Infinity(kNegative),
            Decimal::Infinity(kNegative).Remainder(1));
  EXPECT_EQ(Decimal::Nan(), Decimal::Nan().Remainder(1));

  EXPECT_EQ(Decimal::Infinity(kNegative),
            Decimal::Infinity(kPositive).Remainder(-1));
  EXPECT_EQ(Decimal::Infinity(kPositive),
            Decimal::Infinity(kNegative).Remainder(-1));
  EXPECT_EQ(Decimal::Nan(), Decimal::Nan().Remainder(-1));

  EXPECT_EQ(Decimal::Infinity(kPositive),
            Decimal::Infinity(kPositive).Remainder(3));
  EXPECT_EQ(Decimal::Infinity(kNegative),
            Decimal::Infinity(kNegative).Remainder(3));
  EXPECT_EQ(Decimal::Nan(), Decimal::Nan().Remainder(3));

  EXPECT_EQ(Decimal::Infinity(kNegative),
            Decimal::Infinity(kPositive).Remainder(-1));
  EXPECT_EQ(Decimal::Infinity(kPositive),
            Decimal::Infinity(kNegative).Remainder(-1));
  EXPECT_EQ(Decimal::Nan(), Decimal::Nan().Remainder(-1));

  EXPECT_EQ(Decimal::Nan(), Decimal(1).Remainder(Decimal::Infinity(kPositive)));
  EXPECT_EQ(Decimal::Nan(), Decimal(1).Remainder(Decimal::Infinity(kNegative)));
  EXPECT_EQ(Decimal::Nan(), Decimal(1).Remainder(Decimal::Nan()));
}

TEST_F(DecimalTest, Round) {
  EXPECT_EQ(Decimal(1), (Decimal(9) / Decimal(10)).Round());
  EXPECT_EQ(Decimal(25), (Decimal(5) / FromString("0.200")).Round());
  EXPECT_EQ(Decimal(3), (Decimal(5) / Decimal(2)).Round());
  EXPECT_EQ(Decimal(1), (Decimal(2) / Decimal(3)).Round());
  EXPECT_EQ(Decimal(3), (Decimal(10) / Decimal(3)).Round());
  EXPECT_EQ(Decimal(3), (Decimal(1) / FromString("0.3")).Round());
  EXPECT_EQ(Decimal(10), (Decimal(1) / FromString("0.1")).Round());
  EXPECT_EQ(Decimal(5), (Decimal(1) / FromString("0.2")).Round());
  EXPECT_EQ(Decimal(10), (FromString("10.2") / 1).Round());
  EXPECT_EQ(Encode(1234, 100, kPositive), Encode(1234, 100, kPositive).Round());

  EXPECT_EQ(Decimal(2), Encode(190002, -5, kPositive).Round());
  EXPECT_EQ(Decimal(2), Encode(150002, -5, kPositive).Round());
  EXPECT_EQ(Decimal(2), Encode(150000, -5, kPositive).Round());
  EXPECT_EQ(Decimal(12), Encode(12492, -3, kPositive).Round());
  EXPECT_EQ(Decimal(13), Encode(12502, -3, kPositive).Round());

  EXPECT_EQ(Decimal(-2), Encode(190002, -5, kNegative).Round());
  EXPECT_EQ(Decimal(-2), Encode(150002, -5, kNegative).Round());
  EXPECT_EQ(Decimal(-2), Encode(150000, -5, kNegative).Round());
  EXPECT_EQ(Decimal(-12), Encode(12492, -3, kNegative).Round());
  EXPECT_EQ(Decimal(-13), Encode(12502, -3, kNegative).Round());
}

TEST_F(DecimalTest, RoundSpecialValues) {
  EXPECT_EQ(Decimal::Infinity(kPositive), Decimal::Infinity(kPositive).Round());
  EXPECT_EQ(Decimal::Infinity(kNegative), Decimal::Infinity(kNegative).Round());
  EXPECT_EQ(Decimal::Nan(), Decimal::Nan().Round());
}

TEST_F(DecimalTest, Subtract) {
  EXPECT_EQ(Encode(0, 0, kPositive), Decimal(0) - Decimal(0));
  EXPECT_EQ(Encode(3, 0, kPositive), Decimal(2) - Decimal(-1));
  EXPECT_EQ(Encode(3, 0, kNegative), Decimal(-1) - Decimal(2));
  EXPECT_EQ(Encode(98, 0, kPositive), Decimal(99) - Decimal(1));
  EXPECT_EQ(Encode(0, 0, kPositive), Decimal(-50) - Decimal(-50));
  EXPECT_EQ(Encode(UINT64_C(1000000000000000), 35, kPositive),
            Encode(1, 50, kPositive) - Decimal(1));
  EXPECT_EQ(Encode(UINT64_C(1000000000000000), 35, kNegative),
            Decimal(1) - Encode(1, 50, kPositive));
}

TEST_F(DecimalTest, SubtractBigExponent) {
  EXPECT_EQ(Encode(1, 1022, kPositive),
            Encode(1, 1022, kPositive) - Encode(1, 0, kPositive));
  EXPECT_EQ(Encode(0, 0, kPositive),
            Encode(1, 1022, kPositive) - Encode(1, 1022, kPositive));
  EXPECT_EQ(Encode(1, 1022, kPositive),
            Encode(1, 1022, kPositive) + Encode(1, -1000, kPositive));
}

TEST_F(DecimalTest, SubtractSmallExponent) {
  EXPECT_EQ(Encode(UINT64_C(10000000000000000), -16, kNegative),
            Encode(1, -1022, kPositive) - Encode(1, 0, kPositive));
  EXPECT_EQ(Encode(0, 0, kPositive),
            Encode(1, -1022, kPositive) - Encode(1, -1022, kPositive));
}

TEST_F(DecimalTest, SubtractSpecialValues) {
  const Decimal infinity(Decimal::Infinity(kPositive));
  const Decimal minus_infinity(Decimal::Infinity(kNegative));
  const Decimal na_n(Decimal::Nan());
  const Decimal ten(10);

  EXPECT_EQ(na_n, infinity - infinity);
  EXPECT_EQ(infinity, infinity - minus_infinity);
  EXPECT_EQ(minus_infinity, minus_infinity - infinity);
  EXPECT_EQ(na_n, minus_infinity - minus_infinity);

  EXPECT_EQ(infinity, infinity - ten);
  EXPECT_EQ(minus_infinity, ten - infinity);
  EXPECT_EQ(minus_infinity, minus_infinity - ten);
  EXPECT_EQ(infinity, ten - minus_infinity);

  EXPECT_EQ(na_n, na_n - na_n);
  EXPECT_EQ(na_n, na_n - ten);
  EXPECT_EQ(na_n, ten - na_n);

  EXPECT_EQ(na_n, na_n - infinity);
  EXPECT_EQ(na_n, na_n - minus_infinity);
  EXPECT_EQ(na_n, infinity - na_n);
  EXPECT_EQ(na_n, minus_infinity - na_n);
}

TEST_F(DecimalTest, ToDouble) {
  EXPECT_EQ(0.0, Encode(0, 0, kPositive).ToDouble());
  EXPECT_EQ(-0.0, Encode(0, 0, kNegative).ToDouble());

  EXPECT_EQ(1.0, Encode(1, 0, kPositive).ToDouble());
  EXPECT_EQ(-1.0, Encode(1, 0, kNegative).ToDouble());

  EXPECT_EQ(0.1, Encode(1, -1, kPositive).ToDouble());
  EXPECT_EQ(-0.1, Encode(1, -1, kNegative).ToDouble());
  EXPECT_EQ(0.3, Encode(3, -1, kPositive).ToDouble());
  EXPECT_EQ(-0.3, Encode(3, -1, kNegative).ToDouble());
  EXPECT_EQ(0.6, Encode(6, -1, kPositive).ToDouble());
  EXPECT_EQ(-0.6, Encode(6, -1, kNegative).ToDouble());
  EXPECT_EQ(0.7, Encode(7, -1, kPositive).ToDouble());
  EXPECT_EQ(-0.7, Encode(7, -1, kNegative).ToDouble());

  EXPECT_EQ(0.01, Encode(1, -2, kPositive).ToDouble());
  EXPECT_EQ(0.001, Encode(1, -3, kPositive).ToDouble());
  EXPECT_EQ(0.0001, Encode(1, -4, kPositive).ToDouble());
  EXPECT_EQ(0.00001, Encode(1, -5, kPositive).ToDouble());

  EXPECT_EQ(1e+308, Encode(1, 308, kPositive).ToDouble());
  EXPECT_EQ(1e-307, Encode(1, -307, kPositive).ToDouble());

  EXPECT_TRUE(std::isinf(Encode(1, 1000, kPositive).ToDouble()));
  EXPECT_EQ(0.0, Encode(1, -1000, kPositive).ToDouble());
}

TEST_F(DecimalTest, ToDoubleSpecialValues) {
  EXPECT_TRUE(std::isinf(Decimal::Infinity(Decimal::kPositive).ToDouble()));
  EXPECT_TRUE(std::isinf(Decimal::Infinity(Decimal::kNegative).ToDouble()));
  EXPECT_TRUE(std::isnan(Decimal::Nan().ToDouble()));
}

TEST_F(DecimalTest, ToString) {
  EXPECT_DECIMAL_STREQ("0", Decimal::Zero(kPositive));
  EXPECT_DECIMAL_STREQ("-0", Decimal::Zero(kNegative));
  EXPECT_DECIMAL_STREQ("1", Decimal(1));
  EXPECT_DECIMAL_STREQ("-1", Decimal(-1));
  EXPECT_DECIMAL_STREQ("1234567", Decimal(1234567));
  EXPECT_DECIMAL_STREQ("-1234567", Decimal(-1234567));
  EXPECT_DECIMAL_STREQ("0.5", Encode(5, -1, kPositive));
  EXPECT_DECIMAL_STREQ("-0.5", Encode(5, -1, kNegative));
  EXPECT_DECIMAL_STREQ("12.345", Encode(12345, -3, kPositive));
  EXPECT_DECIMAL_STREQ("-12.345", Encode(12345, -3, kNegative));
  EXPECT_DECIMAL_STREQ("0.12345", Encode(12345, -5, kPositive));
  EXPECT_DECIMAL_STREQ("-0.12345", Encode(12345, -5, kNegative));
  EXPECT_DECIMAL_STREQ("50", Encode(50, 0, kPositive));
  EXPECT_DECIMAL_STREQ("-50", Encode(50, 0, kNegative));
  EXPECT_DECIMAL_STREQ("5e+1", Encode(5, 1, kPositive));
  EXPECT_DECIMAL_STREQ("-5e+1", Encode(5, 1, kNegative));
  EXPECT_DECIMAL_STREQ("5.678e+103", Encode(5678, 100, kPositive));
  EXPECT_DECIMAL_STREQ("-5.678e+103", Encode(5678, 100, kNegative));
  EXPECT_DECIMAL_STREQ("5.678e-97", Encode(5678, -100, kPositive));
  EXPECT_DECIMAL_STREQ("-5.678e-97", Encode(5678, -100, kNegative));
  EXPECT_DECIMAL_STREQ("8639999913600001",
                       Encode(UINT64_C(8639999913600001), 0, kPositive));
  EXPECT_DECIMAL_STREQ(
      "9007199254740991",
      Encode((static_cast<uint64_t>(1) << DBL_MANT_DIG) - 1, 0, kPositive));
  EXPECT_DECIMAL_STREQ("99999999999999999",
                       Encode(UINT64_C(99999999999999999), 0, kPositive));
  EXPECT_DECIMAL_STREQ("9.9999999999999999e+17",
                       Encode(UINT64_C(99999999999999999), 1, kPositive));
  EXPECT_DECIMAL_STREQ("9.9999999999999999e+18",
                       Encode(UINT64_C(99999999999999999), 2, kPositive));
  EXPECT_DECIMAL_STREQ("1e+16",
                       Encode(UINT64_C(99999999999999999), -1, kPositive));
  EXPECT_DECIMAL_STREQ("1000000000000000",
                       Encode(UINT64_C(99999999999999999), -2, kPositive));
  EXPECT_DECIMAL_STREQ("1",
                       Encode(UINT64_C(99999999999999999), -17, kPositive));
  EXPECT_DECIMAL_STREQ("0.001",
                       Encode(UINT64_C(99999999999999999), -20, kPositive));
  EXPECT_DECIMAL_STREQ("1e-83",
                       Encode(UINT64_C(99999999999999999), -100, kPositive));
}

TEST_F(DecimalTest, ToStringSpecialValues) {
  EXPECT_DECIMAL_STREQ("Infinity", Decimal::Infinity(kPositive));
  EXPECT_DECIMAL_STREQ("-Infinity", Decimal::Infinity(kNegative));
  EXPECT_DECIMAL_STREQ("NaN", Decimal::Nan());
}

}  // namespace blink
