/*
 * 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 "sky/engine/config.h"
#include "sky/engine/platform/Decimal.h"

#include <float.h>
#include <gtest/gtest.h>
#include "sky/engine/wtf/MathExtras.h"
#include "sky/engine/wtf/text/CString.h"

namespace blink {

std::ostream& operator<<(std::ostream& os, const Decimal& decimal)
{
    Decimal::EncodedData data = decimal.value();
    return os
        << "encode(" << String::number(data.coefficient()).ascii().data()
        << ", " << String::number(data.exponent()).ascii().data()
        << ", " << (data.sign() == Decimal::Negative ? "Negative" : "Positive")
        << ")=" << decimal.toString().ascii().data();
}

} // namespace blink

using namespace blink;

// Simulate WebCore/html/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;
        ASSERT(result.isFinite());
        return result > maximum ? result - step : result;
    }
};

class DecimalTest : public ::testing::Test {
protected:
    typedef Decimal::Sign Sign;
    protected: static const Sign Positive = Decimal::Positive;
    protected: static const Sign Negative = Decimal::Negative;

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

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

    protected: Decimal stepDown(const String& minimum, const String& maximum, const String& step, const String& valueString, int numberOfStepTimes)
    {
        DecimalStepRange stepRange(fromString(minimum), fromString(maximum), fromString(step));
        Decimal value = fromString(valueString);
        for (int i = 0; i < numberOfStepTimes; ++i) {
            value -= stepRange.step;
            value = stepRange.clampValue(value);
        }
        return value;
    }

    protected: Decimal stepUp(const String& minimum, const String& maximum, const String& step, const String& valueString, int numberOfStepTimes)
    {
        DecimalStepRange stepRange(fromString(minimum), fromString(maximum), fromString(step));
        Decimal value = fromString(valueString);
        for (int i = 0; i < numberOfStepTimes; ++i) {
            value += stepRange.step;
            value = stepRange.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().sign());

#define EXPECT_DECIMAL_STREQ(expected, decimal) EXPECT_STREQ((expected), (decimal).toString().ascii().data())

TEST_F(DecimalTest, Abs)
{
    EXPECT_EQ(encode(0, 0, Positive), encode(0, 0, Positive).abs());
    EXPECT_EQ(encode(0, 0, Positive), encode(0, 0, Negative).abs());

    EXPECT_EQ(encode(0, 10, Positive), encode(0, 10, Positive).abs());
    EXPECT_EQ(encode(0, 10, Positive), encode(0, 10, Negative).abs());

    EXPECT_EQ(encode(0, -10, Positive), encode(0, -10, Positive).abs());
    EXPECT_EQ(encode(0, -10, Positive), encode(0, -10, Negative).abs());

    EXPECT_EQ(encode(1, 0, Positive), encode(1, 0, Positive).abs());
    EXPECT_EQ(encode(1, 0, Positive), encode(1, 0, Negative).abs());

    EXPECT_EQ(encode(1, 10, Positive), encode(1, 10, Positive).abs());
    EXPECT_EQ(encode(1, 10, Positive), encode(1, 10, Negative).abs());

    EXPECT_EQ(encode(1, -10, Positive), encode(1, -10, Positive).abs());
    EXPECT_EQ(encode(1, -10, Positive), encode(1, -10, Negative).abs());
}

TEST_F(DecimalTest, AbsBigExponent)
{
    EXPECT_EQ(encode(1, 1000, Positive), encode(1, 1000, Positive).abs());
    EXPECT_EQ(encode(1, 1000, Positive), encode(1, 1000, Negative).abs());
}

TEST_F(DecimalTest, AbsSmallExponent)
{
    EXPECT_EQ(encode(1, -1000, Positive), encode(1, -1000, Positive).abs());
    EXPECT_EQ(encode(1, -1000, Positive), encode(1, -1000, Negative).abs());
}

TEST_F(DecimalTest, AbsSpecialValues)
{
    EXPECT_EQ(Decimal::infinity(Positive), Decimal::infinity(Positive).abs());
    EXPECT_EQ(Decimal::infinity(Positive), Decimal::infinity(Negative).abs());
    EXPECT_EQ(Decimal::nan(), Decimal::nan().abs());
}

TEST_F(DecimalTest, Add)
{
    EXPECT_EQ(encode(0, 0, Positive), 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, Positive), Decimal(99) + Decimal(1));
    EXPECT_EQ(encode(100, 0, Negative), Decimal(-50) + Decimal(-50));
    EXPECT_EQ(encode(UINT64_C(1000000000000000), 35, Positive), encode(1, 50, Positive) + Decimal(1));
    EXPECT_EQ(encode(UINT64_C(1000000000000000), 35, Positive), Decimal(1) + encode(1, 50, Positive));
    EXPECT_EQ(encode(UINT64_C(10000000001), 0, Positive), encode(1, 10, Positive) + Decimal(1));
    EXPECT_EQ(encode(UINT64_C(10000000001), 0, Positive), Decimal(1) + encode(1, 10, Positive));
    EXPECT_EQ(encode(1, 0, Positive), encode(1, -1022, Positive) + encode(1, 0, Positive));
    EXPECT_EQ(encode(2, -1022, Positive), encode(1, -1022, Positive) + encode(1, -1022, Positive));
}

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

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

TEST_F(DecimalTest, AddSpecialValues)
{
    const Decimal Infinity(Decimal::infinity(Positive));
    const Decimal MinusInfinity(Decimal::infinity(Negative));
    const Decimal NaN(Decimal::nan());
    const Decimal Ten(10);

    EXPECT_EQ(Infinity, Infinity + Infinity);
    EXPECT_EQ(NaN, Infinity + MinusInfinity);
    EXPECT_EQ(NaN, MinusInfinity + Infinity);
    EXPECT_EQ(MinusInfinity, MinusInfinity + MinusInfinity);

    EXPECT_EQ(Infinity, Infinity + Ten);
    EXPECT_EQ(Infinity, Ten + Infinity);
    EXPECT_EQ(MinusInfinity, MinusInfinity + Ten);
    EXPECT_EQ(MinusInfinity, Ten + MinusInfinity);

    EXPECT_EQ(NaN, NaN + NaN);
    EXPECT_EQ(NaN, NaN + Ten);
    EXPECT_EQ(NaN, Ten + NaN);

    EXPECT_EQ(NaN, NaN - Infinity);
    EXPECT_EQ(NaN, NaN - MinusInfinity);
    EXPECT_EQ(NaN, Infinity - NaN);
    EXPECT_EQ(NaN, MinusInfinity - NaN);
}

TEST_F(DecimalTest, Ceiling)
{
    EXPECT_EQ(Decimal(1), Decimal(1).ceiling());
    EXPECT_EQ(Decimal(1), encode(1, -10, Positive).ceiling());
    EXPECT_EQ(Decimal(2), encode(11, -1, Positive).ceiling());
    EXPECT_EQ(Decimal(2), encode(13, -1, Positive).ceiling());
    EXPECT_EQ(Decimal(2), encode(15, -1, Positive).ceiling());
    EXPECT_EQ(Decimal(2), encode(19, -1, Positive).ceiling());
    EXPECT_EQ(Decimal(2), encode(151, -2, Positive).ceiling());
    EXPECT_EQ(Decimal(2), encode(101, -2, Positive).ceiling());
    EXPECT_EQ(Decimal(1), encode(199, -3, Positive).ceiling());
    EXPECT_EQ(Decimal(2), encode(199, -2, Positive).ceiling());
    EXPECT_EQ(Decimal(3), encode(209, -2, Positive).ceiling());

    EXPECT_EQ(Decimal(-1), Decimal(-1).ceiling());
    EXPECT_EQ(Decimal(0), encode(1, -10, Negative).ceiling());
    EXPECT_EQ(Decimal(-1), encode(11, -1, Negative).ceiling());
    EXPECT_EQ(Decimal(-1), encode(13, -1, Negative).ceiling());
    EXPECT_EQ(Decimal(-1), encode(15, -1, Negative).ceiling());
    EXPECT_EQ(Decimal(-1), encode(19, -1, Negative).ceiling());
    EXPECT_EQ(Decimal(-1), encode(151, -2, Negative).ceiling());
    EXPECT_EQ(Decimal(-1), encode(101, -2, Negative).ceiling());
    EXPECT_EQ(Decimal(0), encode(199, -3, Negative).ceiling());
    EXPECT_EQ(Decimal(-1), encode(199, -2, Negative).ceiling());
    EXPECT_EQ(Decimal(-2), encode(209, -2, Negative).ceiling());
}

TEST_F(DecimalTest, CeilingBigExponent)
{
    EXPECT_EQ(encode(1, 1000, Positive), encode(1, 1000, Positive).ceiling());
    EXPECT_EQ(encode(1, 1000, Negative), encode(1, 1000, Negative).ceiling());
}

TEST_F(DecimalTest, CeilingSmallExponent)
{
    EXPECT_EQ(encode(1, 0, Positive), encode(1, -1000, Positive).ceiling());
    EXPECT_EQ(encode(0, 0, Negative), encode(1, -1000, Negative).ceiling());
}

TEST_F(DecimalTest, CeilingSpecialValues)
{
    EXPECT_EQ(Decimal::infinity(Positive), Decimal::infinity(Positive).ceiling());
    EXPECT_EQ(Decimal::infinity(Negative), Decimal::infinity(Negative).ceiling());
    EXPECT_EQ(Decimal::nan(), Decimal::nan().ceiling());
}

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, Positive) == encode(1, 1000, Positive));
    EXPECT_FALSE(encode(1, 1000, Positive) != encode(1, 1000, Positive));
    EXPECT_FALSE(encode(1, 1000, Positive) < encode(1, 1000, Positive));
    EXPECT_TRUE(encode(1, 1000, Positive) <= encode(1, 1000, Positive));
    EXPECT_FALSE(encode(1, 1000, Positive) > encode(1, 1000, Positive));
    EXPECT_TRUE(encode(1, 1000, Positive) >= encode(1, 1000, Positive));

    EXPECT_TRUE(encode(1, 1000, Negative) == encode(1, 1000, Negative));
    EXPECT_FALSE(encode(1, 1000, Negative) != encode(1, 1000, Negative));
    EXPECT_FALSE(encode(1, 1000, Negative) < encode(1, 1000, Negative));
    EXPECT_TRUE(encode(1, 1000, Negative) <= encode(1, 1000, Negative));
    EXPECT_FALSE(encode(1, 1000, Negative) > encode(1, 1000, Negative));
    EXPECT_TRUE(encode(1, 1000, Negative) >= encode(1, 1000, Negative));

    EXPECT_FALSE(encode(2, 1000, Positive) == encode(1, 1000, Positive));
    EXPECT_TRUE(encode(2, 1000, Positive) != encode(1, 1000, Positive));
    EXPECT_FALSE(encode(2, 1000, Positive) < encode(1, 1000, Positive));
    EXPECT_FALSE(encode(2, 1000, Positive) <= encode(1, 1000, Positive));
    EXPECT_TRUE(encode(2, 1000, Positive) > encode(1, 1000, Positive));
    EXPECT_TRUE(encode(2, 1000, Positive) >= encode(1, 1000, Positive));

    EXPECT_FALSE(encode(2, 1000, Negative) == encode(1, 1000, Negative));
    EXPECT_TRUE(encode(2, 1000, Negative) != encode(1, 1000, Negative));
    EXPECT_TRUE(encode(2, 1000, Negative) < encode(1, 1000, Negative));
    EXPECT_TRUE(encode(2, 1000, Negative) <= encode(1, 1000, Negative));
    EXPECT_FALSE(encode(2, 1000, Negative) > encode(1, 1000, Negative));
    EXPECT_FALSE(encode(2, 1000, Negative) >= encode(1, 1000, Negative));
}

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

    EXPECT_TRUE(encode(1, -1000, Negative) == encode(1, -1000, Negative));
    EXPECT_FALSE(encode(1, -1000, Negative) != encode(1, -1000, Negative));
    EXPECT_FALSE(encode(1, -1000, Negative) < encode(1, -1000, Negative));
    EXPECT_TRUE(encode(1, -1000, Negative) <= encode(1, -1000, Negative));
    EXPECT_FALSE(encode(1, -1000, Negative) > encode(1, -1000, Negative));
    EXPECT_TRUE(encode(1, -1000, Negative) >= encode(1, -1000, Negative));

    EXPECT_FALSE(encode(2, -1000, Positive) == encode(1, -1000, Positive));
    EXPECT_TRUE(encode(2, -1000, Positive) != encode(1, -1000, Positive));
    EXPECT_FALSE(encode(2, -1000, Positive) < encode(1, -1000, Positive));
    EXPECT_FALSE(encode(2, -1000, Positive) <= encode(1, -1000, Positive));
    EXPECT_TRUE(encode(2, -1000, Positive) > encode(1, -1000, Positive));
    EXPECT_TRUE(encode(2, -1000, Positive) >= encode(1, -1000, Positive));

    EXPECT_FALSE(encode(2, -1000, Negative) == encode(1, -1000, Negative));
    EXPECT_TRUE(encode(2, -1000, Negative) != encode(1, -1000, Negative));
    EXPECT_TRUE(encode(2, -1000, Negative) < encode(1, -1000, Negative));
    EXPECT_TRUE(encode(2, -1000, Negative) <= encode(1, -1000, Negative));
    EXPECT_FALSE(encode(2, -1000, Negative) > encode(1, -1000, Negative));
    EXPECT_FALSE(encode(2, -1000, Negative) >= encode(1, -1000, Negative));
}

TEST_F(DecimalTest, CompareSpecialValues)
{
    const Decimal Infinity(Decimal::infinity(Positive));
    const Decimal MinusInfinity(Decimal::infinity(Negative));
    const Decimal NaN(Decimal::nan());
    const Decimal Zero(Decimal::zero(Positive));
    const Decimal MinusZero(Decimal::zero(Negative));
    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 == MinusZero);
    EXPECT_FALSE(Zero != MinusZero);
    EXPECT_FALSE(Zero < MinusZero);
    EXPECT_TRUE(Zero <= MinusZero);
    EXPECT_FALSE(Zero > MinusZero);
    EXPECT_TRUE(Zero >= MinusZero);

    EXPECT_TRUE(MinusZero == Zero);
    EXPECT_FALSE(MinusZero != Zero);
    EXPECT_FALSE(MinusZero < Zero);
    EXPECT_TRUE(MinusZero <= Zero);
    EXPECT_FALSE(MinusZero > Zero);
    EXPECT_TRUE(MinusZero >= Zero);

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

    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 == MinusInfinity);
    EXPECT_TRUE(Infinity != MinusInfinity);
    EXPECT_FALSE(Infinity < MinusInfinity);
    EXPECT_FALSE(Infinity <= MinusInfinity);
    EXPECT_TRUE(Infinity > MinusInfinity);
    EXPECT_TRUE(Infinity >= MinusInfinity);

    EXPECT_FALSE(Infinity == NaN);
    EXPECT_FALSE(Infinity != NaN);
    EXPECT_FALSE(Infinity < NaN);
    EXPECT_FALSE(Infinity <= NaN);
    EXPECT_FALSE(Infinity > NaN);
    EXPECT_FALSE(Infinity >= NaN);

    EXPECT_FALSE(MinusInfinity == Infinity);
    EXPECT_TRUE(MinusInfinity != Infinity);
    EXPECT_TRUE(MinusInfinity < Infinity);
    EXPECT_TRUE(MinusInfinity <= Infinity);
    EXPECT_FALSE(MinusInfinity > Infinity);
    EXPECT_FALSE(MinusInfinity >= Infinity);

    EXPECT_FALSE(MinusInfinity == Ten);
    EXPECT_TRUE(MinusInfinity != Ten);
    EXPECT_TRUE(MinusInfinity < Ten);
    EXPECT_TRUE(MinusInfinity <= Ten);
    EXPECT_FALSE(MinusInfinity > Ten);
    EXPECT_FALSE(MinusInfinity >= Ten);

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

    EXPECT_FALSE(MinusInfinity == NaN);
    EXPECT_FALSE(MinusInfinity != NaN);
    EXPECT_FALSE(MinusInfinity < NaN);
    EXPECT_FALSE(MinusInfinity <= NaN);
    EXPECT_FALSE(MinusInfinity > NaN);
    EXPECT_FALSE(MinusInfinity >= NaN);

    EXPECT_FALSE(NaN == Infinity);
    EXPECT_FALSE(NaN != Infinity);
    EXPECT_FALSE(NaN < Infinity);
    EXPECT_FALSE(NaN <= Infinity);
    EXPECT_FALSE(NaN > Infinity);
    EXPECT_FALSE(NaN >= Infinity);

    EXPECT_FALSE(NaN == Ten);
    EXPECT_FALSE(NaN != Ten);
    EXPECT_FALSE(NaN < Ten);
    EXPECT_FALSE(NaN <= Ten);
    EXPECT_FALSE(NaN > Ten);
    EXPECT_FALSE(NaN >= Ten);

    EXPECT_FALSE(NaN == MinusInfinity);
    EXPECT_FALSE(NaN != MinusInfinity);
    EXPECT_FALSE(NaN < MinusInfinity);
    EXPECT_FALSE(NaN <= MinusInfinity);
    EXPECT_FALSE(NaN > MinusInfinity);
    EXPECT_FALSE(NaN >= MinusInfinity);

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

TEST_F(DecimalTest, Constructor)
{
    EXPECT_DECIMAL_ENCODED_DATA_EQ(0u, 0, Positive, encode(0, 0, Positive));
    EXPECT_DECIMAL_ENCODED_DATA_EQ(0u, 0, Negative, encode(0, 0, Negative));
    EXPECT_DECIMAL_ENCODED_DATA_EQ(1u, 0, Positive, encode(1, 0, Positive));
    EXPECT_DECIMAL_ENCODED_DATA_EQ(1u, 0, Negative, encode(1, 0, Negative));
    EXPECT_DECIMAL_ENCODED_DATA_EQ(1u, 1022, Positive, encode(1, 1022, Positive));
    EXPECT_DECIMAL_ENCODED_DATA_EQ(1u, 1022, Negative, encode(1, 1022, Negative));
    EXPECT_DECIMAL_ENCODED_DATA_EQ(1u, 1023, Positive, encode(1, 1023, Positive));
    EXPECT_DECIMAL_ENCODED_DATA_EQ(1u, 1023, Negative, encode(1, 1023, Negative));
    EXPECT_TRUE(encode(1, 2000, Positive).isInfinity());
    EXPECT_TRUE(encode(1, 2000, Negative).isInfinity());
    EXPECT_DECIMAL_ENCODED_DATA_EQ(0u, 0, Positive, encode(1, -2000, Positive));
    EXPECT_DECIMAL_ENCODED_DATA_EQ(0u, 0, Negative, encode(1, -2000, Negative));
    EXPECT_DECIMAL_ENCODED_DATA_EQ(UINT64_C(99999999999999998), 0, Positive, encode(UINT64_C(99999999999999998), 0, Positive));
    EXPECT_DECIMAL_ENCODED_DATA_EQ(UINT64_C(99999999999999998), 0, Negative, encode(UINT64_C(99999999999999998), 0, Negative));
    EXPECT_DECIMAL_ENCODED_DATA_EQ(UINT64_C(99999999999999999), 0, Positive, encode(UINT64_C(99999999999999999), 0, Positive));
    EXPECT_DECIMAL_ENCODED_DATA_EQ(UINT64_C(99999999999999999), 0, Negative, encode(UINT64_C(99999999999999999), 0, Negative));
    EXPECT_DECIMAL_ENCODED_DATA_EQ(UINT64_C(100000000000000000), 0, Positive, encode(UINT64_C(100000000000000000), 0, Positive));
    EXPECT_DECIMAL_ENCODED_DATA_EQ(UINT64_C(100000000000000000), 0, Negative, encode(UINT64_C(100000000000000000), 0, Negative));
}

TEST_F(DecimalTest, Division)
{
    EXPECT_EQ(encode(0, 0, Positive), Decimal(0) / Decimal(1));
    EXPECT_EQ(encode(2, 0, Negative), Decimal(2) / Decimal(-1));
    EXPECT_EQ(encode(5, -1, Negative), Decimal(-1) / Decimal(2));
    EXPECT_EQ(encode(99, 0, Positive), Decimal(99) / Decimal(1));
    EXPECT_EQ(Decimal(1), Decimal(-50) / Decimal(-50));
    EXPECT_EQ(encode(UINT64_C(33333333333333333), -17, Positive), Decimal(1) / Decimal(3));
    EXPECT_EQ(encode(UINT64_C(12345678901234), -1, Positive), encode(UINT64_C(12345678901234), 0, Positive) / Decimal(10));
}

TEST_F(DecimalTest, DivisionBigExponent)
{
    EXPECT_EQ(encode(1, 1022, Positive), encode(1, 1022, Positive) / encode(1, 0, Positive));
    EXPECT_EQ(encode(1, 0, Positive), encode(1, 1022, Positive) / encode(1, 1022, Positive));
    EXPECT_EQ(Decimal::infinity(Positive), encode(1, 1022, Positive) / encode(1, -1000, Positive));
}

TEST_F(DecimalTest, DivisionSmallExponent)
{
    EXPECT_EQ(encode(1, -1022, Positive), encode(1, -1022, Positive) / encode(1, 0, Positive));
    EXPECT_EQ(encode(1, 0, Positive), encode(1, -1022, Positive) / encode(1, -1022, Positive));
}

TEST_F(DecimalTest, DivisionSpecialValues)
{
    const Decimal Infinity(Decimal::infinity(Positive));
    const Decimal MinusInfinity(Decimal::infinity(Negative));
    const Decimal NaN(Decimal::nan());
    const Decimal Zero(Decimal::zero(Positive));
    const Decimal MinusZero(Decimal::zero(Negative));
    const Decimal Ten(10);
    const Decimal MinusTen(-10);

    EXPECT_EQ(NaN, Zero / Zero);
    EXPECT_EQ(NaN, Zero / MinusZero);
    EXPECT_EQ(NaN, MinusZero / Zero);
    EXPECT_EQ(NaN, MinusZero / MinusZero);

    EXPECT_EQ(Infinity, Ten / Zero);
    EXPECT_EQ(MinusInfinity, Ten / MinusZero);
    EXPECT_EQ(MinusInfinity, MinusTen / Zero);
    EXPECT_EQ(Infinity, MinusTen / MinusZero);

    EXPECT_EQ(Infinity, Infinity / Zero);
    EXPECT_EQ(MinusInfinity, Infinity / MinusZero);
    EXPECT_EQ(MinusInfinity, MinusInfinity / Zero);
    EXPECT_EQ(Infinity, MinusInfinity / MinusZero);

    EXPECT_EQ(NaN, Infinity / Infinity);
    EXPECT_EQ(NaN, Infinity / MinusInfinity);
    EXPECT_EQ(NaN, MinusInfinity / Infinity);
    EXPECT_EQ(NaN, MinusInfinity / MinusInfinity);

    EXPECT_EQ(Zero, Ten / Infinity);
    EXPECT_EQ(MinusZero, Ten / MinusInfinity);
    EXPECT_EQ(MinusZero, MinusTen / Infinity);
    EXPECT_EQ(Zero, MinusTen / MinusInfinity);

    EXPECT_EQ(NaN, NaN / NaN);
    EXPECT_EQ(NaN, NaN / Ten);
    EXPECT_EQ(NaN, Ten / NaN);

    EXPECT_EQ(NaN, NaN / Infinity);
    EXPECT_EQ(NaN, NaN / MinusInfinity);
    EXPECT_EQ(NaN, Infinity / NaN);
    EXPECT_EQ(NaN, MinusInfinity / NaN);
}

TEST_F(DecimalTest, EncodedData)
{
    EXPECT_EQ(encode(0, 0, Positive), encode(0, 0, Positive));
    EXPECT_EQ(encode(0, 0, Negative), encode(0, 0, Negative));
    EXPECT_EQ(Decimal(1), Decimal(1));
    EXPECT_EQ(encode(1, 0, Negative), encode(1, 0, Negative));
    EXPECT_EQ(Decimal::infinity(Positive), encode(1, 2000, Positive));
    EXPECT_EQ(Decimal::zero(Positive), encode(1, -2000, Positive));
}

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

    EXPECT_EQ(Decimal(-1), Decimal(-1).floor());
    EXPECT_EQ(Decimal(-1), encode(1, -10, Negative).floor());
    EXPECT_EQ(Decimal(-2), encode(11, -1, Negative).floor());
    EXPECT_EQ(Decimal(-2), encode(13, -1, Negative).floor());
    EXPECT_EQ(Decimal(-2), encode(15, -1, Negative).floor());
    EXPECT_EQ(Decimal(-2), encode(19, -1, Negative).floor());
    EXPECT_EQ(Decimal(-2), encode(193332, -5, Negative).floor());
    EXPECT_EQ(Decimal(-13), encode(12002, -3, Negative).floor());
}

TEST_F(DecimalTest, FloorBigExponent)
{
    EXPECT_EQ(encode(1, 1000, Positive), encode(1, 1000, Positive).floor());
    EXPECT_EQ(encode(1, 1000, Negative), encode(1, 1000, Negative).floor());
}

TEST_F(DecimalTest, FloorSmallExponent)
{
    EXPECT_EQ(encode(0, 0, Positive), encode(1, -1000, Positive).floor());
    EXPECT_EQ(encode(1, 0, Negative), encode(1, -1000, Negative).floor());
}

TEST_F(DecimalTest, FloorSpecialValues)
{
    EXPECT_EQ(Decimal::infinity(Positive), Decimal::infinity(Positive).floor());
    EXPECT_EQ(Decimal::infinity(Negative), Decimal::infinity(Negative).floor());
    EXPECT_EQ(Decimal::nan(), Decimal::nan().floor());
}

TEST_F(DecimalTest, FromDouble)
{
    EXPECT_EQ(encode(0, 0, Positive), Decimal::fromDouble(0.0));
    EXPECT_EQ(encode(0, 0, Negative), Decimal::fromDouble(-0.0));
    EXPECT_EQ(encode(1, 0, Positive), Decimal::fromDouble(1));
    EXPECT_EQ(encode(1, 0, Negative), Decimal::fromDouble(-1));
    EXPECT_EQ(encode(123, 0, Positive), Decimal::fromDouble(123));
    EXPECT_EQ(encode(123, 0, Negative), Decimal::fromDouble(-123));
    EXPECT_EQ(encode(1, -1, Positive), Decimal::fromDouble(0.1));
    EXPECT_EQ(encode(1, -1, Negative), Decimal::fromDouble(-0.1));
}

TEST_F(DecimalTest, FromDoubleLimits)
{
    EXPECT_EQ(encode(UINT64_C(2220446049250313), -31, Positive), Decimal::fromDouble(std::numeric_limits<double>::epsilon()));
    EXPECT_EQ(encode(UINT64_C(2220446049250313), -31, Negative), Decimal::fromDouble(-std::numeric_limits<double>::epsilon()));
    EXPECT_EQ(encode(UINT64_C(17976931348623157), 292, Positive), Decimal::fromDouble(std::numeric_limits<double>::max()));
    EXPECT_EQ(encode(UINT64_C(17976931348623157), 292, Negative), Decimal::fromDouble(-std::numeric_limits<double>::max()));
    EXPECT_EQ(encode(UINT64_C(22250738585072014), -324, Positive), Decimal::fromDouble(std::numeric_limits<double>::min()));
    EXPECT_EQ(encode(UINT64_C(22250738585072014), -324, Negative), 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, Positive), Decimal(0));
    EXPECT_EQ(encode(1, 0, Positive), Decimal(1));
    EXPECT_EQ(encode(1, 0, Negative), Decimal(-1));
    EXPECT_EQ(encode(100, 0, Positive), Decimal(100));
    EXPECT_EQ(encode(100, 0, Negative), Decimal(-100));
    EXPECT_EQ(encode(0x7FFFFFFF, 0, Positive), Decimal(std::numeric_limits<int32_t>::max()));
    EXPECT_EQ(encode(0x80000000u, 0, Negative), Decimal(std::numeric_limits<int32_t>::min()));
}

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

    // 2^1024
    const uint64_t leadingDigitsOf2PowerOf1024 = UINT64_C(17976931348623159);
    EXPECT_EQ(encode(leadingDigitsOf2PowerOf1024, 292, Positive), fromString("179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216"));
}

// 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, Positive), Decimal(0) * Decimal(0));
    EXPECT_EQ(encode(2, 0, Negative), Decimal(2) * Decimal(-1));
    EXPECT_EQ(encode(2, 0, Negative), Decimal(-1) * Decimal(2));
    EXPECT_EQ(encode(99, 0, Positive), Decimal(99) * Decimal(1));
    EXPECT_EQ(encode(2500, 0, Positive), Decimal(-50) * Decimal(-50));
    EXPECT_EQ(encode(1, 21, Positive), encode(UINT64_C(10000000000), 0, Positive) * encode(UINT64_C(100000000000), 0, Positive));
}

TEST_F(DecimalTest, MultiplicationBigExponent)
{
    EXPECT_EQ(encode(1, 1022, Positive), encode(1, 1022, Positive) * encode(1, 0, Positive));
    EXPECT_EQ(Decimal::infinity(Positive), encode(1, 1022, Positive) * encode(1, 1022, Positive));
    EXPECT_EQ(encode(1, 22, Positive), encode(1, 1022, Positive) * encode(1, -1000, Positive));
}

TEST_F(DecimalTest, MultiplicationSmallExponent)
{
    EXPECT_EQ(encode(1, -1022, Positive), encode(1, -1022, Positive) * encode(1, 0, Positive));
    EXPECT_EQ(encode(0, 0, Positive), encode(1, -1022, Positive) * encode(1, -1022, Positive));
}

TEST_F(DecimalTest, MultiplicationSpecialValues)
{
    const Decimal Infinity(Decimal::infinity(Positive));
    const Decimal MinusInfinity(Decimal::infinity(Negative));
    const Decimal NaN(Decimal::nan());
    const Decimal Ten(10);
    const Decimal MinusTen(-10);
    const Decimal Zero(Decimal::zero(Positive));
    const Decimal MinusZero(Decimal::zero(Negative));

    EXPECT_EQ(Infinity, Infinity * Infinity);
    EXPECT_EQ(MinusInfinity, Infinity * MinusInfinity);
    EXPECT_EQ(MinusInfinity, MinusInfinity * Infinity);
    EXPECT_EQ(Infinity, MinusInfinity * MinusInfinity);

    EXPECT_EQ(NaN, Infinity * Zero);
    EXPECT_EQ(NaN, Zero * MinusInfinity);
    EXPECT_EQ(NaN, MinusInfinity * Zero);
    EXPECT_EQ(NaN, MinusInfinity * Zero);

    EXPECT_EQ(NaN, Infinity * MinusZero);
    EXPECT_EQ(NaN, MinusZero * MinusInfinity);
    EXPECT_EQ(NaN, MinusInfinity * MinusZero);
    EXPECT_EQ(NaN, MinusInfinity * MinusZero);

    EXPECT_EQ(Infinity, Infinity * Ten);
    EXPECT_EQ(Infinity, Ten * Infinity);
    EXPECT_EQ(MinusInfinity, MinusInfinity * Ten);
    EXPECT_EQ(MinusInfinity, Ten * MinusInfinity);

    EXPECT_EQ(MinusInfinity, Infinity * MinusTen);
    EXPECT_EQ(MinusInfinity, MinusTen * Infinity);
    EXPECT_EQ(Infinity, MinusInfinity * MinusTen);
    EXPECT_EQ(Infinity, MinusTen * MinusInfinity);

    EXPECT_EQ(NaN, NaN * NaN);
    EXPECT_EQ(NaN, NaN * Ten);
    EXPECT_EQ(NaN, Ten * NaN);

    EXPECT_EQ(NaN, NaN * Infinity);
    EXPECT_EQ(NaN, NaN * MinusInfinity);
    EXPECT_EQ(NaN, Infinity * NaN);
    EXPECT_EQ(NaN, MinusInfinity * NaN);
}

TEST_F(DecimalTest, Negate)
{
    EXPECT_EQ(encode(0, 0, Negative), -encode(0, 0, Positive));
    EXPECT_EQ(encode(0, 0, Positive), -encode(0, 0, Negative));

    EXPECT_EQ(encode(0, 10, Negative), -encode(0, 10, Positive));
    EXPECT_EQ(encode(0, 10, Positive), -encode(0, 10, Negative));

    EXPECT_EQ(encode(0, -10, Negative), -encode(0, -10, Positive));
    EXPECT_EQ(encode(0, -10, Positive), -encode(0, -10, Negative));

    EXPECT_EQ(encode(1, 0, Negative), -encode(1, 0, Positive));
    EXPECT_EQ(encode(1, 0, Positive), -encode(1, 0, Negative));

    EXPECT_EQ(encode(1, 10, Negative), -encode(1, 10, Positive));
    EXPECT_EQ(encode(1, 10, Positive), -encode(1, 10, Negative));

    EXPECT_EQ(encode(1, -10, Negative), -encode(1, -10, Positive));
    EXPECT_EQ(encode(1, -10, Positive), -encode(1, -10, Negative));
}

TEST_F(DecimalTest, NegateBigExponent)
{
    EXPECT_EQ(encode(1, 1000, Negative), -encode(1, 1000, Positive));
    EXPECT_EQ(encode(1, 1000, Positive), -encode(1, 1000, Negative));
}

TEST_F(DecimalTest, NegateSmallExponent)
{
    EXPECT_EQ(encode(1, -1000, Negative), -encode(1, -1000, Positive));
    EXPECT_EQ(encode(1, -1000, Positive), -encode(1, -1000, Negative));
}

TEST_F(DecimalTest, NegateSpecialValues)
{
    EXPECT_EQ(Decimal::infinity(Negative), -Decimal::infinity(Positive));
    EXPECT_EQ(Decimal::infinity(Positive), -Decimal::infinity(Negative));
    EXPECT_EQ(Decimal::nan(), -Decimal::nan());
}

TEST_F(DecimalTest, Predicates)
{
    EXPECT_TRUE(Decimal::zero(Positive).isFinite());
    EXPECT_FALSE(Decimal::zero(Positive).isInfinity());
    EXPECT_FALSE(Decimal::zero(Positive).isNaN());
    EXPECT_TRUE(Decimal::zero(Positive).isPositive());
    EXPECT_FALSE(Decimal::zero(Positive).isNegative());
    EXPECT_FALSE(Decimal::zero(Positive).isSpecial());
    EXPECT_TRUE(Decimal::zero(Positive).isZero());

    EXPECT_TRUE(Decimal::zero(Negative).isFinite());
    EXPECT_FALSE(Decimal::zero(Negative).isInfinity());
    EXPECT_FALSE(Decimal::zero(Negative).isNaN());
    EXPECT_FALSE(Decimal::zero(Negative).isPositive());
    EXPECT_TRUE(Decimal::zero(Negative).isNegative());
    EXPECT_FALSE(Decimal::zero(Negative).isSpecial());
    EXPECT_TRUE(Decimal::zero(Negative).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(Positive).isFinite());
    EXPECT_TRUE(Decimal::infinity(Positive).isInfinity());
    EXPECT_FALSE(Decimal::infinity(Positive).isNaN());
    EXPECT_TRUE(Decimal::infinity(Positive).isPositive());
    EXPECT_FALSE(Decimal::infinity(Positive).isNegative());
    EXPECT_TRUE(Decimal::infinity(Positive).isSpecial());
    EXPECT_FALSE(Decimal::infinity(Positive).isZero());

    EXPECT_FALSE(Decimal::infinity(Negative).isFinite());
    EXPECT_TRUE(Decimal::infinity(Negative).isInfinity());
    EXPECT_FALSE(Decimal::infinity(Negative).isNaN());
    EXPECT_FALSE(Decimal::infinity(Negative).isPositive());
    EXPECT_TRUE(Decimal::infinity(Negative).isNegative());
    EXPECT_TRUE(Decimal::infinity(Negative).isSpecial());
    EXPECT_FALSE(Decimal::infinity(Negative).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());
}

// tests/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, Positive), encode(21, -1, Positive).remainder(3));
    EXPECT_EQ(Decimal(1), Decimal(10).remainder(3));
    EXPECT_EQ(Decimal(1), Decimal(10).remainder(-3));
    EXPECT_EQ(encode(1, 0, Negative), Decimal(-10).remainder(3));
    EXPECT_EQ(Decimal(-1), Decimal(-10).remainder(-3));
    EXPECT_EQ(encode(2, -1, Positive), encode(102, -1, Positive).remainder(1));
    EXPECT_EQ(encode(1, -1, Positive), Decimal(10).remainder(encode(3, -1, Positive)));
    EXPECT_EQ(Decimal(1), encode(36, -1, Positive).remainder(encode(13, -1, Positive)));
    EXPECT_EQ(encode(1, 86, Positive), (encode(1234, 100, Positive).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, Positive), encode(1, 1022, Positive).remainder(encode(1, 0, Positive)));
    EXPECT_EQ(encode(0, 1022, Positive), encode(1, 1022, Positive).remainder(encode(1, 1022, Positive)));
    EXPECT_EQ(Decimal::infinity(Positive), encode(1, 1022, Positive).remainder(encode(1, -1000, Positive)));
}

TEST_F(DecimalTest, RemainderSmallExponent)
{
    EXPECT_EQ(encode(1, -1022, Positive), encode(1, -1022, Positive).remainder(encode(1, 0, Positive)));
    EXPECT_EQ(encode(0, -1022, Positive), encode(1, -1022, Positive).remainder(encode(1, -1022, Positive)));
}

TEST_F(DecimalTest, RemainderSpecialValues)
{
    EXPECT_EQ(Decimal::infinity(Positive), Decimal::infinity(Positive).remainder(1));
    EXPECT_EQ(Decimal::infinity(Negative), Decimal::infinity(Negative).remainder(1));
    EXPECT_EQ(Decimal::nan(), Decimal::nan().remainder(1));

    EXPECT_EQ(Decimal::infinity(Negative), Decimal::infinity(Positive).remainder(-1));
    EXPECT_EQ(Decimal::infinity(Positive), Decimal::infinity(Negative).remainder(-1));
    EXPECT_EQ(Decimal::nan(), Decimal::nan().remainder(-1));

    EXPECT_EQ(Decimal::infinity(Positive), Decimal::infinity(Positive).remainder(3));
    EXPECT_EQ(Decimal::infinity(Negative), Decimal::infinity(Negative).remainder(3));
    EXPECT_EQ(Decimal::nan(), Decimal::nan().remainder(3));

    EXPECT_EQ(Decimal::infinity(Negative), Decimal::infinity(Positive).remainder(-1));
    EXPECT_EQ(Decimal::infinity(Positive), Decimal::infinity(Negative).remainder(-1));
    EXPECT_EQ(Decimal::nan(), Decimal::nan().remainder(-1));

    EXPECT_EQ(Decimal::nan(), Decimal(1).remainder(Decimal::infinity(Positive)));
    EXPECT_EQ(Decimal::nan(), Decimal(1).remainder(Decimal::infinity(Negative)));
    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, Positive), encode(1234, 100, Positive).round());

    EXPECT_EQ(Decimal(2), encode(190002, -5, Positive).round());
    EXPECT_EQ(Decimal(2), encode(150002, -5, Positive).round());
    EXPECT_EQ(Decimal(2), encode(150000, -5, Positive).round());
    EXPECT_EQ(Decimal(12), encode(12492, -3, Positive).round());
    EXPECT_EQ(Decimal(13), encode(12502, -3, Positive).round());

    EXPECT_EQ(Decimal(-2), encode(190002, -5, Negative).round());
    EXPECT_EQ(Decimal(-2), encode(150002, -5, Negative).round());
    EXPECT_EQ(Decimal(-2), encode(150000, -5, Negative).round());
    EXPECT_EQ(Decimal(-12), encode(12492, -3, Negative).round());
    EXPECT_EQ(Decimal(-13), encode(12502, -3, Negative).round());
}

TEST_F(DecimalTest, RoundSpecialValues)
{
    EXPECT_EQ(Decimal::infinity(Positive), Decimal::infinity(Positive).round());
    EXPECT_EQ(Decimal::infinity(Negative), Decimal::infinity(Negative).round());
    EXPECT_EQ(Decimal::nan(), Decimal::nan().round());
}

TEST_F(DecimalTest, Subtract)
{
    EXPECT_EQ(encode(0, 0, Positive), Decimal(0) - Decimal(0));
    EXPECT_EQ(encode(3, 0, Positive), Decimal(2) - Decimal(-1));
    EXPECT_EQ(encode(3, 0, Negative), Decimal(-1) - Decimal(2));
    EXPECT_EQ(encode(98, 0, Positive), Decimal(99) - Decimal(1));
    EXPECT_EQ(encode(0, 0, Positive), Decimal(-50) - Decimal(-50));
    EXPECT_EQ(encode(UINT64_C(1000000000000000), 35, Positive), encode(1, 50, Positive) - Decimal(1));
    EXPECT_EQ(encode(UINT64_C(1000000000000000), 35, Negative), Decimal(1) - encode(1, 50, Positive));
}

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

TEST_F(DecimalTest, SubtractSmallExponent)
{
    EXPECT_EQ(encode(UINT64_C(10000000000000000), -16, Negative), encode(1, -1022, Positive) - encode(1, 0, Positive));
    EXPECT_EQ(encode(0, 0, Positive), encode(1, -1022, Positive) - encode(1, -1022, Positive));
}

TEST_F(DecimalTest, SubtractSpecialValues)
{
    const Decimal Infinity(Decimal::infinity(Positive));
    const Decimal MinusInfinity(Decimal::infinity(Negative));
    const Decimal NaN(Decimal::nan());
    const Decimal Ten(10);

    EXPECT_EQ(NaN, Infinity - Infinity);
    EXPECT_EQ(Infinity, Infinity - MinusInfinity);
    EXPECT_EQ(MinusInfinity, MinusInfinity - Infinity);
    EXPECT_EQ(NaN, MinusInfinity - MinusInfinity);

    EXPECT_EQ(Infinity, Infinity - Ten);
    EXPECT_EQ(MinusInfinity, Ten - Infinity);
    EXPECT_EQ(MinusInfinity, MinusInfinity - Ten);
    EXPECT_EQ(Infinity, Ten - MinusInfinity);

    EXPECT_EQ(NaN, NaN - NaN);
    EXPECT_EQ(NaN, NaN - Ten);
    EXPECT_EQ(NaN, Ten - NaN);

    EXPECT_EQ(NaN, NaN - Infinity);
    EXPECT_EQ(NaN, NaN - MinusInfinity);
    EXPECT_EQ(NaN, Infinity - NaN);
    EXPECT_EQ(NaN, MinusInfinity - NaN);
}

TEST_F(DecimalTest, ToDouble)
{
    EXPECT_EQ(0.0, encode(0, 0, Positive).toDouble());
    EXPECT_EQ(-0.0, encode(0, 0, Negative).toDouble());

    EXPECT_EQ(1.0, encode(1, 0, Positive).toDouble());
    EXPECT_EQ(-1.0, encode(1, 0, Negative).toDouble());

    EXPECT_EQ(0.1, encode(1, -1, Positive).toDouble());
    EXPECT_EQ(-0.1, encode(1, -1, Negative).toDouble());
    EXPECT_EQ(0.3, encode(3, -1, Positive).toDouble());
    EXPECT_EQ(-0.3, encode(3, -1, Negative).toDouble());
    EXPECT_EQ(0.6, encode(6, -1, Positive).toDouble());
    EXPECT_EQ(-0.6, encode(6, -1, Negative).toDouble());
    EXPECT_EQ(0.7, encode(7, -1, Positive).toDouble());
    EXPECT_EQ(-0.7, encode(7, -1, Negative).toDouble());

    EXPECT_EQ(0.01, encode(1, -2, Positive).toDouble());
    EXPECT_EQ(0.001, encode(1, -3, Positive).toDouble());
    EXPECT_EQ(0.0001, encode(1, -4, Positive).toDouble());
    EXPECT_EQ(0.00001, encode(1, -5, Positive).toDouble());

    EXPECT_EQ(1e+308, encode(1, 308, Positive).toDouble());
    EXPECT_EQ(1e-307, encode(1, -307, Positive).toDouble());

    EXPECT_TRUE(std::isinf(encode(1, 1000, Positive).toDouble()));
    EXPECT_EQ(0.0, encode(1, -1000, Positive).toDouble());
}

TEST_F(DecimalTest, ToDoubleSpecialValues)
{
    EXPECT_TRUE(std::isinf(Decimal::infinity(Decimal::Positive).toDouble()));
    EXPECT_TRUE(std::isinf(Decimal::infinity(Decimal::Negative).toDouble()));
    EXPECT_TRUE(std::isnan(Decimal::nan().toDouble()));
}

TEST_F(DecimalTest, ToString)
{
    EXPECT_DECIMAL_STREQ("0", Decimal::zero(Positive));
    EXPECT_DECIMAL_STREQ("-0", Decimal::zero(Negative));
    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, Positive));
    EXPECT_DECIMAL_STREQ("-0.5", encode(5, -1, Negative));
    EXPECT_DECIMAL_STREQ("12.345", encode(12345, -3, Positive));
    EXPECT_DECIMAL_STREQ("-12.345", encode(12345, -3, Negative));
    EXPECT_DECIMAL_STREQ("0.12345", encode(12345, -5, Positive));
    EXPECT_DECIMAL_STREQ("-0.12345", encode(12345, -5, Negative));
    EXPECT_DECIMAL_STREQ("50", encode(50, 0, Positive));
    EXPECT_DECIMAL_STREQ("-50", encode(50, 0, Negative));
    EXPECT_DECIMAL_STREQ("5e+1", encode(5, 1, Positive));
    EXPECT_DECIMAL_STREQ("-5e+1", encode(5, 1, Negative));
    EXPECT_DECIMAL_STREQ("5.678e+103", encode(5678, 100, Positive));
    EXPECT_DECIMAL_STREQ("-5.678e+103", encode(5678, 100, Negative));
    EXPECT_DECIMAL_STREQ("5.678e-97", encode(5678, -100, Positive));
    EXPECT_DECIMAL_STREQ("-5.678e-97", encode(5678, -100, Negative));
    EXPECT_DECIMAL_STREQ("8639999913600001", encode(UINT64_C(8639999913600001), 0, Positive));
    EXPECT_DECIMAL_STREQ("9007199254740991", encode((static_cast<uint64_t>(1) << DBL_MANT_DIG) - 1, 0, Positive));
    EXPECT_DECIMAL_STREQ("99999999999999999", encode(UINT64_C(99999999999999999), 0, Positive));
    EXPECT_DECIMAL_STREQ("9.9999999999999999e+17", encode(UINT64_C(99999999999999999), 1, Positive));
    EXPECT_DECIMAL_STREQ("9.9999999999999999e+18", encode(UINT64_C(99999999999999999), 2, Positive));
    EXPECT_DECIMAL_STREQ("1e+16", encode(UINT64_C(99999999999999999), -1, Positive));
    EXPECT_DECIMAL_STREQ("1000000000000000", encode(UINT64_C(99999999999999999), -2, Positive));
    EXPECT_DECIMAL_STREQ("1", encode(UINT64_C(99999999999999999), -17, Positive));
    EXPECT_DECIMAL_STREQ("0.001", encode(UINT64_C(99999999999999999), -20, Positive));
    EXPECT_DECIMAL_STREQ("1e-83", encode(UINT64_C(99999999999999999), -100, Positive));
}

TEST_F(DecimalTest, ToStringSpecialValues)
{
    EXPECT_DECIMAL_STREQ("Infinity", Decimal::infinity(Positive));
    EXPECT_DECIMAL_STREQ("-Infinity", Decimal::infinity(Negative));
    EXPECT_DECIMAL_STREQ("NaN", Decimal::nan());
}
