//===- 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 struct ScaledPair { UIntT D; int S; ScaledPair(const std::pair &F) : D(F.first), S(F.second) {} ScaledPair(UIntT D, int S) : D(D), S(S) {} bool operator==(const ScaledPair &X) const { return D == X.D && S == X.S; } }; template bool operator==(const std::pair &L, const ScaledPair &R) { return ScaledPair(L) == R; } template void PrintTo(const ScaledPair &F, ::std::ostream *os) { *os << F.D << "*2^" << F.S; } typedef ScaledPair SP32; typedef ScaledPair SP64; TEST(ScaledNumberHelpersTest, getRounded) { EXPECT_EQ(getRounded(0, 0, false), SP32(0, 0)); EXPECT_EQ(getRounded(0, 0, true), SP32(1, 0)); EXPECT_EQ(getRounded(20, 21, true), SP32(21, 21)); EXPECT_EQ(getRounded(UINT32_MAX, 0, false), SP32(UINT32_MAX, 0)); EXPECT_EQ(getRounded(UINT32_MAX, 0, true), SP32(1 << 31, 1)); EXPECT_EQ(getRounded(0, 0, false), SP64(0, 0)); EXPECT_EQ(getRounded(0, 0, true), SP64(1, 0)); EXPECT_EQ(getRounded(20, 21, true), SP64(21, 21)); EXPECT_EQ(getRounded(UINT32_MAX, 0, false), SP64(UINT32_MAX, 0)); EXPECT_EQ(getRounded(UINT32_MAX, 0, true), SP64(UINT64_C(1) << 32, 0)); EXPECT_EQ(getRounded(UINT64_MAX, 0, false), SP64(UINT64_MAX, 0)); EXPECT_EQ(getRounded(UINT64_MAX, 0, true), SP64(UINT64_C(1) << 63, 1)); } }