summaryrefslogtreecommitdiff
path: root/unittests/Support/ConstantRangeTest.cpp
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2009-07-09 23:16:10 +0000
committerDan Gohman <gohman@apple.com>2009-07-09 23:16:10 +0000
commit38b06447615440f935008a2141bd0a1fe078d437 (patch)
tree9419c8dd2e9262c2b43d2dbda614d4a3e55e71d0 /unittests/Support/ConstantRangeTest.cpp
parent45032f28013aa69d07bf859da9d976947910f059 (diff)
downloadllvm-38b06447615440f935008a2141bd0a1fe078d437.tar.gz
llvm-38b06447615440f935008a2141bd0a1fe078d437.tar.bz2
llvm-38b06447615440f935008a2141bd0a1fe078d437.tar.xz
Revert the part of 75177 that split ConstantRange into two classes, and
merge the new functionality and unittests into ConstantRange. Thanks to Nick Lewycky for pointing out that it isn't necessary to have two separate classes here. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75191 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'unittests/Support/ConstantRangeTest.cpp')
-rw-r--r--unittests/Support/ConstantRangeTest.cpp319
1 files changed, 21 insertions, 298 deletions
diff --git a/unittests/Support/ConstantRangeTest.cpp b/unittests/Support/ConstantRangeTest.cpp
index c5c575031d..30730bd6c1 100644
--- a/unittests/Support/ConstantRangeTest.cpp
+++ b/unittests/Support/ConstantRangeTest.cpp
@@ -207,6 +207,14 @@ TEST(ConstantRangeTest, Unsigned) {
ConstantRange(APInt(16, 0x6)));
EXPECT_TRUE(Full.add(APInt(16, 4)).isFullSet());
+ EXPECT_EQ(Full.add(Empty), Empty);
+ EXPECT_EQ(Full.add(One), Full);
+ EXPECT_EQ(Full.add(Some), Full);
+ EXPECT_EQ(Full.add(Wrap), Full);
+ EXPECT_EQ(Empty.add(Empty), Empty);
+ EXPECT_EQ(Empty.add(One), Empty);
+ EXPECT_EQ(Empty.add(Some), Empty);
+ EXPECT_EQ(Empty.add(Wrap), Empty);
EXPECT_TRUE(Empty.add(APInt(16, 4)).isEmptySet());
EXPECT_EQ(Some.add(APInt(16, 4)),
ConstantRange(APInt(16, 0xe), APInt(16, 0xaae)));
@@ -254,27 +262,22 @@ TEST(ConstantRangeTest, Unsigned) {
// TODO: ConstantRange is currently over-conservative here.
EXPECT_EQ(Wrap.multiply(Wrap), Full);
- EXPECT_EQ(Full.smax(Full), Full);
- EXPECT_EQ(Full.smax(Empty), Empty);
- EXPECT_EQ(Full.smax(One), Full);
- EXPECT_EQ(Full.smax(Some), Full);
- EXPECT_EQ(Full.smax(Wrap), Full);
+ EXPECT_TRUE(Full.smax(Full).isFullSet());
+ EXPECT_TRUE(Full.smax(Empty).isEmptySet());
+ EXPECT_TRUE(Full.smax(Some).isFullSet());
+ EXPECT_TRUE(Full.smax(Wrap).isFullSet());
+ EXPECT_TRUE(Full.smax(One).isFullSet());
EXPECT_EQ(Empty.smax(Empty), Empty);
- EXPECT_EQ(Empty.smax(One), Empty);
EXPECT_EQ(Empty.smax(Some), Empty);
EXPECT_EQ(Empty.smax(Wrap), Empty);
- // TODO: ConstantRange is currently over-conservative here.
- EXPECT_EQ(One.smax(One), Full);
- // TODO: ConstantRange is currently over-conservative here.
- EXPECT_EQ(One.smax(Some), Full);
- // TODO: ConstantRange is currently over-conservative here.
- EXPECT_EQ(One.smax(Wrap), Full);
- // TODO: ConstantRange is currently over-conservative here.
- EXPECT_EQ(Some.smax(Some), Full);
- // TODO: ConstantRange is currently over-conservative here.
- EXPECT_EQ(Some.smax(Wrap), Full);
- // TODO: ConstantRange is currently over-conservative here.
- EXPECT_EQ(Wrap.smax(Wrap), Full);
+ EXPECT_EQ(Empty.smax(One), Empty);
+ EXPECT_EQ(Some.smax(Some), Some);
+ EXPECT_EQ(Some.smax(Wrap), ConstantRange(APInt(16, 0xa),
+ APInt(16, INT16_MIN)));
+ EXPECT_EQ(Some.smax(One), Some);
+ EXPECT_EQ(Wrap.smax(One), ConstantRange(APInt(16, 0xa),
+ APInt(16, INT16_MIN)));
+ EXPECT_EQ(One.smax(One), One);
EXPECT_EQ(Full.udiv(Full), Full);
EXPECT_EQ(Full.udiv(Empty), Empty);
@@ -297,286 +300,6 @@ TEST(ConstantRangeTest, Unsigned) {
EXPECT_EQ(Some.udiv(Wrap), Full);
// TODO: ConstantRange is currently over-conservative here.
EXPECT_EQ(Wrap.udiv(Wrap), Full);
-
-}
-
-TEST(ConstantRangeTest, Signed) {
- ConstantSignedRange Full(16);
- ConstantSignedRange Empty(16, false);
- ConstantSignedRange One(APInt(16, 0xa));
- ConstantSignedRange Some(APInt(16, 0xa), APInt(16, 0xaaa));
- ConstantSignedRange Wrap(APInt(16, 0xaaa), APInt(16, 0xa));
-
- EXPECT_TRUE(Full.isFullSet());
- EXPECT_FALSE(Full.isEmptySet());
- EXPECT_FALSE(Full.isWrappedSet());
- EXPECT_TRUE(Full.contains(APInt(16, 0x0)));
- EXPECT_TRUE(Full.contains(APInt(16, 0x9)));
- EXPECT_TRUE(Full.contains(APInt(16, 0xa)));
- EXPECT_TRUE(Full.contains(APInt(16, 0xaa9)));
- EXPECT_TRUE(Full.contains(APInt(16, 0xaaa)));
-
- EXPECT_FALSE(Empty.isFullSet());
- EXPECT_TRUE(Empty.isEmptySet());
- EXPECT_FALSE(Empty.isWrappedSet());
- EXPECT_FALSE(Empty.contains(APInt(16, 0x0)));
- EXPECT_FALSE(Empty.contains(APInt(16, 0x9)));
- EXPECT_FALSE(Empty.contains(APInt(16, 0xa)));
- EXPECT_FALSE(Empty.contains(APInt(16, 0xaa9)));
- EXPECT_FALSE(Empty.contains(APInt(16, 0xaaa)));
-
- EXPECT_FALSE(One.isFullSet());
- EXPECT_FALSE(One.isEmptySet());
- EXPECT_FALSE(One.isWrappedSet());
- EXPECT_FALSE(One.contains(APInt(16, 0x0)));
- EXPECT_FALSE(One.contains(APInt(16, 0x9)));
- EXPECT_TRUE(One.contains(APInt(16, 0xa)));
- EXPECT_FALSE(One.contains(APInt(16, 0xaa9)));
- EXPECT_FALSE(One.contains(APInt(16, 0xaaa)));
-
- EXPECT_FALSE(Some.isFullSet());
- EXPECT_FALSE(Some.isEmptySet());
- EXPECT_FALSE(Some.isWrappedSet());
- EXPECT_FALSE(Some.contains(APInt(16, 0x0)));
- EXPECT_FALSE(Some.contains(APInt(16, 0x9)));
- EXPECT_TRUE(Some.contains(APInt(16, 0xa)));
- EXPECT_TRUE(Some.contains(APInt(16, 0xaa9)));
- EXPECT_FALSE(Some.contains(APInt(16, 0xaaa)));
-
- EXPECT_FALSE(Wrap.isFullSet());
- EXPECT_FALSE(Wrap.isEmptySet());
- EXPECT_TRUE(Wrap.isWrappedSet());
- EXPECT_TRUE(Wrap.contains(APInt(16, 0x0)));
- EXPECT_TRUE(Wrap.contains(APInt(16, 0x9)));
- EXPECT_FALSE(Wrap.contains(APInt(16, 0xa)));
- EXPECT_FALSE(Wrap.contains(APInt(16, 0xaa9)));
- EXPECT_TRUE(Wrap.contains(APInt(16, 0xaaa)));
-
- EXPECT_EQ(Full, Full);
- EXPECT_EQ(Empty, Empty);
- EXPECT_EQ(One, One);
- EXPECT_EQ(Some, Some);
- EXPECT_EQ(Wrap, Wrap);
- EXPECT_NE(Full, Empty);
- EXPECT_NE(Full, One);
- EXPECT_NE(Full, Some);
- EXPECT_NE(Full, Wrap);
- EXPECT_NE(Empty, One);
- EXPECT_NE(Empty, Some);
- EXPECT_NE(Empty, Wrap);
- EXPECT_NE(One, Some);
- EXPECT_NE(One, Wrap);
- EXPECT_NE(Some, Wrap);
-
- EXPECT_EQ(Full.getSingleElement(), static_cast<APInt *>(NULL));
- EXPECT_EQ(Empty.getSingleElement(), static_cast<APInt *>(NULL));
- EXPECT_EQ(*One.getSingleElement(), APInt(16, 0xa));
- EXPECT_EQ(Some.getSingleElement(), static_cast<APInt *>(NULL));
- EXPECT_EQ(Wrap.getSingleElement(), static_cast<APInt *>(NULL));
-
- EXPECT_FALSE(Full.isSingleElement());
- EXPECT_FALSE(Empty.isSingleElement());
- EXPECT_TRUE(One.isSingleElement());
- EXPECT_FALSE(Some.isSingleElement());
- EXPECT_FALSE(Wrap.isSingleElement());
-
- EXPECT_EQ(Full.getSetSize(), APInt(16, 0));
- EXPECT_EQ(Empty.getSetSize(), APInt(16, 0));
- EXPECT_EQ(One.getSetSize(), APInt(16, 1));
- EXPECT_EQ(Some.getSetSize(), APInt(16, 0xaa0));
- EXPECT_EQ(Wrap.getSetSize(), APInt(16, 0x10000 - 0xaa0));
-
- EXPECT_EQ(Full.getSignedMax(), APInt(16, INT16_MAX, true));
- EXPECT_EQ(One.getSignedMax(), APInt(16, 0xa));
- EXPECT_EQ(Some.getSignedMax(), APInt(16, 0xaa9));
- EXPECT_EQ(Wrap.getSignedMax(), APInt(16, INT16_MAX));
-
- EXPECT_EQ(Full.getSignedMin(), APInt(16, INT16_MIN));
- EXPECT_EQ(One.getSignedMin(), APInt(16, 0xa));
- EXPECT_EQ(Some.getSignedMin(), APInt(16, 0xa));
- EXPECT_EQ(Wrap.getSignedMin(), APInt(16, INT16_MIN));
-
- EXPECT_EQ(Full.getUnsignedMax(), APInt(16, UINT16_MAX, true));
- EXPECT_EQ(One.getUnsignedMax(), APInt(16, 0xa));
- EXPECT_EQ(Some.getUnsignedMax(), APInt(16, 0xaa9));
- EXPECT_EQ(Wrap.getUnsignedMax(), APInt(16, UINT16_MAX));
-
- EXPECT_EQ(Full.getUnsignedMin(), APInt(16, 0));
- EXPECT_EQ(One.getUnsignedMin(), APInt(16, 0xa));
- EXPECT_EQ(Some.getUnsignedMin(), APInt(16, 0xa));
- EXPECT_EQ(Wrap.getUnsignedMin(), APInt(16, 0));
-
- ConstantSignedRange TFull = Full.truncate(10);
- ConstantSignedRange TEmpty = Empty.truncate(10);
- ConstantSignedRange TOne = One.truncate(10);
- ConstantSignedRange TSome = Some.truncate(10);
- ConstantSignedRange TWrap = Wrap.truncate(10);
- EXPECT_TRUE(TFull.isFullSet());
- EXPECT_TRUE(TEmpty.isEmptySet());
- // TODO: ConstantSignedRange is currently over-conservative here.
- EXPECT_TRUE(TOne.isFullSet());
- // TODO: ConstantSignedRange is currently over-conservative here.
- EXPECT_TRUE(TSome.isFullSet());
- // TODO: ConstantSignedRange is currently over-conservative here.
- EXPECT_TRUE(TWrap.isFullSet());
-
- ConstantSignedRange ZFull = Full.zeroExtend(20);
- ConstantSignedRange ZEmpty = Empty.zeroExtend(20);
- ConstantSignedRange ZOne = One.zeroExtend(20);
- ConstantSignedRange ZSome = Some.zeroExtend(20);
- ConstantSignedRange ZWrap = Wrap.zeroExtend(20);
- EXPECT_EQ(ZFull, ConstantSignedRange(APInt(20, 0), APInt(20, 0x10000)));
- EXPECT_TRUE(ZEmpty.isEmptySet());
- EXPECT_EQ(ZOne, ConstantSignedRange(APInt(One.getLower()).zext(20),
- APInt(One.getUpper()).zext(20)));
- EXPECT_EQ(ZSome, ConstantSignedRange(APInt(Some.getLower()).zext(20),
- APInt(Some.getUpper()).zext(20)));
- EXPECT_EQ(ZWrap, ConstantSignedRange(APInt(Wrap.getLower()).zext(20),
- APInt(Wrap.getUpper()).zext(20)));
-
- ConstantSignedRange SFull = Full.signExtend(20);
- ConstantSignedRange SEmpty = Empty.signExtend(20);
- ConstantSignedRange SOne = One.signExtend(20);
- ConstantSignedRange SSome = Some.signExtend(20);
- ConstantSignedRange SWrap = Wrap.signExtend(20);
- EXPECT_EQ(SFull, ConstantSignedRange(APInt(20, INT16_MIN),
- APInt(20, INT16_MAX+1)));
- EXPECT_TRUE(SEmpty.isEmptySet());
- EXPECT_EQ(SOne, ConstantSignedRange(APInt(One.getLower()).sext(20),
- APInt(One.getUpper()).sext(20)));
- EXPECT_EQ(SSome, ConstantSignedRange(APInt(Some.getLower()).sext(20),
- APInt(Some.getUpper()).sext(20)));
- EXPECT_EQ(SWrap, ConstantSignedRange(APInt(Wrap.getLower()).sext(20),
- APInt(Wrap.getUpper()).sext(20)));
-
- EXPECT_TRUE(Empty.intersectWith(Full).isEmptySet());
- EXPECT_TRUE(Empty.intersectWith(Empty).isEmptySet());
- EXPECT_TRUE(Empty.intersectWith(One).isEmptySet());
- EXPECT_TRUE(Empty.intersectWith(Some).isEmptySet());
- EXPECT_TRUE(Empty.intersectWith(Wrap).isEmptySet());
- EXPECT_TRUE(Full.intersectWith(Full).isFullSet());
- EXPECT_TRUE(Some.intersectWith(Some) == Some);
- EXPECT_TRUE(Some.intersectWith(One) == One);
- EXPECT_TRUE(Full.intersectWith(One) == One);
- EXPECT_TRUE(Full.intersectWith(Some) == Some);
- EXPECT_TRUE(Some.intersectWith(Wrap).isEmptySet());
- EXPECT_TRUE(One.intersectWith(Wrap).isEmptySet());
- EXPECT_EQ(One.intersectWith(Wrap), Wrap.intersectWith(One));
-
- EXPECT_TRUE(Empty.maximalIntersectWith(Full).isEmptySet());
- EXPECT_TRUE(Empty.maximalIntersectWith(Empty).isEmptySet());
- EXPECT_TRUE(Empty.maximalIntersectWith(One).isEmptySet());
- EXPECT_TRUE(Empty.maximalIntersectWith(Some).isEmptySet());
- EXPECT_TRUE(Empty.maximalIntersectWith(Wrap).isEmptySet());
- EXPECT_TRUE(Full.maximalIntersectWith(Full).isFullSet());
- EXPECT_TRUE(Some.maximalIntersectWith(Some) == Some);
- EXPECT_TRUE(Some.maximalIntersectWith(One) == One);
- EXPECT_TRUE(Full.maximalIntersectWith(One) == One);
- EXPECT_TRUE(Full.maximalIntersectWith(Some) == Some);
- EXPECT_TRUE(Some.maximalIntersectWith(Wrap).isEmptySet());
- EXPECT_TRUE(One.maximalIntersectWith(Wrap).isEmptySet());
- EXPECT_EQ(One.maximalIntersectWith(Wrap), Wrap.maximalIntersectWith(One));
-
- EXPECT_EQ(Wrap.unionWith(One),
- ConstantSignedRange(APInt(16, 0xaaa), APInt(16, 0xb)));
- EXPECT_EQ(One.unionWith(Wrap), Wrap.unionWith(One));
- EXPECT_TRUE(Empty.unionWith(Empty).isEmptySet());
- EXPECT_TRUE(Full.unionWith(Full).isFullSet());
- EXPECT_TRUE(Some.unionWith(Wrap).isFullSet());
-
- EXPECT_TRUE(Full.subtract(APInt(16, 4)).isFullSet());
- EXPECT_TRUE(Empty.subtract(APInt(16, 4)).isEmptySet());
- EXPECT_EQ(Some.subtract(APInt(16, 4)),
- ConstantSignedRange(APInt(16, 0x6), APInt(16, 0xaa6)));
- EXPECT_EQ(Wrap.subtract(APInt(16, 4)),
- ConstantSignedRange(APInt(16, 0xaa6), APInt(16, 0x6)));
- EXPECT_EQ(One.subtract(APInt(16, 4)),
- ConstantSignedRange(APInt(16, 0x6)));
-
- EXPECT_TRUE(Full.smax(Full).isFullSet());
- EXPECT_TRUE(Full.smax(Empty).isEmptySet());
- EXPECT_TRUE(Full.smax(Some).isFullSet());
- EXPECT_TRUE(Full.smax(Wrap).isFullSet());
- EXPECT_TRUE(Full.smax(One).isFullSet());
- EXPECT_EQ(Empty.smax(Empty), Empty);
- EXPECT_EQ(Empty.smax(Some), Empty);
- EXPECT_EQ(Empty.smax(Wrap), Empty);
- EXPECT_EQ(Empty.smax(One), Empty);
- EXPECT_EQ(Some.smax(Some), Some);
- EXPECT_EQ(Some.smax(Wrap), ConstantSignedRange(APInt(16, 0xa),
- APInt(16, INT16_MIN)));
- EXPECT_EQ(Some.smax(One), Some);
- // TODO: ConstantSignedRange is currently over-conservative here.
- EXPECT_EQ(Wrap.smax(Wrap), Full);
- EXPECT_EQ(Wrap.smax(One), ConstantSignedRange(APInt(16, 0xa),
- APInt(16, INT16_MIN)));
- EXPECT_EQ(One.smax(One), One);
-
- EXPECT_EQ(Full.add(Full), Full);
- EXPECT_EQ(Full.add(Empty), Empty);
- EXPECT_EQ(Full.add(One), Full);
- EXPECT_EQ(Full.add(Some), Full);
- EXPECT_EQ(Full.add(Wrap), Full);
- EXPECT_EQ(Empty.add(Empty), Empty);
- EXPECT_EQ(Empty.add(One), Empty);
- EXPECT_EQ(Empty.add(Some), Empty);
- EXPECT_EQ(Empty.add(Wrap), Empty);
- // TODO: ConstantSignedRange is currently over-conservative here.
- EXPECT_EQ(One.add(One), Full);
- // TODO: ConstantSignedRange is currently over-conservative here.
- EXPECT_EQ(One.add(Some), Full);
- // TODO: ConstantSignedRange is currently over-conservative here.
- EXPECT_EQ(One.add(Wrap), Full);
- // TODO: ConstantSignedRange is currently over-conservative here.
- EXPECT_EQ(Some.add(Some), Full);
- // TODO: ConstantSignedRange is currently over-conservative here.
- EXPECT_EQ(Some.add(Wrap), Full);
- // TODO: ConstantSignedRange is currently over-conservative here.
- EXPECT_EQ(Wrap.add(Wrap), Full);
-
- EXPECT_EQ(Full.multiply(Full), Full);
- EXPECT_EQ(Full.multiply(Empty), Empty);
- EXPECT_EQ(Full.multiply(One), Full);
- EXPECT_EQ(Full.multiply(Some), Full);
- EXPECT_EQ(Full.multiply(Wrap), Full);
- EXPECT_EQ(Empty.multiply(Empty), Empty);
- EXPECT_EQ(Empty.multiply(One), Empty);
- EXPECT_EQ(Empty.multiply(Some), Empty);
- EXPECT_EQ(Empty.multiply(Wrap), Empty);
- // TODO: ConstantSignedRange is currently over-conservative here.
- EXPECT_EQ(One.multiply(One), Full);
- // TODO: ConstantSignedRange is currently over-conservative here.
- EXPECT_EQ(One.multiply(Some), Full);
- // TODO: ConstantSignedRange is currently over-conservative here.
- EXPECT_EQ(One.multiply(Wrap), Full);
- // TODO: ConstantSignedRange is currently over-conservative here.
- EXPECT_EQ(Some.multiply(Some), Full);
- // TODO: ConstantSignedRange is currently over-conservative here.
- EXPECT_EQ(Some.multiply(Wrap), Full);
- // TODO: ConstantSignedRange is currently over-conservative here.
- EXPECT_EQ(Wrap.multiply(Wrap), Full);
-
- EXPECT_EQ(Full.umax(Full), Full);
- EXPECT_EQ(Full.umax(Empty), Empty);
- EXPECT_EQ(Full.umax(One), Full);
- EXPECT_EQ(Full.umax(Some), Full);
- EXPECT_EQ(Full.umax(Wrap), Full);
- EXPECT_EQ(Empty.umax(Empty), Empty);
- EXPECT_EQ(Empty.umax(One), Empty);
- EXPECT_EQ(Empty.umax(Some), Empty);
- EXPECT_EQ(Empty.umax(Wrap), Empty);
- // TODO: ConstantSignedRange is currently over-conservative here.
- EXPECT_EQ(One.umax(One), Full);
- // TODO: ConstantSignedRange is currently over-conservative here.
- EXPECT_EQ(One.umax(Some), Full);
- // TODO: ConstantSignedRange is currently over-conservative here.
- EXPECT_EQ(One.umax(Wrap), Full);
- // TODO: ConstantSignedRange is currently over-conservative here.
- EXPECT_EQ(Some.umax(Some), Full);
- // TODO: ConstantSignedRange is currently over-conservative here.
- EXPECT_EQ(Some.umax(Wrap), Full);
- // TODO: ConstantSignedRange is currently over-conservative here.
- EXPECT_EQ(Wrap.umax(Wrap), Full);
}
} // anonymous namespace