summaryrefslogtreecommitdiff
path: root/cpp/src/tests/Selector.cpp
diff options
context:
space:
mode:
authorAndrew Stitcher <astitcher@apache.org>2013-03-15 17:29:33 +0000
committerAndrew Stitcher <astitcher@apache.org>2013-03-15 17:29:33 +0000
commit5e1cacd044477b87bed311cc1fc0debedab39bab (patch)
tree2697f2583d07e9bc30df6b6b9cb0cb7375a2f6a7 /cpp/src/tests/Selector.cpp
parent2a9ffab152272e1f752508f995630c755a39eb79 (diff)
downloadqpid-python-5e1cacd044477b87bed311cc1fc0debedab39bab.tar.gz
QPID-4623: Implemented parser and evaluator for BETWEEN comparisons
- The implementation uses a custom between operator rather than desugaring the syntax, because we can avoid repeated evaluation of the expression bing compared that way (this will also be true for the IN comparison operator). git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1457029 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/tests/Selector.cpp')
-rw-r--r--cpp/src/tests/Selector.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/cpp/src/tests/Selector.cpp b/cpp/src/tests/Selector.cpp
index 7208f80e85..1b0eea3d7e 100644
--- a/cpp/src/tests/Selector.cpp
+++ b/cpp/src/tests/Selector.cpp
@@ -186,6 +186,9 @@ QPID_AUTO_TEST_CASE(parseStringFail)
BOOST_CHECK_THROW(qb::Selector e("A not 234 escape"), std::range_error);
BOOST_CHECK_THROW(qb::Selector e("A not like 'eclecti_' escape 'happy'"), std::range_error);
BOOST_CHECK_THROW(qb::Selector e("A not like 'eclecti_' escape happy"), std::range_error);
+ BOOST_CHECK_THROW(qb::Selector e("A BETWEEN AND 'true'"), std::range_error);
+ BOOST_CHECK_THROW(qb::Selector e("A NOT BETWEEN (X=Y) AND 3.9"), std::range_error);
+ BOOST_CHECK_THROW(qb::Selector e("A NOT BETWEEN 34 OR 3.9"), std::range_error);
}
class TestSelectorEnv : public qpid::broker::SelectorEnv {
@@ -240,6 +243,8 @@ QPID_AUTO_TEST_CASE(parseString)
BOOST_CHECK_NO_THROW(qb::Selector e("A LIKE 'excep%ional'"));
BOOST_CHECK_NO_THROW(qb::Selector e("B NOT LIKE 'excep%ional'"));
BOOST_CHECK_NO_THROW(qb::Selector e("A LIKE 'excep%ional' EScape '\'"));
+ BOOST_CHECK_NO_THROW(qb::Selector e("A BETWEEN 13 AND 'true'"));
+ BOOST_CHECK_NO_THROW(qb::Selector e("A NOT BETWEEN 100 AND 3.9"));
}
QPID_AUTO_TEST_CASE(simpleEval)
@@ -291,6 +296,8 @@ QPID_AUTO_TEST_CASE(numericEval)
BOOST_CHECK(qb::Selector("B=39.0").eval(env));
BOOST_CHECK(qb::Selector("Not A=17 or B=5.6").eval(env));
BOOST_CHECK(!qb::Selector("A<>17 and B=5.6e17").eval(env));
+ BOOST_CHECK(qb::Selector("A BETWEEN B and 98.5").eval(env));
+ BOOST_CHECK(!qb::Selector("B NOT BETWEEN 35 AND 100").eval(env));
}
QPID_AUTO_TEST_CASE(comparisonEval)