summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavide Italiano <davide@freebsd.org>2019-01-04 19:23:52 +0000
committerDavide Italiano <davide@freebsd.org>2019-01-04 19:23:52 +0000
commitf1880bb6cde8be54a7a036750ac0c8a1ba61ba09 (patch)
tree1c0124582bde8d348e4bcdf175ae6dece33e6d25
parent10fc91f8d7403a66f266fa411e3b19aaf3ed46fd (diff)
[Scalar] Simplify comparison operators and add coverage.
-rw-r--r--lldb/source/Utility/Scalar.cpp95
-rw-r--r--lldb/unittests/Utility/ScalarTest.cpp18
2 files changed, 21 insertions, 92 deletions
diff --git a/lldb/source/Utility/Scalar.cpp b/lldb/source/Utility/Scalar.cpp
index 9bc7172ad98..a2bb86ffdb1 100644
--- a/lldb/source/Utility/Scalar.cpp
+++ b/lldb/source/Utility/Scalar.cpp
@@ -2635,104 +2635,15 @@ bool lldb_private::operator<(const Scalar &lhs, const Scalar &rhs) {
}
bool lldb_private::operator<=(const Scalar &lhs, const Scalar &rhs) {
- if (lhs.m_type == Scalar::e_void || rhs.m_type == Scalar::e_void)
- return false;
-
- Scalar temp_value;
- const Scalar *a;
- const Scalar *b;
- llvm::APFloat::cmpResult result;
- switch (PromoteToMaxType(lhs, rhs, temp_value, a, b)) {
- case Scalar::e_void:
- break;
- case Scalar::e_sint:
- case Scalar::e_slong:
- case Scalar::e_slonglong:
- case Scalar::e_sint128:
- case Scalar::e_sint256:
- return a->m_integer.sle(b->m_integer);
- case Scalar::e_uint:
- case Scalar::e_ulong:
- case Scalar::e_ulonglong:
- case Scalar::e_uint128:
- case Scalar::e_uint256:
- return a->m_integer.ule(b->m_integer);
- case Scalar::e_float:
- case Scalar::e_double:
- case Scalar::e_long_double:
- result = a->m_float.compare(b->m_float);
- if (result == llvm::APFloat::cmpLessThan ||
- result == llvm::APFloat::cmpEqual)
- return true;
- }
- return false;
+ return !(rhs < lhs);
}
bool lldb_private::operator>(const Scalar &lhs, const Scalar &rhs) {
- if (lhs.m_type == Scalar::e_void || rhs.m_type == Scalar::e_void)
- return false;
-
- Scalar temp_value;
- const Scalar *a;
- const Scalar *b;
- llvm::APFloat::cmpResult result;
- switch (PromoteToMaxType(lhs, rhs, temp_value, a, b)) {
- case Scalar::e_void:
- break;
- case Scalar::e_sint:
- case Scalar::e_slong:
- case Scalar::e_slonglong:
- case Scalar::e_sint128:
- case Scalar::e_sint256:
- return a->m_integer.sgt(b->m_integer);
- case Scalar::e_uint:
- case Scalar::e_ulong:
- case Scalar::e_ulonglong:
- case Scalar::e_uint128:
- case Scalar::e_uint256:
- return a->m_integer.ugt(b->m_integer);
- case Scalar::e_float:
- case Scalar::e_double:
- case Scalar::e_long_double:
- result = a->m_float.compare(b->m_float);
- if (result == llvm::APFloat::cmpGreaterThan)
- return true;
- }
- return false;
+ return rhs < lhs;
}
bool lldb_private::operator>=(const Scalar &lhs, const Scalar &rhs) {
- if (lhs.m_type == Scalar::e_void || rhs.m_type == Scalar::e_void)
- return false;
-
- Scalar temp_value;
- const Scalar *a;
- const Scalar *b;
- llvm::APFloat::cmpResult result;
- switch (PromoteToMaxType(lhs, rhs, temp_value, a, b)) {
- case Scalar::e_void:
- break;
- case Scalar::e_sint:
- case Scalar::e_slong:
- case Scalar::e_slonglong:
- case Scalar::e_sint128:
- case Scalar::e_sint256:
- return a->m_integer.sge(b->m_integer);
- case Scalar::e_uint:
- case Scalar::e_ulong:
- case Scalar::e_ulonglong:
- case Scalar::e_uint128:
- case Scalar::e_uint256:
- return a->m_integer.uge(b->m_integer);
- case Scalar::e_float:
- case Scalar::e_double:
- case Scalar::e_long_double:
- result = a->m_float.compare(b->m_float);
- if (result == llvm::APFloat::cmpGreaterThan ||
- result == llvm::APFloat::cmpEqual)
- return true;
- }
- return false;
+ return !(lhs < rhs);
}
bool Scalar::ClearBit(uint32_t bit) {
diff --git a/lldb/unittests/Utility/ScalarTest.cpp b/lldb/unittests/Utility/ScalarTest.cpp
index 1a358a3a2e5..e66876bc826 100644
--- a/lldb/unittests/Utility/ScalarTest.cpp
+++ b/lldb/unittests/Utility/ScalarTest.cpp
@@ -47,6 +47,24 @@ TEST(ScalarTest, Equality) {
ASSERT_FALSE(void1 == Scalar(f1));
}
+TEST(ScalarTest, Comparison) {
+ auto s1 = Scalar(23);
+ auto s2 = Scalar(46);
+ ASSERT_TRUE(s1 < s2);
+ ASSERT_TRUE(s1 <= s2);
+ ASSERT_TRUE(s2 > s1);
+ ASSERT_TRUE(s2 >= s1);
+}
+
+TEST(ScalarTest, ComparisonFloat) {
+ auto s1 = Scalar(23.0f);
+ auto s2 = Scalar(46.0f);
+ ASSERT_TRUE(s1 < s2);
+ ASSERT_TRUE(s1 <= s2);
+ ASSERT_TRUE(s2 > s1);
+ ASSERT_TRUE(s2 >= s1);
+}
+
TEST(ScalarTest, RightShiftOperator) {
int a = 0x00001000;
int b = 0xFFFFFFFF;