//===- llvm/unittest/Support/ScaledNumberTest.cpp - ScaledPair tests -----==//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

#include "llvm/Support/ScaledNumber.h"
#include "llvm/Support/DataTypes.h"
#include "gtest/gtest.h"

using namespace llvm;
using namespace llvm::ScaledNumbers;

namespace {

template <class UIntT> struct ScaledPair {
  UIntT D;
  int S;
  ScaledPair(const std::pair<UIntT, int16_t> &F) : D(F.first), S(F.second) {}
  ScaledPair(UIntT D, int S) : D(D), S(S) {}

  bool operator==(const ScaledPair<UIntT> &X) const {
    return D == X.D && S == X.S;
  }
};
template <class UIntT>
bool operator==(const std::pair<UIntT, int16_t> &L,
                const ScaledPair<UIntT> &R) {
  return ScaledPair<UIntT>(L) == R;
}
template <class UIntT>
void PrintTo(const ScaledPair<UIntT> &F, ::std::ostream *os) {
  *os << F.D << "*2^" << F.S;
}

typedef ScaledPair<uint32_t> SP32;
typedef ScaledPair<uint64_t> SP64;

TEST(ScaledNumberHelpersTest, getRounded) {
  EXPECT_EQ(getRounded32(0, 0, false), SP32(0, 0));
  EXPECT_EQ(getRounded32(0, 0, true), SP32(1, 0));
  EXPECT_EQ(getRounded32(20, 21, true), SP32(21, 21));
  EXPECT_EQ(getRounded32(UINT32_MAX, 0, false), SP32(UINT32_MAX, 0));
  EXPECT_EQ(getRounded32(UINT32_MAX, 0, true), SP32(1 << 31, 1));

  EXPECT_EQ(getRounded64(0, 0, false), SP64(0, 0));
  EXPECT_EQ(getRounded64(0, 0, true), SP64(1, 0));
  EXPECT_EQ(getRounded64(20, 21, true), SP64(21, 21));
  EXPECT_EQ(getRounded64(UINT32_MAX, 0, false), SP64(UINT32_MAX, 0));
  EXPECT_EQ(getRounded64(UINT32_MAX, 0, true), SP64(UINT64_C(1) << 32, 0));
  EXPECT_EQ(getRounded64(UINT64_MAX, 0, false), SP64(UINT64_MAX, 0));
  EXPECT_EQ(getRounded64(UINT64_MAX, 0, true), SP64(UINT64_C(1) << 63, 1));
}

TEST(ScaledNumberHelpersTest, getAdjusted) {
  const uint64_t Max32In64 = UINT32_MAX;
  EXPECT_EQ(getAdjusted32(0), SP32(0, 0));
  EXPECT_EQ(getAdjusted32(0, 5), SP32(0, 5));
  EXPECT_EQ(getAdjusted32(UINT32_MAX), SP32(UINT32_MAX, 0));
  EXPECT_EQ(getAdjusted32(Max32In64 << 1), SP32(UINT32_MAX, 1));
  EXPECT_EQ(getAdjusted32(Max32In64 << 1, 1), SP32(UINT32_MAX, 2));
  EXPECT_EQ(getAdjusted32(Max32In64 << 31), SP32(UINT32_MAX, 31));
  EXPECT_EQ(getAdjusted32(Max32In64 << 32), SP32(UINT32_MAX, 32));
  EXPECT_EQ(getAdjusted32(Max32In64 + 1), SP32(1u << 31, 1));
  EXPECT_EQ(getAdjusted32(UINT64_MAX), SP32(1u << 31, 33));

  EXPECT_EQ(getAdjusted64(0), SP64(0, 0));
  EXPECT_EQ(getAdjusted64(0, 5), SP64(0, 5));
  EXPECT_EQ(getAdjusted64(UINT32_MAX), SP64(UINT32_MAX, 0));
  EXPECT_EQ(getAdjusted64(Max32In64 << 1), SP64(Max32In64 << 1, 0));
  EXPECT_EQ(getAdjusted64(Max32In64 << 1, 1), SP64(Max32In64 << 1, 1));
  EXPECT_EQ(getAdjusted64(Max32In64 << 31), SP64(Max32In64 << 31, 0));
  EXPECT_EQ(getAdjusted64(Max32In64 << 32), SP64(Max32In64 << 32, 0));
  EXPECT_EQ(getAdjusted64(Max32In64 + 1), SP64(Max32In64 + 1, 0));
  EXPECT_EQ(getAdjusted64(UINT64_MAX), SP64(UINT64_MAX, 0));
}

TEST(ScaledNumberHelpersTest, getProduct) {
  // Zero.
  EXPECT_EQ(SP32(0, 0), getProduct32(0, 0));
  EXPECT_EQ(SP32(0, 0), getProduct32(0, 1));
  EXPECT_EQ(SP32(0, 0), getProduct32(0, 33));

  // Basic.
  EXPECT_EQ(SP32(6, 0), getProduct32(2, 3));
  EXPECT_EQ(SP32(UINT16_MAX / 3 * UINT16_MAX / 5 * 2, 0),
            getProduct32(UINT16_MAX / 3, UINT16_MAX / 5 * 2));

  // Overflow, no loss of precision.
  // ==> 0xf00010 * 0x1001
  // ==> 0xf00f00000 + 0x10010
  // ==> 0xf00f10010
  // ==> 0xf00f1001 * 2^4
  EXPECT_EQ(SP32(0xf00f1001, 4), getProduct32(0xf00010, 0x1001));

  // Overflow, loss of precision, rounds down.
  // ==> 0xf000070 * 0x1001
  // ==> 0xf00f000000 + 0x70070
  // ==> 0xf00f070070
  // ==> 0xf00f0700 * 2^8
  EXPECT_EQ(SP32(0xf00f0700, 8), getProduct32(0xf000070, 0x1001));

  // Overflow, loss of precision, rounds up.
  // ==> 0xf000080 * 0x1001
  // ==> 0xf00f000000 + 0x80080
  // ==> 0xf00f080080
  // ==> 0xf00f0801 * 2^8
  EXPECT_EQ(SP32(0xf00f0801, 8), getProduct32(0xf000080, 0x1001));

  // Reverse operand order.
  EXPECT_EQ(SP32(0, 0), getProduct32(1, 0));
  EXPECT_EQ(SP32(0, 0), getProduct32(33, 0));
  EXPECT_EQ(SP32(6, 0), getProduct32(3, 2));
  EXPECT_EQ(SP32(UINT16_MAX / 3 * UINT16_MAX / 5 * 2, 0),
            getProduct32(UINT16_MAX / 5 * 2, UINT16_MAX / 3));
  EXPECT_EQ(SP32(0xf00f1001, 4), getProduct32(0x1001, 0xf00010));
  EXPECT_EQ(SP32(0xf00f0700, 8), getProduct32(0x1001, 0xf000070));
  EXPECT_EQ(SP32(0xf00f0801, 8), getProduct32(0x1001, 0xf000080));

  // Round to overflow.
  EXPECT_EQ(SP64(UINT64_C(1) << 63, 64),
            getProduct64(UINT64_C(10376293541461622786),
                         UINT64_C(16397105843297379211)));

  // Big number with rounding.
  EXPECT_EQ(SP64(UINT64_C(9223372036854775810), 64),
            getProduct64(UINT64_C(18446744073709551556),
                         UINT64_C(9223372036854775840)));
}

TEST(ScaledNumberHelpersTest, getQuotient) {
  // Zero.
  EXPECT_EQ(SP32(0, 0), getQuotient32(0, 0));
  EXPECT_EQ(SP32(0, 0), getQuotient32(0, 1));
  EXPECT_EQ(SP32(0, 0), getQuotient32(0, 73));
  EXPECT_EQ(SP32(UINT32_MAX, MaxScale), getQuotient32(1, 0));
  EXPECT_EQ(SP32(UINT32_MAX, MaxScale), getQuotient32(6, 0));

  // Powers of two.
  EXPECT_EQ(SP32(1u << 31, -31), getQuotient32(1, 1));
  EXPECT_EQ(SP32(1u << 31, -30), getQuotient32(2, 1));
  EXPECT_EQ(SP32(1u << 31, -33), getQuotient32(4, 16));
  EXPECT_EQ(SP32(7u << 29, -29), getQuotient32(7, 1));
  EXPECT_EQ(SP32(7u << 29, -30), getQuotient32(7, 2));
  EXPECT_EQ(SP32(7u << 29, -33), getQuotient32(7, 16));

  // Divide evenly.
  EXPECT_EQ(SP32(3u << 30, -30), getQuotient32(9, 3));
  EXPECT_EQ(SP32(9u << 28, -28), getQuotient32(63, 7));

  // Divide unevenly.
  EXPECT_EQ(SP32(0xaaaaaaab, -33), getQuotient32(1, 3));
  EXPECT_EQ(SP32(0xd5555555, -31), getQuotient32(5, 3));

  // 64-bit division is hard to test, since divide64 doesn't canonicalized its
  // output.  However, this is the algorithm the implementation uses:
  //
  // - Shift divisor right.
  // - If we have 1 (power of 2), return early -- not canonicalized.
  // - Shift dividend left.
  // - 64-bit integer divide.
  // - If there's a remainder, continue with long division.
  //
  // TODO: require less knowledge about the implementation in the test.

  // Zero.
  EXPECT_EQ(SP64(0, 0), getQuotient64(0, 0));
  EXPECT_EQ(SP64(0, 0), getQuotient64(0, 1));
  EXPECT_EQ(SP64(0, 0), getQuotient64(0, 73));
  EXPECT_EQ(SP64(UINT64_MAX, MaxScale), getQuotient64(1, 0));
  EXPECT_EQ(SP64(UINT64_MAX, MaxScale), getQuotient64(6, 0));

  // Powers of two.
  EXPECT_EQ(SP64(1, 0), getQuotient64(1, 1));
  EXPECT_EQ(SP64(2, 0), getQuotient64(2, 1));
  EXPECT_EQ(SP64(4, -4), getQuotient64(4, 16));
  EXPECT_EQ(SP64(7, 0), getQuotient64(7, 1));
  EXPECT_EQ(SP64(7, -1), getQuotient64(7, 2));
  EXPECT_EQ(SP64(7, -4), getQuotient64(7, 16));

  // Divide evenly.
  EXPECT_EQ(SP64(UINT64_C(3) << 60, -60), getQuotient64(9, 3));
  EXPECT_EQ(SP64(UINT64_C(9) << 58, -58), getQuotient64(63, 7));

  // Divide unevenly.
  EXPECT_EQ(SP64(0xaaaaaaaaaaaaaaab, -65), getQuotient64(1, 3));
  EXPECT_EQ(SP64(0xd555555555555555, -63), getQuotient64(5, 3));
}

TEST(ScaledNumberHelpersTest, getLg) {
  EXPECT_EQ(0, getLg(UINT32_C(1), 0));
  EXPECT_EQ(1, getLg(UINT32_C(1), 1));
  EXPECT_EQ(1, getLg(UINT32_C(2), 0));
  EXPECT_EQ(3, getLg(UINT32_C(1), 3));
  EXPECT_EQ(3, getLg(UINT32_C(7), 0));
  EXPECT_EQ(3, getLg(UINT32_C(8), 0));
  EXPECT_EQ(3, getLg(UINT32_C(9), 0));
  EXPECT_EQ(3, getLg(UINT32_C(64), -3));
  EXPECT_EQ(31, getLg((UINT32_MAX >> 1) + 2, 0));
  EXPECT_EQ(32, getLg(UINT32_MAX, 0));
  EXPECT_EQ(-1, getLg(UINT32_C(1), -1));
  EXPECT_EQ(-1, getLg(UINT32_C(2), -2));
  EXPECT_EQ(INT32_MIN, getLg(UINT32_C(0), -1));
  EXPECT_EQ(INT32_MIN, getLg(UINT32_C(0), 0));
  EXPECT_EQ(INT32_MIN, getLg(UINT32_C(0), 1));

  EXPECT_EQ(0, getLg(UINT64_C(1), 0));
  EXPECT_EQ(1, getLg(UINT64_C(1), 1));
  EXPECT_EQ(1, getLg(UINT64_C(2), 0));
  EXPECT_EQ(3, getLg(UINT64_C(1), 3));
  EXPECT_EQ(3, getLg(UINT64_C(7), 0));
  EXPECT_EQ(3, getLg(UINT64_C(8), 0));
  EXPECT_EQ(3, getLg(UINT64_C(9), 0));
  EXPECT_EQ(3, getLg(UINT64_C(64), -3));
  EXPECT_EQ(63, getLg((UINT64_MAX >> 1) + 2, 0));
  EXPECT_EQ(64, getLg(UINT64_MAX, 0));
  EXPECT_EQ(-1, getLg(UINT64_C(1), -1));
  EXPECT_EQ(-1, getLg(UINT64_C(2), -2));
  EXPECT_EQ(INT32_MIN, getLg(UINT64_C(0), -1));
  EXPECT_EQ(INT32_MIN, getLg(UINT64_C(0), 0));
  EXPECT_EQ(INT32_MIN, getLg(UINT64_C(0), 1));
}

TEST(ScaledNumberHelpersTest, getLgFloor) {
  EXPECT_EQ(0, getLgFloor(UINT32_C(1), 0));
  EXPECT_EQ(1, getLgFloor(UINT32_C(1), 1));
  EXPECT_EQ(1, getLgFloor(UINT32_C(2), 0));
  EXPECT_EQ(2, getLgFloor(UINT32_C(7), 0));
  EXPECT_EQ(3, getLgFloor(UINT32_C(1), 3));
  EXPECT_EQ(3, getLgFloor(UINT32_C(8), 0));
  EXPECT_EQ(3, getLgFloor(UINT32_C(9), 0));
  EXPECT_EQ(3, getLgFloor(UINT32_C(64), -3));
  EXPECT_EQ(31, getLgFloor((UINT32_MAX >> 1) + 2, 0));
  EXPECT_EQ(31, getLgFloor(UINT32_MAX, 0));
  EXPECT_EQ(INT32_MIN, getLgFloor(UINT32_C(0), -1));
  EXPECT_EQ(INT32_MIN, getLgFloor(UINT32_C(0), 0));
  EXPECT_EQ(INT32_MIN, getLgFloor(UINT32_C(0), 1));

  EXPECT_EQ(0, getLgFloor(UINT64_C(1), 0));
  EXPECT_EQ(1, getLgFloor(UINT64_C(1), 1));
  EXPECT_EQ(1, getLgFloor(UINT64_C(2), 0));
  EXPECT_EQ(2, getLgFloor(UINT64_C(7), 0));
  EXPECT_EQ(3, getLgFloor(UINT64_C(1), 3));
  EXPECT_EQ(3, getLgFloor(UINT64_C(8), 0));
  EXPECT_EQ(3, getLgFloor(UINT64_C(9), 0));
  EXPECT_EQ(3, getLgFloor(UINT64_C(64), -3));
  EXPECT_EQ(63, getLgFloor((UINT64_MAX >> 1) + 2, 0));
  EXPECT_EQ(63, getLgFloor(UINT64_MAX, 0));
  EXPECT_EQ(INT32_MIN, getLgFloor(UINT64_C(0), -1));
  EXPECT_EQ(INT32_MIN, getLgFloor(UINT64_C(0), 0));
  EXPECT_EQ(INT32_MIN, getLgFloor(UINT64_C(0), 1));
}

TEST(ScaledNumberHelpersTest, getLgCeiling) {
  EXPECT_EQ(0, getLgCeiling(UINT32_C(1), 0));
  EXPECT_EQ(1, getLgCeiling(UINT32_C(1), 1));
  EXPECT_EQ(1, getLgCeiling(UINT32_C(2), 0));
  EXPECT_EQ(3, getLgCeiling(UINT32_C(1), 3));
  EXPECT_EQ(3, getLgCeiling(UINT32_C(7), 0));
  EXPECT_EQ(3, getLgCeiling(UINT32_C(8), 0));
  EXPECT_EQ(3, getLgCeiling(UINT32_C(64), -3));
  EXPECT_EQ(4, getLgCeiling(UINT32_C(9), 0));
  EXPECT_EQ(32, getLgCeiling(UINT32_MAX, 0));
  EXPECT_EQ(32, getLgCeiling((UINT32_MAX >> 1) + 2, 0));
  EXPECT_EQ(INT32_MIN, getLgCeiling(UINT32_C(0), -1));
  EXPECT_EQ(INT32_MIN, getLgCeiling(UINT32_C(0), 0));
  EXPECT_EQ(INT32_MIN, getLgCeiling(UINT32_C(0), 1));

  EXPECT_EQ(0, getLgCeiling(UINT64_C(1), 0));
  EXPECT_EQ(1, getLgCeiling(UINT64_C(1), 1));
  EXPECT_EQ(1, getLgCeiling(UINT64_C(2), 0));
  EXPECT_EQ(3, getLgCeiling(UINT64_C(1), 3));
  EXPECT_EQ(3, getLgCeiling(UINT64_C(7), 0));
  EXPECT_EQ(3, getLgCeiling(UINT64_C(8), 0));
  EXPECT_EQ(3, getLgCeiling(UINT64_C(64), -3));
  EXPECT_EQ(4, getLgCeiling(UINT64_C(9), 0));
  EXPECT_EQ(64, getLgCeiling((UINT64_MAX >> 1) + 2, 0));
  EXPECT_EQ(64, getLgCeiling(UINT64_MAX, 0));
  EXPECT_EQ(INT32_MIN, getLgCeiling(UINT64_C(0), -1));
  EXPECT_EQ(INT32_MIN, getLgCeiling(UINT64_C(0), 0));
  EXPECT_EQ(INT32_MIN, getLgCeiling(UINT64_C(0), 1));
}

TEST(ScaledNumberHelpersTest, compare) {
  EXPECT_EQ(0, compare(UINT32_C(0), 0, UINT32_C(0), 1));
  EXPECT_EQ(0, compare(UINT32_C(0), 0, UINT32_C(0), -10));
  EXPECT_EQ(0, compare(UINT32_C(0), 0, UINT32_C(0), 20));
  EXPECT_EQ(0, compare(UINT32_C(8), 0, UINT32_C(64), -3));
  EXPECT_EQ(0, compare(UINT32_C(8), 0, UINT32_C(32), -2));
  EXPECT_EQ(0, compare(UINT32_C(8), 0, UINT32_C(16), -1));
  EXPECT_EQ(0, compare(UINT32_C(8), 0, UINT32_C(8), 0));
  EXPECT_EQ(0, compare(UINT32_C(8), 0, UINT32_C(4), 1));
  EXPECT_EQ(0, compare(UINT32_C(8), 0, UINT32_C(2), 2));
  EXPECT_EQ(0, compare(UINT32_C(8), 0, UINT32_C(1), 3));
  EXPECT_EQ(-1, compare(UINT32_C(0), 0, UINT32_C(1), 3));
  EXPECT_EQ(-1, compare(UINT32_C(7), 0, UINT32_C(1), 3));
  EXPECT_EQ(-1, compare(UINT32_C(7), 0, UINT32_C(64), -3));
  EXPECT_EQ(1, compare(UINT32_C(9), 0, UINT32_C(1), 3));
  EXPECT_EQ(1, compare(UINT32_C(9), 0, UINT32_C(64), -3));
  EXPECT_EQ(1, compare(UINT32_C(9), 0, UINT32_C(0), 0));

  EXPECT_EQ(0, compare(UINT64_C(0), 0, UINT64_C(0), 1));
  EXPECT_EQ(0, compare(UINT64_C(0), 0, UINT64_C(0), -10));
  EXPECT_EQ(0, compare(UINT64_C(0), 0, UINT64_C(0), 20));
  EXPECT_EQ(0, compare(UINT64_C(8), 0, UINT64_C(64), -3));
  EXPECT_EQ(0, compare(UINT64_C(8), 0, UINT64_C(32), -2));
  EXPECT_EQ(0, compare(UINT64_C(8), 0, UINT64_C(16), -1));
  EXPECT_EQ(0, compare(UINT64_C(8), 0, UINT64_C(8), 0));
  EXPECT_EQ(0, compare(UINT64_C(8), 0, UINT64_C(4), 1));
  EXPECT_EQ(0, compare(UINT64_C(8), 0, UINT64_C(2), 2));
  EXPECT_EQ(0, compare(UINT64_C(8), 0, UINT64_C(1), 3));
  EXPECT_EQ(-1, compare(UINT64_C(0), 0, UINT64_C(1), 3));
  EXPECT_EQ(-1, compare(UINT64_C(7), 0, UINT64_C(1), 3));
  EXPECT_EQ(-1, compare(UINT64_C(7), 0, UINT64_C(64), -3));
  EXPECT_EQ(1, compare(UINT64_C(9), 0, UINT64_C(1), 3));
  EXPECT_EQ(1, compare(UINT64_C(9), 0, UINT64_C(64), -3));
  EXPECT_EQ(1, compare(UINT64_C(9), 0, UINT64_C(0), 0));
  EXPECT_EQ(-1, compare(UINT64_MAX, 0, UINT64_C(1), 64));
}

TEST(ScaledNumberHelpersTest, matchScales) {
#define MATCH_SCALES(T, LDIn, LSIn, RDIn, RSIn, LDOut, RDOut, SOut)            \
  do {                                                                         \
    T LDx = LDIn;                                                              \
    T RDx = RDIn;                                                              \
    T LDy = LDOut;                                                             \
    T RDy = RDOut;                                                             \
    int16_t LSx = LSIn;                                                        \
    int16_t RSx = RSIn;                                                        \
    int16_t Sy = SOut;                                                         \
                                                                               \
    EXPECT_EQ(SOut, matchScales(LDx, LSx, RDx, RSx));                          \
    EXPECT_EQ(LDy, LDx);                                                       \
    EXPECT_EQ(RDy, RDx);                                                       \
    if (LDy)                                                                   \
      EXPECT_EQ(Sy, LSx);                                                      \
    if (RDy)                                                                   \
      EXPECT_EQ(Sy, RSx);                                                      \
  } while (false)

  MATCH_SCALES(uint32_t, 0, 0, 0, 0, 0, 0, 0);
  MATCH_SCALES(uint32_t, 0, 50, 7, 1, 0, 7, 1);
  MATCH_SCALES(uint32_t, UINT32_C(1) << 31, 1, 9, 0, UINT32_C(1) << 31, 4, 1);
  MATCH_SCALES(uint32_t, UINT32_C(1) << 31, 2, 9, 0, UINT32_C(1) << 31, 2, 2);
  MATCH_SCALES(uint32_t, UINT32_C(1) << 31, 3, 9, 0, UINT32_C(1) << 31, 1, 3);
  MATCH_SCALES(uint32_t, UINT32_C(1) << 31, 4, 9, 0, UINT32_C(1) << 31, 0, 4);
  MATCH_SCALES(uint32_t, UINT32_C(1) << 30, 4, 9, 0, UINT32_C(1) << 31, 1, 3);
  MATCH_SCALES(uint32_t, UINT32_C(1) << 29, 4, 9, 0, UINT32_C(1) << 31, 2, 2);
  MATCH_SCALES(uint32_t, UINT32_C(1) << 28, 4, 9, 0, UINT32_C(1) << 31, 4, 1);
  MATCH_SCALES(uint32_t, UINT32_C(1) << 27, 4, 9, 0, UINT32_C(1) << 31, 9, 0);
  MATCH_SCALES(uint32_t, 7, 1, 0, 50, 7, 0, 1);
  MATCH_SCALES(uint32_t, 9, 0, UINT32_C(1) << 31, 1, 4, UINT32_C(1) << 31, 1);
  MATCH_SCALES(uint32_t, 9, 0, UINT32_C(1) << 31, 2, 2, UINT32_C(1) << 31, 2);
  MATCH_SCALES(uint32_t, 9, 0, UINT32_C(1) << 31, 3, 1, UINT32_C(1) << 31, 3);
  MATCH_SCALES(uint32_t, 9, 0, UINT32_C(1) << 31, 4, 0, UINT32_C(1) << 31, 4);
  MATCH_SCALES(uint32_t, 9, 0, UINT32_C(1) << 30, 4, 1, UINT32_C(1) << 31, 3);
  MATCH_SCALES(uint32_t, 9, 0, UINT32_C(1) << 29, 4, 2, UINT32_C(1) << 31, 2);
  MATCH_SCALES(uint32_t, 9, 0, UINT32_C(1) << 28, 4, 4, UINT32_C(1) << 31, 1);
  MATCH_SCALES(uint32_t, 9, 0, UINT32_C(1) << 27, 4, 9, UINT32_C(1) << 31, 0);

  MATCH_SCALES(uint64_t, 0, 0, 0, 0, 0, 0, 0);
  MATCH_SCALES(uint64_t, 0, 100, 7, 1, 0, 7, 1);
  MATCH_SCALES(uint64_t, UINT64_C(1) << 63, 1, 9, 0, UINT64_C(1) << 63, 4, 1);
  MATCH_SCALES(uint64_t, UINT64_C(1) << 63, 2, 9, 0, UINT64_C(1) << 63, 2, 2);
  MATCH_SCALES(uint64_t, UINT64_C(1) << 63, 3, 9, 0, UINT64_C(1) << 63, 1, 3);
  MATCH_SCALES(uint64_t, UINT64_C(1) << 63, 4, 9, 0, UINT64_C(1) << 63, 0, 4);
  MATCH_SCALES(uint64_t, UINT64_C(1) << 62, 4, 9, 0, UINT64_C(1) << 63, 1, 3);
  MATCH_SCALES(uint64_t, UINT64_C(1) << 61, 4, 9, 0, UINT64_C(1) << 63, 2, 2);
  MATCH_SCALES(uint64_t, UINT64_C(1) << 60, 4, 9, 0, UINT64_C(1) << 63, 4, 1);
  MATCH_SCALES(uint64_t, UINT64_C(1) << 59, 4, 9, 0, UINT64_C(1) << 63, 9, 0);
  MATCH_SCALES(uint64_t, 7, 1, 0, 100, 7, 0, 1);
  MATCH_SCALES(uint64_t, 9, 0, UINT64_C(1) << 63, 1, 4, UINT64_C(1) << 63, 1);
  MATCH_SCALES(uint64_t, 9, 0, UINT64_C(1) << 63, 2, 2, UINT64_C(1) << 63, 2);
  MATCH_SCALES(uint64_t, 9, 0, UINT64_C(1) << 63, 3, 1, UINT64_C(1) << 63, 3);
  MATCH_SCALES(uint64_t, 9, 0, UINT64_C(1) << 63, 4, 0, UINT64_C(1) << 63, 4);
  MATCH_SCALES(uint64_t, 9, 0, UINT64_C(1) << 62, 4, 1, UINT64_C(1) << 63, 3);
  MATCH_SCALES(uint64_t, 9, 0, UINT64_C(1) << 61, 4, 2, UINT64_C(1) << 63, 2);
  MATCH_SCALES(uint64_t, 9, 0, UINT64_C(1) << 60, 4, 4, UINT64_C(1) << 63, 1);
  MATCH_SCALES(uint64_t, 9, 0, UINT64_C(1) << 59, 4, 9, UINT64_C(1) << 63, 0);
}

TEST(ScaledNumberHelpersTest, getSum) {
  // Zero.
  EXPECT_EQ(SP32(1, 0), getSum32(0, 0, 1, 0));
  EXPECT_EQ(SP32(8, -3), getSum32(0, 0, 8, -3));
  EXPECT_EQ(SP32(UINT32_MAX, 0), getSum32(0, 0, UINT32_MAX, 0));

  // Basic.
  EXPECT_EQ(SP32(2, 0), getSum32(1, 0, 1, 0));
  EXPECT_EQ(SP32(3, 0), getSum32(1, 0, 2, 0));
  EXPECT_EQ(SP32(67, 0), getSum32(7, 0, 60, 0));

  // Different scales.
  EXPECT_EQ(SP32(3, 0), getSum32(1, 0, 1, 1));
  EXPECT_EQ(SP32(4, 0), getSum32(2, 0, 1, 1));

  // Loss of precision.
  EXPECT_EQ(SP32(UINT32_C(1) << 31, 1), getSum32(1, 32, 1, 0));
  EXPECT_EQ(SP32(UINT32_C(1) << 31, -31), getSum32(1, -32, 1, 0));

  // Not quite loss of precision.
  EXPECT_EQ(SP32((UINT32_C(1) << 31) + 1, 1), getSum32(1, 32, 1, 1));
  EXPECT_EQ(SP32((UINT32_C(1) << 31) + 1, -32), getSum32(1, -32, 1, -1));

  // Overflow.
  EXPECT_EQ(SP32(UINT32_C(1) << 31, 1), getSum32(1, 0, UINT32_MAX, 0));

  // Reverse operand order.
  EXPECT_EQ(SP32(1, 0), getSum32(1, 0, 0, 0));
  EXPECT_EQ(SP32(8, -3), getSum32(8, -3, 0, 0));
  EXPECT_EQ(SP32(UINT32_MAX, 0), getSum32(UINT32_MAX, 0, 0, 0));
  EXPECT_EQ(SP32(3, 0), getSum32(2, 0, 1, 0));
  EXPECT_EQ(SP32(67, 0), getSum32(60, 0, 7, 0));
  EXPECT_EQ(SP32(3, 0), getSum32(1, 1, 1, 0));
  EXPECT_EQ(SP32(4, 0), getSum32(1, 1, 2, 0));
  EXPECT_EQ(SP32(UINT32_C(1) << 31, 1), getSum32(1, 0, 1, 32));
  EXPECT_EQ(SP32(UINT32_C(1) << 31, -31), getSum32(1, 0, 1, -32));
  EXPECT_EQ(SP32((UINT32_C(1) << 31) + 1, 1), getSum32(1, 1, 1, 32));
  EXPECT_EQ(SP32((UINT32_C(1) << 31) + 1, -32), getSum32(1, -1, 1, -32));
  EXPECT_EQ(SP32(UINT32_C(1) << 31, 1), getSum32(UINT32_MAX, 0, 1, 0));

  // Zero.
  EXPECT_EQ(SP64(1, 0), getSum64(0, 0, 1, 0));
  EXPECT_EQ(SP64(8, -3), getSum64(0, 0, 8, -3));
  EXPECT_EQ(SP64(UINT64_MAX, 0), getSum64(0, 0, UINT64_MAX, 0));

  // Basic.
  EXPECT_EQ(SP64(2, 0), getSum64(1, 0, 1, 0));
  EXPECT_EQ(SP64(3, 0), getSum64(1, 0, 2, 0));
  EXPECT_EQ(SP64(67, 0), getSum64(7, 0, 60, 0));

  // Different scales.
  EXPECT_EQ(SP64(3, 0), getSum64(1, 0, 1, 1));
  EXPECT_EQ(SP64(4, 0), getSum64(2, 0, 1, 1));

  // Loss of precision.
  EXPECT_EQ(SP64(UINT64_C(1) << 63, 1), getSum64(1, 64, 1, 0));
  EXPECT_EQ(SP64(UINT64_C(1) << 63, -63), getSum64(1, -64, 1, 0));

  // Not quite loss of precision.
  EXPECT_EQ(SP64((UINT64_C(1) << 63) + 1, 1), getSum64(1, 64, 1, 1));
  EXPECT_EQ(SP64((UINT64_C(1) << 63) + 1, -64), getSum64(1, -64, 1, -1));

  // Overflow.
  EXPECT_EQ(SP64(UINT64_C(1) << 63, 1), getSum64(1, 0, UINT64_MAX, 0));

  // Reverse operand order.
  EXPECT_EQ(SP64(1, 0), getSum64(1, 0, 0, 0));
  EXPECT_EQ(SP64(8, -3), getSum64(8, -3, 0, 0));
  EXPECT_EQ(SP64(UINT64_MAX, 0), getSum64(UINT64_MAX, 0, 0, 0));
  EXPECT_EQ(SP64(3, 0), getSum64(2, 0, 1, 0));
  EXPECT_EQ(SP64(67, 0), getSum64(60, 0, 7, 0));
  EXPECT_EQ(SP64(3, 0), getSum64(1, 1, 1, 0));
  EXPECT_EQ(SP64(4, 0), getSum64(1, 1, 2, 0));
  EXPECT_EQ(SP64(UINT64_C(1) << 63, 1), getSum64(1, 0, 1, 64));
  EXPECT_EQ(SP64(UINT64_C(1) << 63, -63), getSum64(1, 0, 1, -64));
  EXPECT_EQ(SP64((UINT64_C(1) << 63) + 1, 1), getSum64(1, 1, 1, 64));
  EXPECT_EQ(SP64((UINT64_C(1) << 63) + 1, -64), getSum64(1, -1, 1, -64));
  EXPECT_EQ(SP64(UINT64_C(1) << 63, 1), getSum64(UINT64_MAX, 0, 1, 0));
}

TEST(ScaledNumberHelpersTest, getDifference) {
  // Basic.
  EXPECT_EQ(SP32(0, 0), getDifference32(1, 0, 1, 0));
  EXPECT_EQ(SP32(1, 0), getDifference32(2, 0, 1, 0));
  EXPECT_EQ(SP32(53, 0), getDifference32(60, 0, 7, 0));

  // Equals "0", different scales.
  EXPECT_EQ(SP32(0, 0), getDifference32(2, 0, 1, 1));

  // Subtract "0".
  EXPECT_EQ(SP32(1, 0), getDifference32(1, 0, 0, 0));
  EXPECT_EQ(SP32(8, -3), getDifference32(8, -3, 0, 0));
  EXPECT_EQ(SP32(UINT32_MAX, 0), getDifference32(UINT32_MAX, 0, 0, 0));

  // Loss of precision.
  EXPECT_EQ(SP32((UINT32_C(1) << 31) + 1, 1),
            getDifference32((UINT32_C(1) << 31) + 1, 1, 1, 0));
  EXPECT_EQ(SP32((UINT32_C(1) << 31) + 1, -31),
            getDifference32((UINT32_C(1) << 31) + 1, -31, 1, -32));

  // Not quite loss of precision.
  EXPECT_EQ(SP32(UINT32_MAX, 0), getDifference32(1, 32, 1, 0));
  EXPECT_EQ(SP32(UINT32_MAX, -32), getDifference32(1, 0, 1, -32));

  // Saturate to "0".
  EXPECT_EQ(SP32(0, 0), getDifference32(0, 0, 1, 0));
  EXPECT_EQ(SP32(0, 0), getDifference32(0, 0, 8, -3));
  EXPECT_EQ(SP32(0, 0), getDifference32(0, 0, UINT32_MAX, 0));
  EXPECT_EQ(SP32(0, 0), getDifference32(7, 0, 60, 0));
  EXPECT_EQ(SP32(0, 0), getDifference32(1, 0, 1, 1));
  EXPECT_EQ(SP32(0, 0), getDifference32(1, -32, 1, 0));
  EXPECT_EQ(SP32(0, 0), getDifference32(1, -32, 1, -1));

  // Regression tests for cases that failed during bringup.
  EXPECT_EQ(SP32(UINT32_C(1) << 26, -31),
            getDifference32(1, 0, UINT32_C(31) << 27, -32));

  // Basic.
  EXPECT_EQ(SP64(0, 0), getDifference64(1, 0, 1, 0));
  EXPECT_EQ(SP64(1, 0), getDifference64(2, 0, 1, 0));
  EXPECT_EQ(SP64(53, 0), getDifference64(60, 0, 7, 0));

  // Equals "0", different scales.
  EXPECT_EQ(SP64(0, 0), getDifference64(2, 0, 1, 1));

  // Subtract "0".
  EXPECT_EQ(SP64(1, 0), getDifference64(1, 0, 0, 0));
  EXPECT_EQ(SP64(8, -3), getDifference64(8, -3, 0, 0));
  EXPECT_EQ(SP64(UINT64_MAX, 0), getDifference64(UINT64_MAX, 0, 0, 0));

  // Loss of precision.
  EXPECT_EQ(SP64((UINT64_C(1) << 63) + 1, 1),
            getDifference64((UINT64_C(1) << 63) + 1, 1, 1, 0));
  EXPECT_EQ(SP64((UINT64_C(1) << 63) + 1, -63),
            getDifference64((UINT64_C(1) << 63) + 1, -63, 1, -64));

  // Not quite loss of precision.
  EXPECT_EQ(SP64(UINT64_MAX, 0), getDifference64(1, 64, 1, 0));
  EXPECT_EQ(SP64(UINT64_MAX, -64), getDifference64(1, 0, 1, -64));

  // Saturate to "0".
  EXPECT_EQ(SP64(0, 0), getDifference64(0, 0, 1, 0));
  EXPECT_EQ(SP64(0, 0), getDifference64(0, 0, 8, -3));
  EXPECT_EQ(SP64(0, 0), getDifference64(0, 0, UINT64_MAX, 0));
  EXPECT_EQ(SP64(0, 0), getDifference64(7, 0, 60, 0));
  EXPECT_EQ(SP64(0, 0), getDifference64(1, 0, 1, 1));
  EXPECT_EQ(SP64(0, 0), getDifference64(1, -64, 1, 0));
  EXPECT_EQ(SP64(0, 0), getDifference64(1, -64, 1, -1));
}

} // end namespace
