15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2012 Google Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions are 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * met: 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions of source code must retain the above copyright 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions in binary form must reproduce the above 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the documentation and/or other materials provided with the 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distribution. 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * contributors may be used to endorse or promote products derived from 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * this software without specific prior written permission. 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h" 321e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/Decimal.h" 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3481a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)#include "wtf/MathExtras.h" 3581a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)#include "wtf/text/CString.h" 368abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)#include <float.h> 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include <gtest/gtest.h> 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 39c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)std::ostream& operator<<(std::ostream& os, const Decimal& decimal) 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Decimal::EncodedData data = decimal.value(); 4481a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) return os 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) << "encode(" << String::number(data.coefficient()).ascii().data() 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) << ", " << String::number(data.exponent()).ascii().data() 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) << ", " << (data.sign() == Decimal::Negative ? "Negative" : "Positive") 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) << ")=" << decimal.toString().ascii().data(); 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 51c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 53c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)using namespace blink; 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Simulate WebCore/html/StepRange 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class DecimalStepRange { 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Decimal maximum; 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Decimal minimum; 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Decimal step; 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DecimalStepRange(const Decimal& minimum, const Decimal& maximum, const Decimal& step) 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : maximum(maximum) 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , minimum(minimum) 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , step(step) 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Decimal clampValue(Decimal value) const 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const Decimal result = minimum + ((value - minimum) / step).round() * step; 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(result.isFinite()); 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return result > maximum ? result - step : result; 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class DecimalTest : public ::testing::Test { 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)protected: 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) typedef Decimal::Sign Sign; 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) protected: static const Sign Positive = Decimal::Positive; 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) protected: static const Sign Negative = Decimal::Negative; 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Decimal encode(uint64_t coefficient, int exponent, Sign sign) 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return Decimal(sign, exponent, coefficient); 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) protected: Decimal fromString(const String& string) 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return Decimal::fromString(string); 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) protected: Decimal stepDown(const String& minimum, const String& maximum, const String& step, const String& valueString, int numberOfStepTimes) 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DecimalStepRange stepRange(fromString(minimum), fromString(maximum), fromString(step)); 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Decimal value = fromString(valueString); 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (int i = 0; i < numberOfStepTimes; ++i) { 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) value -= stepRange.step; 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) value = stepRange.clampValue(value); 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return value; 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) protected: Decimal stepUp(const String& minimum, const String& maximum, const String& step, const String& valueString, int numberOfStepTimes) 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DecimalStepRange stepRange(fromString(minimum), fromString(maximum), fromString(step)); 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Decimal value = fromString(valueString); 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (int i = 0; i < numberOfStepTimes; ++i) { 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) value += stepRange.step; 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) value = stepRange.clampValue(value); 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return value; 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// FIXME: We should use expectedSign without "Decimal::", however, g++ causes undefined references for DecimalTest::Positive and Negative. 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define EXPECT_DECIMAL_ENCODED_DATA_EQ(expectedCoefficient, expectedExponent, expectedSign, decimal) \ 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ((expectedCoefficient), (decimal).value().coefficient()); \ 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ((expectedExponent), (decimal).value().exponent()); \ 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::expectedSign, (decimal).value().sign()); 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define EXPECT_DECIMAL_STREQ(expected, decimal) EXPECT_STREQ((expected), (decimal).toString().ascii().data()) 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, Abs) 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(0, 0, Positive), encode(0, 0, Positive).abs()); 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(0, 0, Positive), encode(0, 0, Negative).abs()); 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(0, 10, Positive), encode(0, 10, Positive).abs()); 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(0, 10, Positive), encode(0, 10, Negative).abs()); 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(0, -10, Positive), encode(0, -10, Positive).abs()); 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(0, -10, Positive), encode(0, -10, Negative).abs()); 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, 0, Positive), encode(1, 0, Positive).abs()); 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, 0, Positive), encode(1, 0, Negative).abs()); 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, 10, Positive), encode(1, 10, Positive).abs()); 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, 10, Positive), encode(1, 10, Negative).abs()); 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, -10, Positive), encode(1, -10, Positive).abs()); 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, -10, Positive), encode(1, -10, Negative).abs()); 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, AbsBigExponent) 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, 1000, Positive), encode(1, 1000, Positive).abs()); 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, 1000, Positive), encode(1, 1000, Negative).abs()); 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, AbsSmallExponent) 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, -1000, Positive), encode(1, -1000, Positive).abs()); 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, -1000, Positive), encode(1, -1000, Negative).abs()); 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, AbsSpecialValues) 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::infinity(Positive), Decimal::infinity(Positive).abs()); 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::infinity(Positive), Decimal::infinity(Negative).abs()); 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::nan(), Decimal::nan().abs()); 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, Add) 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(0, 0, Positive), Decimal(0) + Decimal(0)); 1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal(1), Decimal(2) + Decimal(-1)); 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal(1), Decimal(-1) + Decimal(2)); 1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(100, 0, Positive), Decimal(99) + Decimal(1)); 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(100, 0, Negative), Decimal(-50) + Decimal(-50)); 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(UINT64_C(1000000000000000), 35, Positive), encode(1, 50, Positive) + Decimal(1)); 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(UINT64_C(1000000000000000), 35, Positive), Decimal(1) + encode(1, 50, Positive)); 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(UINT64_C(10000000001), 0, Positive), encode(1, 10, Positive) + Decimal(1)); 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(UINT64_C(10000000001), 0, Positive), Decimal(1) + encode(1, 10, Positive)); 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, 0, Positive), encode(1, -1022, Positive) + encode(1, 0, Positive)); 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(2, -1022, Positive), encode(1, -1022, Positive) + encode(1, -1022, Positive)); 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, AddBigExponent) 1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, 1022, Positive), encode(1, 1022, Positive) + encode(1, 0, Positive)); 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(2, 1022, Positive), encode(1, 1022, Positive) + encode(1, 1022, Positive)); 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::infinity(Positive), encode(std::numeric_limits<uint64_t>::max(), 1022, Positive) + encode(1, 0, Positive)); 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, 1022, Positive), encode(1, 1022, Positive) + encode(1, -1000, Positive)); 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, AddSmallExponent) 1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, 0, Positive), encode(1, -1022, Positive) + encode(1, 0, Positive)); 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(2, -1022, Positive), encode(1, -1022, Positive) + encode(1, -1022, Positive)); 1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, AddSpecialValues) 1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const Decimal Infinity(Decimal::infinity(Positive)); 1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const Decimal MinusInfinity(Decimal::infinity(Negative)); 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const Decimal NaN(Decimal::nan()); 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const Decimal Ten(10); 1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Infinity, Infinity + Infinity); 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, Infinity + MinusInfinity); 2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, MinusInfinity + Infinity); 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(MinusInfinity, MinusInfinity + MinusInfinity); 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Infinity, Infinity + Ten); 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Infinity, Ten + Infinity); 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(MinusInfinity, MinusInfinity + Ten); 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(MinusInfinity, Ten + MinusInfinity); 2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, NaN + NaN); 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, NaN + Ten); 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, Ten + NaN); 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, NaN - Infinity); 2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, NaN - MinusInfinity); 2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, Infinity - NaN); 2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, MinusInfinity - NaN); 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, Ceiling) 2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal(1), Decimal(1).ceiling()); 2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal(1), encode(1, -10, Positive).ceiling()); 2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal(2), encode(11, -1, Positive).ceiling()); 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal(2), encode(13, -1, Positive).ceiling()); 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal(2), encode(15, -1, Positive).ceiling()); 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal(2), encode(19, -1, Positive).ceiling()); 22851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_EQ(Decimal(2), encode(151, -2, Positive).ceiling()); 22951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_EQ(Decimal(2), encode(101, -2, Positive).ceiling()); 23051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_EQ(Decimal(1), encode(199, -3, Positive).ceiling()); 23151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_EQ(Decimal(2), encode(199, -2, Positive).ceiling()); 23251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_EQ(Decimal(3), encode(209, -2, Positive).ceiling()); 2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal(-1), Decimal(-1).ceiling()); 2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal(0), encode(1, -10, Negative).ceiling()); 2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal(-1), encode(11, -1, Negative).ceiling()); 2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal(-1), encode(13, -1, Negative).ceiling()); 2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal(-1), encode(15, -1, Negative).ceiling()); 2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal(-1), encode(19, -1, Negative).ceiling()); 24051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_EQ(Decimal(-1), encode(151, -2, Negative).ceiling()); 24151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_EQ(Decimal(-1), encode(101, -2, Negative).ceiling()); 24251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_EQ(Decimal(0), encode(199, -3, Negative).ceiling()); 24351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_EQ(Decimal(-1), encode(199, -2, Negative).ceiling()); 24451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_EQ(Decimal(-2), encode(209, -2, Negative).ceiling()); 2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, CeilingBigExponent) 2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, 1000, Positive), encode(1, 1000, Positive).ceiling()); 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, 1000, Negative), encode(1, 1000, Negative).ceiling()); 2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, CeilingSmallExponent) 2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, 0, Positive), encode(1, -1000, Positive).ceiling()); 2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(0, 0, Negative), encode(1, -1000, Negative).ceiling()); 2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, CeilingSpecialValues) 2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::infinity(Positive), Decimal::infinity(Positive).ceiling()); 2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::infinity(Negative), Decimal::infinity(Negative).ceiling()); 2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::nan(), Decimal::nan().ceiling()); 2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, Compare) 2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Decimal(0) == Decimal(0)); 2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Decimal(0) != Decimal(1)); 2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Decimal(0) < Decimal(1)); 2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Decimal(0) <= Decimal(0)); 2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Decimal(0) > Decimal(-1)); 2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Decimal(0) >= Decimal(0)); 2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Decimal(1) == Decimal(2)); 2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Decimal(1) != Decimal(1)); 2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Decimal(1) < Decimal(0)); 2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Decimal(1) <= Decimal(0)); 2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Decimal(1) > Decimal(2)); 2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Decimal(1) >= Decimal(2)); 2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, CompareBigExponent) 2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(encode(1, 1000, Positive) == encode(1, 1000, Positive)); 2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(encode(1, 1000, Positive) != encode(1, 1000, Positive)); 2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(encode(1, 1000, Positive) < encode(1, 1000, Positive)); 2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(encode(1, 1000, Positive) <= encode(1, 1000, Positive)); 2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(encode(1, 1000, Positive) > encode(1, 1000, Positive)); 2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(encode(1, 1000, Positive) >= encode(1, 1000, Positive)); 2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(encode(1, 1000, Negative) == encode(1, 1000, Negative)); 2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(encode(1, 1000, Negative) != encode(1, 1000, Negative)); 2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(encode(1, 1000, Negative) < encode(1, 1000, Negative)); 2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(encode(1, 1000, Negative) <= encode(1, 1000, Negative)); 2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(encode(1, 1000, Negative) > encode(1, 1000, Negative)); 2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(encode(1, 1000, Negative) >= encode(1, 1000, Negative)); 2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(encode(2, 1000, Positive) == encode(1, 1000, Positive)); 3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(encode(2, 1000, Positive) != encode(1, 1000, Positive)); 3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(encode(2, 1000, Positive) < encode(1, 1000, Positive)); 3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(encode(2, 1000, Positive) <= encode(1, 1000, Positive)); 3035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(encode(2, 1000, Positive) > encode(1, 1000, Positive)); 3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(encode(2, 1000, Positive) >= encode(1, 1000, Positive)); 3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(encode(2, 1000, Negative) == encode(1, 1000, Negative)); 3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(encode(2, 1000, Negative) != encode(1, 1000, Negative)); 3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(encode(2, 1000, Negative) < encode(1, 1000, Negative)); 3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(encode(2, 1000, Negative) <= encode(1, 1000, Negative)); 3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(encode(2, 1000, Negative) > encode(1, 1000, Negative)); 3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(encode(2, 1000, Negative) >= encode(1, 1000, Negative)); 3125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, CompareSmallExponent) 3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(encode(1, -1000, Positive) == encode(1, -1000, Positive)); 3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(encode(1, -1000, Positive) != encode(1, -1000, Positive)); 3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(encode(1, -1000, Positive) < encode(1, -1000, Positive)); 3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(encode(1, -1000, Positive) <= encode(1, -1000, Positive)); 3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(encode(1, -1000, Positive) > encode(1, -1000, Positive)); 3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(encode(1, -1000, Positive) >= encode(1, -1000, Positive)); 3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(encode(1, -1000, Negative) == encode(1, -1000, Negative)); 3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(encode(1, -1000, Negative) != encode(1, -1000, Negative)); 3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(encode(1, -1000, Negative) < encode(1, -1000, Negative)); 3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(encode(1, -1000, Negative) <= encode(1, -1000, Negative)); 3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(encode(1, -1000, Negative) > encode(1, -1000, Negative)); 3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(encode(1, -1000, Negative) >= encode(1, -1000, Negative)); 3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(encode(2, -1000, Positive) == encode(1, -1000, Positive)); 3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(encode(2, -1000, Positive) != encode(1, -1000, Positive)); 3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(encode(2, -1000, Positive) < encode(1, -1000, Positive)); 3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(encode(2, -1000, Positive) <= encode(1, -1000, Positive)); 3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(encode(2, -1000, Positive) > encode(1, -1000, Positive)); 3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(encode(2, -1000, Positive) >= encode(1, -1000, Positive)); 3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(encode(2, -1000, Negative) == encode(1, -1000, Negative)); 3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(encode(2, -1000, Negative) != encode(1, -1000, Negative)); 3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(encode(2, -1000, Negative) < encode(1, -1000, Negative)); 3405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(encode(2, -1000, Negative) <= encode(1, -1000, Negative)); 3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(encode(2, -1000, Negative) > encode(1, -1000, Negative)); 3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(encode(2, -1000, Negative) >= encode(1, -1000, Negative)); 3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, CompareSpecialValues) 3465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const Decimal Infinity(Decimal::infinity(Positive)); 3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const Decimal MinusInfinity(Decimal::infinity(Negative)); 3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const Decimal NaN(Decimal::nan()); 3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const Decimal Zero(Decimal::zero(Positive)); 3515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const Decimal MinusZero(Decimal::zero(Negative)); 3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const Decimal Ten(10); 3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Zero == Zero); 3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Zero != Zero); 3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Zero < Zero); 3575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Zero <= Zero); 3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Zero > Zero); 3595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Zero >= Zero); 3605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Zero == MinusZero); 3625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Zero != MinusZero); 3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Zero < MinusZero); 3645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Zero <= MinusZero); 3655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Zero > MinusZero); 3665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Zero >= MinusZero); 3675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(MinusZero == Zero); 3695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(MinusZero != Zero); 3705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(MinusZero < Zero); 3715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(MinusZero <= Zero); 3725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(MinusZero > Zero); 3735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(MinusZero >= Zero); 3745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(MinusZero == MinusZero); 3765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(MinusZero != MinusZero); 3775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(MinusZero < MinusZero); 3785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(MinusZero <= MinusZero); 3795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(MinusZero > MinusZero); 3805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(MinusZero >= MinusZero); 3815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Infinity == Infinity); 3835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Infinity != Infinity); 3845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Infinity < Infinity); 3855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Infinity <= Infinity); 3865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Infinity > Infinity); 3875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Infinity >= Infinity); 3885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Infinity == Ten); 3905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Infinity != Ten); 3915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Infinity < Ten); 3925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Infinity <= Ten); 3935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Infinity > Ten); 3945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Infinity >= Ten); 3955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Infinity == MinusInfinity); 3975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Infinity != MinusInfinity); 3985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Infinity < MinusInfinity); 3995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Infinity <= MinusInfinity); 4005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Infinity > MinusInfinity); 4015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Infinity >= MinusInfinity); 4025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Infinity == NaN); 4045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Infinity != NaN); 4055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Infinity < NaN); 4065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Infinity <= NaN); 4075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Infinity > NaN); 4085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Infinity >= NaN); 4095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(MinusInfinity == Infinity); 4115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(MinusInfinity != Infinity); 4125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(MinusInfinity < Infinity); 4135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(MinusInfinity <= Infinity); 4145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(MinusInfinity > Infinity); 4155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(MinusInfinity >= Infinity); 4165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(MinusInfinity == Ten); 4185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(MinusInfinity != Ten); 4195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(MinusInfinity < Ten); 4205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(MinusInfinity <= Ten); 4215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(MinusInfinity > Ten); 4225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(MinusInfinity >= Ten); 4235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(MinusInfinity == MinusInfinity); 4255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(MinusInfinity != MinusInfinity); 4265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(MinusInfinity < MinusInfinity); 4275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(MinusInfinity <= MinusInfinity); 4285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(MinusInfinity > MinusInfinity); 4295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(MinusInfinity >= MinusInfinity); 4305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(MinusInfinity == NaN); 4325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(MinusInfinity != NaN); 4335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(MinusInfinity < NaN); 4345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(MinusInfinity <= NaN); 4355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(MinusInfinity > NaN); 4365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(MinusInfinity >= NaN); 4375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(NaN == Infinity); 4395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(NaN != Infinity); 4405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(NaN < Infinity); 4415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(NaN <= Infinity); 4425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(NaN > Infinity); 4435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(NaN >= Infinity); 4445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(NaN == Ten); 4465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(NaN != Ten); 4475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(NaN < Ten); 4485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(NaN <= Ten); 4495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(NaN > Ten); 4505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(NaN >= Ten); 4515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(NaN == MinusInfinity); 4535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(NaN != MinusInfinity); 4545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(NaN < MinusInfinity); 4555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(NaN <= MinusInfinity); 4565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(NaN > MinusInfinity); 4575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(NaN >= MinusInfinity); 4585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(NaN == NaN); 4605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(NaN != NaN); 4615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(NaN < NaN); 4625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(NaN <= NaN); 4635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(NaN > NaN); 4645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(NaN >= NaN); 4655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, Constructor) 4685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_ENCODED_DATA_EQ(0u, 0, Positive, encode(0, 0, Positive)); 4705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_ENCODED_DATA_EQ(0u, 0, Negative, encode(0, 0, Negative)); 4715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_ENCODED_DATA_EQ(1u, 0, Positive, encode(1, 0, Positive)); 4725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_ENCODED_DATA_EQ(1u, 0, Negative, encode(1, 0, Negative)); 4735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_ENCODED_DATA_EQ(1u, 1022, Positive, encode(1, 1022, Positive)); 4745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_ENCODED_DATA_EQ(1u, 1022, Negative, encode(1, 1022, Negative)); 4755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_ENCODED_DATA_EQ(1u, 1023, Positive, encode(1, 1023, Positive)); 4765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_ENCODED_DATA_EQ(1u, 1023, Negative, encode(1, 1023, Negative)); 4775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(encode(1, 2000, Positive).isInfinity()); 4785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(encode(1, 2000, Negative).isInfinity()); 4795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_ENCODED_DATA_EQ(0u, 0, Positive, encode(1, -2000, Positive)); 4805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_ENCODED_DATA_EQ(0u, 0, Negative, encode(1, -2000, Negative)); 4815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_ENCODED_DATA_EQ(UINT64_C(99999999999999998), 0, Positive, encode(UINT64_C(99999999999999998), 0, Positive)); 4825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_ENCODED_DATA_EQ(UINT64_C(99999999999999998), 0, Negative, encode(UINT64_C(99999999999999998), 0, Negative)); 4835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_ENCODED_DATA_EQ(UINT64_C(99999999999999999), 0, Positive, encode(UINT64_C(99999999999999999), 0, Positive)); 4845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_ENCODED_DATA_EQ(UINT64_C(99999999999999999), 0, Negative, encode(UINT64_C(99999999999999999), 0, Negative)); 485d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) EXPECT_DECIMAL_ENCODED_DATA_EQ(UINT64_C(100000000000000000), 0, Positive, encode(UINT64_C(100000000000000000), 0, Positive)); 486d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) EXPECT_DECIMAL_ENCODED_DATA_EQ(UINT64_C(100000000000000000), 0, Negative, encode(UINT64_C(100000000000000000), 0, Negative)); 4875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, Division) 4905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(0, 0, Positive), Decimal(0) / Decimal(1)); 4925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(2, 0, Negative), Decimal(2) / Decimal(-1)); 4935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(5, -1, Negative), Decimal(-1) / Decimal(2)); 4945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(99, 0, Positive), Decimal(99) / Decimal(1)); 4955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal(1), Decimal(-50) / Decimal(-50)); 496d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) EXPECT_EQ(encode(UINT64_C(33333333333333333), -17, Positive), Decimal(1) / Decimal(3)); 4975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(UINT64_C(12345678901234), -1, Positive), encode(UINT64_C(12345678901234), 0, Positive) / Decimal(10)); 4985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, DivisionBigExponent) 5015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, 1022, Positive), encode(1, 1022, Positive) / encode(1, 0, Positive)); 5035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, 0, Positive), encode(1, 1022, Positive) / encode(1, 1022, Positive)); 5045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::infinity(Positive), encode(1, 1022, Positive) / encode(1, -1000, Positive)); 5055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, DivisionSmallExponent) 5085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, -1022, Positive), encode(1, -1022, Positive) / encode(1, 0, Positive)); 5105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, 0, Positive), encode(1, -1022, Positive) / encode(1, -1022, Positive)); 5115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, DivisionSpecialValues) 5145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const Decimal Infinity(Decimal::infinity(Positive)); 5165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const Decimal MinusInfinity(Decimal::infinity(Negative)); 5175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const Decimal NaN(Decimal::nan()); 5185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const Decimal Zero(Decimal::zero(Positive)); 5195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const Decimal MinusZero(Decimal::zero(Negative)); 5205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const Decimal Ten(10); 5215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const Decimal MinusTen(-10); 5225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, Zero / Zero); 5245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, Zero / MinusZero); 5255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, MinusZero / Zero); 5265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, MinusZero / MinusZero); 5275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Infinity, Ten / Zero); 5295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(MinusInfinity, Ten / MinusZero); 5305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(MinusInfinity, MinusTen / Zero); 5315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Infinity, MinusTen / MinusZero); 5325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Infinity, Infinity / Zero); 5345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(MinusInfinity, Infinity / MinusZero); 5355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(MinusInfinity, MinusInfinity / Zero); 5365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Infinity, MinusInfinity / MinusZero); 5375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, Infinity / Infinity); 5395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, Infinity / MinusInfinity); 5405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, MinusInfinity / Infinity); 5415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, MinusInfinity / MinusInfinity); 5425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Zero, Ten / Infinity); 5445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(MinusZero, Ten / MinusInfinity); 5455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(MinusZero, MinusTen / Infinity); 5465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Zero, MinusTen / MinusInfinity); 5475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, NaN / NaN); 5495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, NaN / Ten); 5505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, Ten / NaN); 5515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, NaN / Infinity); 5535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, NaN / MinusInfinity); 5545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, Infinity / NaN); 5555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, MinusInfinity / NaN); 5565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, EncodedData) 5595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(0, 0, Positive), encode(0, 0, Positive)); 5615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(0, 0, Negative), encode(0, 0, Negative)); 5625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal(1), Decimal(1)); 5635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, 0, Negative), encode(1, 0, Negative)); 5645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::infinity(Positive), encode(1, 2000, Positive)); 5655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::zero(Positive), encode(1, -2000, Positive)); 5665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, Floor) 5695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal(1), Decimal(1).floor()); 5715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal(0), encode(1, -10, Positive).floor()); 5725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal(1), encode(11, -1, Positive).floor()); 5735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal(1), encode(13, -1, Positive).floor()); 5745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal(1), encode(15, -1, Positive).floor()); 5755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal(1), encode(19, -1, Positive).floor()); 57651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_EQ(Decimal(1), encode(193332, -5, Positive).floor()); 57751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_EQ(Decimal(12), encode(12002, -3, Positive).floor()); 5785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal(-1), Decimal(-1).floor()); 5805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal(-1), encode(1, -10, Negative).floor()); 5815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal(-2), encode(11, -1, Negative).floor()); 5825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal(-2), encode(13, -1, Negative).floor()); 5835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal(-2), encode(15, -1, Negative).floor()); 5845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal(-2), encode(19, -1, Negative).floor()); 58551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_EQ(Decimal(-2), encode(193332, -5, Negative).floor()); 58651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_EQ(Decimal(-13), encode(12002, -3, Negative).floor()); 5875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, FloorBigExponent) 5905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, 1000, Positive), encode(1, 1000, Positive).floor()); 5925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, 1000, Negative), encode(1, 1000, Negative).floor()); 5935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, FloorSmallExponent) 5965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(0, 0, Positive), encode(1, -1000, Positive).floor()); 5985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, 0, Negative), encode(1, -1000, Negative).floor()); 5995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, FloorSpecialValues) 6025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::infinity(Positive), Decimal::infinity(Positive).floor()); 6045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::infinity(Negative), Decimal::infinity(Negative).floor()); 6055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::nan(), Decimal::nan().floor()); 6065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, FromDouble) 6095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(0, 0, Positive), Decimal::fromDouble(0.0)); 6115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(0, 0, Negative), Decimal::fromDouble(-0.0)); 6125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, 0, Positive), Decimal::fromDouble(1)); 6135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, 0, Negative), Decimal::fromDouble(-1)); 6145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(123, 0, Positive), Decimal::fromDouble(123)); 6155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(123, 0, Negative), Decimal::fromDouble(-123)); 6165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, -1, Positive), Decimal::fromDouble(0.1)); 6175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, -1, Negative), Decimal::fromDouble(-0.1)); 6185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, FromDoubleLimits) 6215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(UINT64_C(2220446049250313), -31, Positive), Decimal::fromDouble(std::numeric_limits<double>::epsilon())); 6235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(UINT64_C(2220446049250313), -31, Negative), Decimal::fromDouble(-std::numeric_limits<double>::epsilon())); 6245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(UINT64_C(17976931348623157), 292, Positive), Decimal::fromDouble(std::numeric_limits<double>::max())); 6255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(UINT64_C(17976931348623157), 292, Negative), Decimal::fromDouble(-std::numeric_limits<double>::max())); 6265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(UINT64_C(22250738585072014), -324, Positive), Decimal::fromDouble(std::numeric_limits<double>::min())); 6275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(UINT64_C(22250738585072014), -324, Negative), Decimal::fromDouble(-std::numeric_limits<double>::min())); 6285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Decimal::fromDouble(std::numeric_limits<double>::infinity()).isInfinity()); 6295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Decimal::fromDouble(-std::numeric_limits<double>::infinity()).isInfinity()); 6305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Decimal::fromDouble(std::numeric_limits<double>::quiet_NaN()).isNaN()); 6315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Decimal::fromDouble(-std::numeric_limits<double>::quiet_NaN()).isNaN()); 6325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, FromInt32) 6355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(0, 0, Positive), Decimal(0)); 6375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, 0, Positive), Decimal(1)); 6385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, 0, Negative), Decimal(-1)); 6395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(100, 0, Positive), Decimal(100)); 6405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(100, 0, Negative), Decimal(-100)); 6415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(0x7FFFFFFF, 0, Positive), Decimal(std::numeric_limits<int32_t>::max())); 6425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(0x80000000u, 0, Negative), Decimal(std::numeric_limits<int32_t>::min())); 6435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, FromString) 6465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(0, 0, Positive), fromString("0")); 6485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(0, 0, Negative), fromString("-0")); 6495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal(1), fromString("1")); 6505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, 0, Negative), fromString("-1")); 6515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal(1), fromString("01")); 6525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(3, 0, Positive), fromString("+3")); 6535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(0, 3, Positive), fromString("0E3")); 6545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(5, -1, Positive), fromString(".5")); 6555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(100, 0, Positive), fromString("100")); 6565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(100, 0, Negative), fromString("-100")); 6575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(123, -2, Positive), fromString("1.23")); 6585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(123, -2, Negative), fromString("-1.23")); 6595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(123, 8, Positive), fromString("1.23E10")); 6605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(123, 8, Negative), fromString("-1.23E10")); 6615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(123, 8, Positive), fromString("1.23E+10")); 6625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(123, 8, Negative), fromString("-1.23E+10")); 6635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(123, -12, Positive), fromString("1.23E-10")); 6645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(123, -12, Negative), fromString("-1.23E-10")); 6655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(5, -7, Positive), fromString("0.0000005")); 6665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(0, 0, Positive), fromString("0e9999")); 6675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(123, -3, Positive), fromString("0.123")); 6685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(0, -2, Positive), fromString("00.00")); 6695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, 2, Positive), fromString("1E2")); 6705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::infinity(Positive), fromString("1E20000")); 6715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::zero(Positive), fromString("1E-20000")); 6725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1000, 1023, Positive), fromString("1E1026")); 6735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::zero(Positive), fromString("1E-1026")); 6745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::infinity(Positive), fromString("1234567890E1036")); 6755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // 2^1024 6775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const uint64_t leadingDigitsOf2PowerOf1024 = UINT64_C(17976931348623159); 6785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(leadingDigitsOf2PowerOf1024, 292, Positive), fromString("179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216")); 6795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// These strings are look like proper number, but we don't accept them. 6825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, FromStringLikeNumber) 6835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::nan(), fromString(" 123 ")); 6855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::nan(), fromString("1,234")); 6865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// fromString doesn't support infinity and NaN. 6895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, FromStringSpecialValues) 6905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::nan(), fromString("INF")); 6925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::nan(), fromString("Infinity")); 6935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::nan(), fromString("infinity")); 6945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::nan(), fromString("+Infinity")); 6955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::nan(), fromString("+infinity")); 6965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::nan(), fromString("-Infinity")); 6975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::nan(), fromString("-infinity")); 6985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::nan(), fromString("NaN")); 6995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::nan(), fromString("nan")); 7005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::nan(), fromString("+NaN")); 7015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::nan(), fromString("+nan")); 7025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::nan(), fromString("-NaN")); 7035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::nan(), fromString("-nan")); 7045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, fromStringTruncated) 7075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::nan(), fromString("x")); 7095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::nan(), fromString("0.")); 7105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::nan(), fromString("1x")); 7115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::nan(), fromString("1Ex")); 7135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::nan(), fromString("1E2x")); 7145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::nan(), fromString("1E+x")); 7155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, Multiplication) 7185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(0, 0, Positive), Decimal(0) * Decimal(0)); 7205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(2, 0, Negative), Decimal(2) * Decimal(-1)); 7215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(2, 0, Negative), Decimal(-1) * Decimal(2)); 7225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(99, 0, Positive), Decimal(99) * Decimal(1)); 7235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(2500, 0, Positive), Decimal(-50) * Decimal(-50)); 7245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, 21, Positive), encode(UINT64_C(10000000000), 0, Positive) * encode(UINT64_C(100000000000), 0, Positive)); 7255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, MultiplicationBigExponent) 7285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, 1022, Positive), encode(1, 1022, Positive) * encode(1, 0, Positive)); 7305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::infinity(Positive), encode(1, 1022, Positive) * encode(1, 1022, Positive)); 7315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, 22, Positive), encode(1, 1022, Positive) * encode(1, -1000, Positive)); 7325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, MultiplicationSmallExponent) 7355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, -1022, Positive), encode(1, -1022, Positive) * encode(1, 0, Positive)); 7375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(0, 0, Positive), encode(1, -1022, Positive) * encode(1, -1022, Positive)); 7385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, MultiplicationSpecialValues) 7415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const Decimal Infinity(Decimal::infinity(Positive)); 7435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const Decimal MinusInfinity(Decimal::infinity(Negative)); 7445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const Decimal NaN(Decimal::nan()); 7455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const Decimal Ten(10); 7465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const Decimal MinusTen(-10); 7475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const Decimal Zero(Decimal::zero(Positive)); 7485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const Decimal MinusZero(Decimal::zero(Negative)); 7495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Infinity, Infinity * Infinity); 7515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(MinusInfinity, Infinity * MinusInfinity); 7525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(MinusInfinity, MinusInfinity * Infinity); 7535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Infinity, MinusInfinity * MinusInfinity); 7545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, Infinity * Zero); 7565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, Zero * MinusInfinity); 7575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, MinusInfinity * Zero); 7585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, MinusInfinity * Zero); 7595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, Infinity * MinusZero); 7615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, MinusZero * MinusInfinity); 7625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, MinusInfinity * MinusZero); 7635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, MinusInfinity * MinusZero); 7645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Infinity, Infinity * Ten); 7665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Infinity, Ten * Infinity); 7675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(MinusInfinity, MinusInfinity * Ten); 7685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(MinusInfinity, Ten * MinusInfinity); 7695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(MinusInfinity, Infinity * MinusTen); 7715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(MinusInfinity, MinusTen * Infinity); 7725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Infinity, MinusInfinity * MinusTen); 7735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Infinity, MinusTen * MinusInfinity); 7745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, NaN * NaN); 7765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, NaN * Ten); 7775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, Ten * NaN); 7785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, NaN * Infinity); 7805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, NaN * MinusInfinity); 7815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, Infinity * NaN); 7825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, MinusInfinity * NaN); 7835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, Negate) 7865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(0, 0, Negative), -encode(0, 0, Positive)); 7885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(0, 0, Positive), -encode(0, 0, Negative)); 7895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(0, 10, Negative), -encode(0, 10, Positive)); 7915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(0, 10, Positive), -encode(0, 10, Negative)); 7925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(0, -10, Negative), -encode(0, -10, Positive)); 7945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(0, -10, Positive), -encode(0, -10, Negative)); 7955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, 0, Negative), -encode(1, 0, Positive)); 7975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, 0, Positive), -encode(1, 0, Negative)); 7985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, 10, Negative), -encode(1, 10, Positive)); 8005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, 10, Positive), -encode(1, 10, Negative)); 8015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, -10, Negative), -encode(1, -10, Positive)); 8035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, -10, Positive), -encode(1, -10, Negative)); 8045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, NegateBigExponent) 8075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, 1000, Negative), -encode(1, 1000, Positive)); 8095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, 1000, Positive), -encode(1, 1000, Negative)); 8105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, NegateSmallExponent) 8135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, -1000, Negative), -encode(1, -1000, Positive)); 8155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, -1000, Positive), -encode(1, -1000, Negative)); 8165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, NegateSpecialValues) 8195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::infinity(Negative), -Decimal::infinity(Positive)); 8215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::infinity(Positive), -Decimal::infinity(Negative)); 8225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::nan(), -Decimal::nan()); 8235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, Predicates) 8265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Decimal::zero(Positive).isFinite()); 8285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Decimal::zero(Positive).isInfinity()); 8295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Decimal::zero(Positive).isNaN()); 8305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Decimal::zero(Positive).isPositive()); 8315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Decimal::zero(Positive).isNegative()); 8325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Decimal::zero(Positive).isSpecial()); 8335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Decimal::zero(Positive).isZero()); 8345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Decimal::zero(Negative).isFinite()); 8365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Decimal::zero(Negative).isInfinity()); 8375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Decimal::zero(Negative).isNaN()); 8385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Decimal::zero(Negative).isPositive()); 8395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Decimal::zero(Negative).isNegative()); 8405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Decimal::zero(Negative).isSpecial()); 8415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Decimal::zero(Negative).isZero()); 8425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Decimal(123).isFinite()); 8445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Decimal(123).isInfinity()); 8455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Decimal(123).isNaN()); 8465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Decimal(123).isPositive()); 8475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Decimal(123).isNegative()); 8485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Decimal(123).isSpecial()); 8495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Decimal(123).isZero()); 8505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Decimal(-123).isFinite()); 8525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Decimal(-123).isInfinity()); 8535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Decimal(-123).isNaN()); 8545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Decimal(-123).isPositive()); 8555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Decimal(-123).isNegative()); 8565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Decimal(-123).isSpecial()); 8575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Decimal(-123).isZero()); 8585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, PredicatesSpecialValues) 8615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Decimal::infinity(Positive).isFinite()); 8635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Decimal::infinity(Positive).isInfinity()); 8645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Decimal::infinity(Positive).isNaN()); 8655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Decimal::infinity(Positive).isPositive()); 8665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Decimal::infinity(Positive).isNegative()); 8675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Decimal::infinity(Positive).isSpecial()); 8685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Decimal::infinity(Positive).isZero()); 8695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Decimal::infinity(Negative).isFinite()); 8715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Decimal::infinity(Negative).isInfinity()); 8725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Decimal::infinity(Negative).isNaN()); 8735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Decimal::infinity(Negative).isPositive()); 8745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Decimal::infinity(Negative).isNegative()); 8755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Decimal::infinity(Negative).isSpecial()); 8765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Decimal::infinity(Negative).isZero()); 8775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Decimal::nan().isFinite()); 8795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Decimal::nan().isInfinity()); 8805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Decimal::nan().isNaN()); 8815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_TRUE(Decimal::nan().isSpecial()); 8825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_FALSE(Decimal::nan().isZero()); 8835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// LayoutTests/fast/forms/number/number-stepup-stepdown-from-renderer 8865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, RealWorldExampleNumberStepUpStepDownFromRenderer) 8875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("10", stepDown("0", "100", "10", "19", 1)); 8895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("90", stepUp("0", "99", "10", "89", 1)); 8905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("1", stepUp("0", "1", "0.33333333333333333", "0", 3)); // step=1/3 8915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("0.01", stepUp("0", "0.01", "0.0033333333333333333", "0", 3)); // step=1/300 8925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("1", stepUp("0", "1", "0.003921568627450980", "0", 255)); // step=1/255 8935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("1", stepUp("0", "1", "0.1", "0", 10)); 8945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, RealWorldExampleNumberStepUpStepDownFromRendererRounding) 8975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("5.015", stepUp("0", "100", "0.005", "5.005", 2)); 8995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("5.06", stepUp("0", "100", "0.005", "5.005", 11)); 9005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("5.065", stepUp("0", "100", "0.005", "5.005", 12)); 9015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("5.015", stepUp("4", "9", "0.005", "5.005", 2)); 9035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("5.06", stepUp("4", "9", "0.005", "5.005", 11)); 9045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("5.065", stepUp("4", "9", "0.005", "5.005", 12)); 9055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, RealWorldExampleRangeStepUpStepDown) 9085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("1e+38", stepUp("0", "1E38", "1", "1E38", 9)); 9105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("1e+38", stepDown("0", "1E38", "1", "1E38", 9)); 9115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, Remainder) 9145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 915926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) EXPECT_EQ(encode(21, -1, Positive), encode(21, -1, Positive).remainder(3)); 9165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal(1), Decimal(10).remainder(3)); 917926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) EXPECT_EQ(Decimal(1), Decimal(10).remainder(-3)); 9185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, 0, Negative), Decimal(-10).remainder(3)); 919926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) EXPECT_EQ(Decimal(-1), Decimal(-10).remainder(-3)); 9205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(2, -1, Positive), encode(102, -1, Positive).remainder(1)); 9215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, -1, Positive), Decimal(10).remainder(encode(3, -1, Positive))); 922926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) EXPECT_EQ(Decimal(1), encode(36, -1, Positive).remainder(encode(13, -1, Positive))); 923d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) EXPECT_EQ(encode(1, 86, Positive), (encode(1234, 100, Positive).remainder(Decimal(3)))); 924926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) EXPECT_EQ(Decimal(500), (Decimal(500).remainder(1000))); 925926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) EXPECT_EQ(Decimal(-500), (Decimal(-500).remainder(1000))); 9265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, RemainderBigExponent) 9295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(0, 1022, Positive), encode(1, 1022, Positive).remainder(encode(1, 0, Positive))); 9315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(0, 1022, Positive), encode(1, 1022, Positive).remainder(encode(1, 1022, Positive))); 9325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::infinity(Positive), encode(1, 1022, Positive).remainder(encode(1, -1000, Positive))); 9335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, RemainderSmallExponent) 9365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, -1022, Positive), encode(1, -1022, Positive).remainder(encode(1, 0, Positive))); 9385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(0, -1022, Positive), encode(1, -1022, Positive).remainder(encode(1, -1022, Positive))); 9395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, RemainderSpecialValues) 9425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::infinity(Positive), Decimal::infinity(Positive).remainder(1)); 9445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::infinity(Negative), Decimal::infinity(Negative).remainder(1)); 9455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::nan(), Decimal::nan().remainder(1)); 9465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::infinity(Negative), Decimal::infinity(Positive).remainder(-1)); 9485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::infinity(Positive), Decimal::infinity(Negative).remainder(-1)); 9495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::nan(), Decimal::nan().remainder(-1)); 9505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::infinity(Positive), Decimal::infinity(Positive).remainder(3)); 9525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::infinity(Negative), Decimal::infinity(Negative).remainder(3)); 9535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::nan(), Decimal::nan().remainder(3)); 9545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::infinity(Negative), Decimal::infinity(Positive).remainder(-1)); 9565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::infinity(Positive), Decimal::infinity(Negative).remainder(-1)); 9575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::nan(), Decimal::nan().remainder(-1)); 9585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::nan(), Decimal(1).remainder(Decimal::infinity(Positive))); 9605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::nan(), Decimal(1).remainder(Decimal::infinity(Negative))); 9615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::nan(), Decimal(1).remainder(Decimal::nan())); 9625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, Round) 9655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal(1), (Decimal(9) / Decimal(10)).round()); 9675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal(25), (Decimal(5) / fromString("0.200")).round()); 9685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal(3), (Decimal(5) / Decimal(2)).round()); 9695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal(1), (Decimal(2) / Decimal(3)).round()); 9705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal(3), (Decimal(10) / Decimal(3)).round()); 9715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal(3), (Decimal(1) / fromString("0.3")).round()); 9725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal(10), (Decimal(1) / fromString("0.1")).round()); 9735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal(5), (Decimal(1) / fromString("0.2")).round()); 9745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal(10), (fromString("10.2") / 1).round()); 9755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1234, 100, Positive), encode(1234, 100, Positive).round()); 97651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 97751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_EQ(Decimal(2), encode(190002, -5, Positive).round()); 97851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_EQ(Decimal(2), encode(150002, -5, Positive).round()); 97951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_EQ(Decimal(2), encode(150000, -5, Positive).round()); 98051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_EQ(Decimal(12), encode(12492, -3, Positive).round()); 98151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_EQ(Decimal(13), encode(12502, -3, Positive).round()); 98251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 98351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_EQ(Decimal(-2), encode(190002, -5, Negative).round()); 98451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_EQ(Decimal(-2), encode(150002, -5, Negative).round()); 98551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_EQ(Decimal(-2), encode(150000, -5, Negative).round()); 98651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_EQ(Decimal(-12), encode(12492, -3, Negative).round()); 98751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) EXPECT_EQ(Decimal(-13), encode(12502, -3, Negative).round()); 9885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, RoundSpecialValues) 9915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::infinity(Positive), Decimal::infinity(Positive).round()); 9935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::infinity(Negative), Decimal::infinity(Negative).round()); 9945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Decimal::nan(), Decimal::nan().round()); 9955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, Subtract) 9985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(0, 0, Positive), Decimal(0) - Decimal(0)); 10005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(3, 0, Positive), Decimal(2) - Decimal(-1)); 10015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(3, 0, Negative), Decimal(-1) - Decimal(2)); 10025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(98, 0, Positive), Decimal(99) - Decimal(1)); 10035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(0, 0, Positive), Decimal(-50) - Decimal(-50)); 10045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(UINT64_C(1000000000000000), 35, Positive), encode(1, 50, Positive) - Decimal(1)); 10055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(UINT64_C(1000000000000000), 35, Negative), Decimal(1) - encode(1, 50, Positive)); 10065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, SubtractBigExponent) 10095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 10105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, 1022, Positive), encode(1, 1022, Positive) - encode(1, 0, Positive)); 10115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(0, 0, Positive), encode(1, 1022, Positive) - encode(1, 1022, Positive)); 10125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(1, 1022, Positive), encode(1, 1022, Positive) + encode(1, -1000, Positive)); 10135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, SubtractSmallExponent) 10165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 10175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(UINT64_C(10000000000000000), -16, Negative), encode(1, -1022, Positive) - encode(1, 0, Positive)); 10185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(encode(0, 0, Positive), encode(1, -1022, Positive) - encode(1, -1022, Positive)); 10195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, SubtractSpecialValues) 10225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 10235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const Decimal Infinity(Decimal::infinity(Positive)); 10245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const Decimal MinusInfinity(Decimal::infinity(Negative)); 10255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const Decimal NaN(Decimal::nan()); 10265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const Decimal Ten(10); 10275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, Infinity - Infinity); 10295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Infinity, Infinity - MinusInfinity); 10305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(MinusInfinity, MinusInfinity - Infinity); 10315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, MinusInfinity - MinusInfinity); 10325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Infinity, Infinity - Ten); 10345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(MinusInfinity, Ten - Infinity); 10355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(MinusInfinity, MinusInfinity - Ten); 10365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(Infinity, Ten - MinusInfinity); 10375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, NaN - NaN); 10395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, NaN - Ten); 10405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, Ten - NaN); 10415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, NaN - Infinity); 10435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, NaN - MinusInfinity); 10445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, Infinity - NaN); 10455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(NaN, MinusInfinity - NaN); 10465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, ToDouble) 10495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 10505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(0.0, encode(0, 0, Positive).toDouble()); 10515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(-0.0, encode(0, 0, Negative).toDouble()); 10525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(1.0, encode(1, 0, Positive).toDouble()); 10545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(-1.0, encode(1, 0, Negative).toDouble()); 10555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(0.1, encode(1, -1, Positive).toDouble()); 10575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(-0.1, encode(1, -1, Negative).toDouble()); 10585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(0.3, encode(3, -1, Positive).toDouble()); 10595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(-0.3, encode(3, -1, Negative).toDouble()); 10605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(0.6, encode(6, -1, Positive).toDouble()); 10615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(-0.6, encode(6, -1, Negative).toDouble()); 10625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(0.7, encode(7, -1, Positive).toDouble()); 10635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(-0.7, encode(7, -1, Negative).toDouble()); 10645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(0.01, encode(1, -2, Positive).toDouble()); 10665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(0.001, encode(1, -3, Positive).toDouble()); 10675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(0.0001, encode(1, -4, Positive).toDouble()); 10685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(0.00001, encode(1, -5, Positive).toDouble()); 10695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(1e+308, encode(1, 308, Positive).toDouble()); 10715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(1e-307, encode(1, -307, Positive).toDouble()); 10725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1073926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) EXPECT_TRUE(std::isinf(encode(1, 1000, Positive).toDouble())); 10745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_EQ(0.0, encode(1, -1000, Positive).toDouble()); 10755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, ToDoubleSpecialValues) 10785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1079926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) EXPECT_TRUE(std::isinf(Decimal::infinity(Decimal::Positive).toDouble())); 1080926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) EXPECT_TRUE(std::isinf(Decimal::infinity(Decimal::Negative).toDouble())); 1081926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) EXPECT_TRUE(std::isnan(Decimal::nan().toDouble())); 10825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, ToString) 10855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 10865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("0", Decimal::zero(Positive)); 10875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("-0", Decimal::zero(Negative)); 10885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("1", Decimal(1)); 10895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("-1", Decimal(-1)); 10905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("1234567", Decimal(1234567)); 10915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("-1234567", Decimal(-1234567)); 10925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("0.5", encode(5, -1, Positive)); 10935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("-0.5", encode(5, -1, Negative)); 10945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("12.345", encode(12345, -3, Positive)); 10955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("-12.345", encode(12345, -3, Negative)); 10965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("0.12345", encode(12345, -5, Positive)); 10975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("-0.12345", encode(12345, -5, Negative)); 10985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("50", encode(50, 0, Positive)); 10995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("-50", encode(50, 0, Negative)); 11005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("5e+1", encode(5, 1, Positive)); 11015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("-5e+1", encode(5, 1, Negative)); 11025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("5.678e+103", encode(5678, 100, Positive)); 11035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("-5.678e+103", encode(5678, 100, Negative)); 11045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("5.678e-97", encode(5678, -100, Positive)); 11055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("-5.678e-97", encode(5678, -100, Negative)); 11065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("8639999913600001", encode(UINT64_C(8639999913600001), 0, Positive)); 11075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("9007199254740991", encode((static_cast<uint64_t>(1) << DBL_MANT_DIG) - 1, 0, Positive)); 11085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("99999999999999999", encode(UINT64_C(99999999999999999), 0, Positive)); 11095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("9.9999999999999999e+17", encode(UINT64_C(99999999999999999), 1, Positive)); 11105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("9.9999999999999999e+18", encode(UINT64_C(99999999999999999), 2, Positive)); 11115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("1e+16", encode(UINT64_C(99999999999999999), -1, Positive)); 11125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("1000000000000000", encode(UINT64_C(99999999999999999), -2, Positive)); 11135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("1", encode(UINT64_C(99999999999999999), -17, Positive)); 11145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("0.001", encode(UINT64_C(99999999999999999), -20, Positive)); 11155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("1e-83", encode(UINT64_C(99999999999999999), -100, Positive)); 11165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 11175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TEST_F(DecimalTest, ToStringSpecialValues) 11195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 11205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("Infinity", Decimal::infinity(Positive)); 11215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("-Infinity", Decimal::infinity(Negative)); 11225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EXPECT_DECIMAL_STREQ("NaN", Decimal::nan()); 11235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1124