summaryrefslogtreecommitdiffstats
path: root/predicate-search-core/src/test/java/com/yahoo/search/predicate/optimization/ComplexNodeTransformerTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'predicate-search-core/src/test/java/com/yahoo/search/predicate/optimization/ComplexNodeTransformerTest.java')
-rw-r--r--predicate-search-core/src/test/java/com/yahoo/search/predicate/optimization/ComplexNodeTransformerTest.java604
1 files changed, 604 insertions, 0 deletions
diff --git a/predicate-search-core/src/test/java/com/yahoo/search/predicate/optimization/ComplexNodeTransformerTest.java b/predicate-search-core/src/test/java/com/yahoo/search/predicate/optimization/ComplexNodeTransformerTest.java
new file mode 100644
index 00000000000..45cdabfb4f2
--- /dev/null
+++ b/predicate-search-core/src/test/java/com/yahoo/search/predicate/optimization/ComplexNodeTransformerTest.java
@@ -0,0 +1,604 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.search.predicate.optimization;
+
+import com.yahoo.document.predicate.FeatureRange;
+import com.yahoo.document.predicate.Predicate;
+import com.yahoo.document.predicate.RangePartition;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * @author <a href="mailto:magnarn@yahoo-inc.com">Magnar Nedland</a>
+ */
+public class ComplexNodeTransformerTest {
+
+ private long lowerBound = 0x8000000000000000L;
+ private long upperBound = 0x7fffffffffffffffL;
+
+ private void testConvert(String predicate, String expected) {
+ int defaultArity = 10;
+ testConvert(predicate, expected, defaultArity);
+ }
+
+ private void testConvert(String predicate, String expected, int arity) {
+ Predicate p = Predicate.fromString(predicate);
+ ComplexNodeTransformer transformer = new ComplexNodeTransformer();
+ Predicate converted = transformer.process(p, new PredicateOptions(arity, lowerBound, upperBound));
+ assertEquals(expected, converted.toString());
+ }
+
+ @Test
+ public void requireThatSingleValueRangesAreConverted() {
+ testConvert("foo in [0..0]", "foo in [0..0 (foo=0+[..0])]");
+ testConvert("foo in [5..5]", "foo in [5..5 (foo=0+[5..5])]");
+ testConvert("foo in [9..9]", "foo in [9..9 (foo=0+[9..])]");
+ testConvert("foo in [10..10]", "foo in [10..10 (foo=10+[..0])]");
+ testConvert("foo in [-5..-5]", "foo in [-5..-5 (foo=-0+[5..5])]");
+ testConvert("foo in [-9..-9]", "foo in [-9..-9 (foo=-0+[9..])]");
+ testConvert("foo in [-10..-10]", "foo in [-10..-10 (foo=-10+[..0])]");
+ }
+
+ @Test
+ public void requireThatVeryShortRangesAreConverted() {
+ testConvert("foo in [10..17]", "foo in [10..17 (foo=10+[..7])]");
+ testConvert("foo in [12..19]", "foo in [12..19 (foo=10+[2..])]");
+ testConvert("foo in [11..18]", "foo in [11..18 (foo=10+[1..8])]");
+ testConvert("foo in [7..13]", "foo in [7..13 (foo=0+[7..],foo=10+[..3])]");
+ testConvert("foo in [-17..-10]", "foo in [-17..-10 (foo=-10+[..7])]");
+ testConvert("foo in [-19..-12]", "foo in [-19..-12 (foo=-10+[2..])]");
+ testConvert("foo in [-18..-11]", "foo in [-18..-11 (foo=-10+[1..8])]");
+ testConvert("foo in [-13..-7]", "foo in [-13..-7 (foo=-0+[7..],foo=-10+[..3])]");
+ testConvert("foo in [-5..4]", "foo in [-5..4 (foo=-0+[..5],foo=0+[..4])]");
+ }
+
+ @Test
+ public void requireThatShortRangeIsConverted() {
+ testConvert("foo in [9..19]", "foo in [9..19 (foo=0+[9..],foo=10-19)]");
+ testConvert("foo in [10..19]", "foo in [10..19 (foo=10-19)]");
+ testConvert("foo in [10..20]", "foo in [10..20 (foo=20+[..0],foo=10-19)]");
+ testConvert("foo in [12..21]", "foo in [12..21 (foo=10+[2..],foo=20+[..1])]");
+ testConvert("foo in [-19..-9]", "foo in [-19..-9 (foo=-0+[9..],foo=-19-10)]");
+ testConvert("foo in [-19..-10]", "foo in [-19..-10 (foo=-19-10)]");
+ testConvert("foo in [-20..-10]", "foo in [-20..-10 (foo=-20+[..0],foo=-19-10)]");
+ testConvert("foo in [-21..-12]", "foo in [-21..-12 (foo=-10+[2..],foo=-20+[..1])]");
+ testConvert("foo in [-9..9]", "foo in [-9..9 (foo=-9-0,foo=0-9)]");
+ testConvert("foo in [-10..10]", "foo in [-10..10 (foo=-10+[..0],foo=10+[..0],foo=-9-0,foo=0-9)]");
+ }
+
+ @Test
+ public void requireThatMediumRangeIsConverted() {
+ testConvert("foo in [10..39]", "foo in [10..39 (foo=10-19,foo=20-29,foo=30-39)]");
+ testConvert("foo in [10..38]", "foo in [10..38 (foo=30+[..8],foo=10-19,foo=20-29)]");
+ testConvert("foo in [18..39]", "foo in [18..39 (foo=10+[8..],foo=20-29,foo=30-39)]");
+ testConvert("foo in [8..38]", "foo in [8..38 (foo=0+[8..],foo=30+[..8],foo=10-19,foo=20-29)]");
+ testConvert("foo in [-39..-10]", "foo in [-39..-10 (foo=-19-10,foo=-29-20,foo=-39-30)]");
+ testConvert("foo in [-38..-10]", "foo in [-38..-10 (foo=-30+[..8],foo=-19-10,foo=-29-20)]");
+ testConvert("foo in [-39..-18]", "foo in [-39..-18 (foo=-10+[8..],foo=-29-20,foo=-39-30)]");
+ testConvert("foo in [-38..-8]", "foo in [-38..-8 (foo=-0+[8..],foo=-30+[..8],foo=-19-10,foo=-29-20)]");
+ testConvert("foo in [-19..19]", "foo in [-19..19 (foo=-9-0,foo=-19-10,foo=0-9,foo=10-19)]");
+ }
+
+ @Test
+ public void requireThatLargeRangeIsConverted() {
+ testConvert("foo in [10..199]", "foo in [10..199 (foo=10-19,foo=20-29,foo=30-39,foo=40-49,foo=50-59,foo=60-69,foo=70-79,foo=80-89,foo=90-99,foo=100-199)]");
+ testConvert("foo in [8..207]", "foo in [8..207 (foo=0+[8..],foo=200+[..7],foo=10-19,foo=20-29,foo=30-39,foo=40-49,foo=50-59,foo=60-69,foo=70-79,foo=80-89,foo=90-99,foo=100-199)]");
+ testConvert("foo in [999..2001]", "foo in [999..2001 (foo=990+[9..],foo=2000+[..1],foo=1000-1999)]");
+ testConvert("foo in [999..2009]", "foo in [999..2009 (foo=990+[9..],foo=2000-2009,foo=1000-1999)]");
+ testConvert("foo in [999..2099]", "foo in [999..2099 (foo=990+[9..],foo=2000-2099,foo=1000-1999)]");
+ testConvert("foo in [999..2999]", "foo in [999..2999 (foo=990+[9..],foo=1000-1999,foo=2000-2999)]");
+ testConvert("foo in [-199..-10]", "foo in [-199..-10 (foo=-19-10,foo=-29-20,foo=-39-30,foo=-49-40,foo=-59-50,foo=-69-60,foo=-79-70,foo=-89-80,foo=-99-90,foo=-199-100)]");
+ testConvert("foo in [-207..-8]", "foo in [-207..-8 (foo=-0+[8..],foo=-200+[..7],foo=-19-10,foo=-29-20,foo=-39-30,foo=-49-40,foo=-59-50,foo=-69-60,foo=-79-70,foo=-89-80,foo=-99-90,foo=-199-100)]");
+ testConvert("foo in [-2001..-999]", "foo in [-2001..-999 (foo=-990+[9..],foo=-2000+[..1],foo=-1999-1000)]");
+ testConvert("foo in [-999..999]", "foo in [-999..999 (foo=-999-0,foo=0-999)]");
+ }
+
+ @Test
+ public void requireThatLongMaxIsConverted() {
+ testConvert("foo in [0..9223372036854775807]",
+ "foo in [0..9223372036854775807 (" +
+ "foo=9223372036854775800+[..7]," +
+ "foo=9223372036854775000-9223372036854775099," +
+ "foo=9223372036854775100-9223372036854775199," +
+ "foo=9223372036854775200-9223372036854775299," +
+ "foo=9223372036854775300-9223372036854775399," +
+ "foo=9223372036854775400-9223372036854775499," +
+ "foo=9223372036854775500-9223372036854775599," +
+ "foo=9223372036854775600-9223372036854775699," +
+ "foo=9223372036854775700-9223372036854775799," +
+ "foo=9223372036854770000-9223372036854770999," +
+ "foo=9223372036854771000-9223372036854771999," +
+ "foo=9223372036854772000-9223372036854772999," +
+ "foo=9223372036854773000-9223372036854773999," +
+ "foo=9223372036854774000-9223372036854774999," +
+ "foo=9223372036854700000-9223372036854709999," +
+ "foo=9223372036854710000-9223372036854719999," +
+ "foo=9223372036854720000-9223372036854729999," +
+ "foo=9223372036854730000-9223372036854739999," +
+ "foo=9223372036854740000-9223372036854749999," +
+ "foo=9223372036854750000-9223372036854759999," +
+ "foo=9223372036854760000-9223372036854769999," +
+ "foo=9223372036854000000-9223372036854099999," +
+ "foo=9223372036854100000-9223372036854199999," +
+ "foo=9223372036854200000-9223372036854299999," +
+ "foo=9223372036854300000-9223372036854399999," +
+ "foo=9223372036854400000-9223372036854499999," +
+ "foo=9223372036854500000-9223372036854599999," +
+ "foo=9223372036854600000-9223372036854699999," +
+ "foo=9223372036850000000-9223372036850999999," +
+ "foo=9223372036851000000-9223372036851999999," +
+ "foo=9223372036852000000-9223372036852999999," +
+ "foo=9223372036853000000-9223372036853999999," +
+ "foo=9223372036800000000-9223372036809999999," +
+ "foo=9223372036810000000-9223372036819999999," +
+ "foo=9223372036820000000-9223372036829999999," +
+ "foo=9223372036830000000-9223372036839999999," +
+ "foo=9223372036840000000-9223372036849999999," +
+ "foo=9223372036000000000-9223372036099999999," +
+ "foo=9223372036100000000-9223372036199999999," +
+ "foo=9223372036200000000-9223372036299999999," +
+ "foo=9223372036300000000-9223372036399999999," +
+ "foo=9223372036400000000-9223372036499999999," +
+ "foo=9223372036500000000-9223372036599999999," +
+ "foo=9223372036600000000-9223372036699999999," +
+ "foo=9223372036700000000-9223372036799999999," +
+ "foo=9223372030000000000-9223372030999999999," +
+ "foo=9223372031000000000-9223372031999999999," +
+ "foo=9223372032000000000-9223372032999999999," +
+ "foo=9223372033000000000-9223372033999999999," +
+ "foo=9223372034000000000-9223372034999999999," +
+ "foo=9223372035000000000-9223372035999999999," +
+ "foo=9223372000000000000-9223372009999999999," +
+ "foo=9223372010000000000-9223372019999999999," +
+ "foo=9223372020000000000-9223372029999999999," +
+ "foo=9223370000000000000-9223370999999999999," +
+ "foo=9223371000000000000-9223371999999999999," +
+ "foo=9223300000000000000-9223309999999999999," +
+ "foo=9223310000000000000-9223319999999999999," +
+ "foo=9223320000000000000-9223329999999999999," +
+ "foo=9223330000000000000-9223339999999999999," +
+ "foo=9223340000000000000-9223349999999999999," +
+ "foo=9223350000000000000-9223359999999999999," +
+ "foo=9223360000000000000-9223369999999999999," +
+ "foo=9223000000000000000-9223099999999999999," +
+ "foo=9223100000000000000-9223199999999999999," +
+ "foo=9223200000000000000-9223299999999999999," +
+ "foo=9220000000000000000-9220999999999999999," +
+ "foo=9221000000000000000-9221999999999999999," +
+ "foo=9222000000000000000-9222999999999999999," +
+ "foo=9200000000000000000-9209999999999999999," +
+ "foo=9210000000000000000-9219999999999999999," +
+ "foo=9000000000000000000-9099999999999999999," +
+ "foo=9100000000000000000-9199999999999999999," +
+ "foo=0-999999999999999999," +
+ "foo=1000000000000000000-1999999999999999999," +
+ "foo=2000000000000000000-2999999999999999999," +
+ "foo=3000000000000000000-3999999999999999999," +
+ "foo=4000000000000000000-4999999999999999999," +
+ "foo=5000000000000000000-5999999999999999999," +
+ "foo=6000000000000000000-6999999999999999999," +
+ "foo=7000000000000000000-7999999999999999999," +
+ "foo=8000000000000000000-8999999999999999999)]");
+
+ testConvert("foo in [9223372036854775807..9223372036854775807]", "foo in [9223372036854775807..9223372036854775807 (foo=9223372036854775800+[7..7])]");
+ }
+
+ @Test
+ public void requireThatLongMinIsConverted() {
+ testConvert("foo in [-9223372036854775808..-1]",
+ "foo in [-9223372036854775808..-1 (" +
+ "foo=-9223372036854775800+[..8]," +
+ "foo=-9223372036854775099-9223372036854775000," +
+ "foo=-9223372036854775199-9223372036854775100," +
+ "foo=-9223372036854775299-9223372036854775200," +
+ "foo=-9223372036854775399-9223372036854775300," +
+ "foo=-9223372036854775499-9223372036854775400," +
+ "foo=-9223372036854775599-9223372036854775500," +
+ "foo=-9223372036854775699-9223372036854775600," +
+ "foo=-9223372036854775799-9223372036854775700," +
+ "foo=-9223372036854770999-9223372036854770000," +
+ "foo=-9223372036854771999-9223372036854771000," +
+ "foo=-9223372036854772999-9223372036854772000," +
+ "foo=-9223372036854773999-9223372036854773000," +
+ "foo=-9223372036854774999-9223372036854774000," +
+ "foo=-9223372036854709999-9223372036854700000," +
+ "foo=-9223372036854719999-9223372036854710000," +
+ "foo=-9223372036854729999-9223372036854720000," +
+ "foo=-9223372036854739999-9223372036854730000," +
+ "foo=-9223372036854749999-9223372036854740000," +
+ "foo=-9223372036854759999-9223372036854750000," +
+ "foo=-9223372036854769999-9223372036854760000," +
+ "foo=-9223372036854099999-9223372036854000000," +
+ "foo=-9223372036854199999-9223372036854100000," +
+ "foo=-9223372036854299999-9223372036854200000," +
+ "foo=-9223372036854399999-9223372036854300000," +
+ "foo=-9223372036854499999-9223372036854400000," +
+ "foo=-9223372036854599999-9223372036854500000," +
+ "foo=-9223372036854699999-9223372036854600000," +
+ "foo=-9223372036850999999-9223372036850000000," +
+ "foo=-9223372036851999999-9223372036851000000," +
+ "foo=-9223372036852999999-9223372036852000000," +
+ "foo=-9223372036853999999-9223372036853000000," +
+ "foo=-9223372036809999999-9223372036800000000," +
+ "foo=-9223372036819999999-9223372036810000000," +
+ "foo=-9223372036829999999-9223372036820000000," +
+ "foo=-9223372036839999999-9223372036830000000," +
+ "foo=-9223372036849999999-9223372036840000000," +
+ "foo=-9223372036099999999-9223372036000000000," +
+ "foo=-9223372036199999999-9223372036100000000," +
+ "foo=-9223372036299999999-9223372036200000000," +
+ "foo=-9223372036399999999-9223372036300000000," +
+ "foo=-9223372036499999999-9223372036400000000," +
+ "foo=-9223372036599999999-9223372036500000000," +
+ "foo=-9223372036699999999-9223372036600000000," +
+ "foo=-9223372036799999999-9223372036700000000," +
+ "foo=-9223372030999999999-9223372030000000000," +
+ "foo=-9223372031999999999-9223372031000000000," +
+ "foo=-9223372032999999999-9223372032000000000," +
+ "foo=-9223372033999999999-9223372033000000000," +
+ "foo=-9223372034999999999-9223372034000000000," +
+ "foo=-9223372035999999999-9223372035000000000," +
+ "foo=-9223372009999999999-9223372000000000000," +
+ "foo=-9223372019999999999-9223372010000000000," +
+ "foo=-9223372029999999999-9223372020000000000," +
+ "foo=-9223370999999999999-9223370000000000000," +
+ "foo=-9223371999999999999-9223371000000000000," +
+ "foo=-9223309999999999999-9223300000000000000," +
+ "foo=-9223319999999999999-9223310000000000000," +
+ "foo=-9223329999999999999-9223320000000000000," +
+ "foo=-9223339999999999999-9223330000000000000," +
+ "foo=-9223349999999999999-9223340000000000000," +
+ "foo=-9223359999999999999-9223350000000000000," +
+ "foo=-9223369999999999999-9223360000000000000," +
+ "foo=-9223099999999999999-9223000000000000000," +
+ "foo=-9223199999999999999-9223100000000000000," +
+ "foo=-9223299999999999999-9223200000000000000," +
+ "foo=-9220999999999999999-9220000000000000000," +
+ "foo=-9221999999999999999-9221000000000000000," +
+ "foo=-9222999999999999999-9222000000000000000," +
+ "foo=-9209999999999999999-9200000000000000000," +
+ "foo=-9219999999999999999-9210000000000000000," +
+ "foo=-9099999999999999999-9000000000000000000," +
+ "foo=-9199999999999999999-9100000000000000000," +
+ "foo=-999999999999999999-0," +
+ "foo=-1999999999999999999-1000000000000000000," +
+ "foo=-2999999999999999999-2000000000000000000," +
+ "foo=-3999999999999999999-3000000000000000000," +
+ "foo=-4999999999999999999-4000000000000000000," +
+ "foo=-5999999999999999999-5000000000000000000," +
+ "foo=-6999999999999999999-6000000000000000000," +
+ "foo=-7999999999999999999-7000000000000000000," +
+ "foo=-8999999999999999999-8000000000000000000)]");
+ testConvert("foo in [-9223372036854775808..-9223372036854775808]", "foo in [-9223372036854775808..-9223372036854775808 (foo=-9223372036854775800+[8..8])]");
+ }
+
+ @Test
+ public void requireThatLowAritiesWork() {
+ testConvert("foo in [10..39]", "foo in [10..39 (foo=10-11,foo=12-15,foo=32-39,foo=16-31)]", 2);
+ testConvert("foo in [2..32]", "foo in [2..32 (foo=32+[..0],foo=2-3,foo=4-7,foo=8-15,foo=16-31)]", 2);
+ testConvert("foo in [-31..63]", "foo in [-31..63 (foo=-31-0,foo=0-63)]", 2);
+ testConvert("foo in [0..9223372036854775807]", "foo in [0..9223372036854775807 (foo=0-9223372036854775807)]", 2);
+ testConvert("foo in [9223372036854775807..9223372036854775807]", "foo in [9223372036854775807..9223372036854775807 (foo=9223372036854775806+[1..])]", 2);
+ testConvert("foo in [-9223372036854775808..-1]", "foo in [-9223372036854775808..-1 (foo=-9223372036854775808+[..0],foo=-9223372036854775807-0)]", 2);
+ testConvert("foo in [-9223372036854775808..-9223372036854775808]", "foo in [-9223372036854775808..-9223372036854775808 (foo=-9223372036854775808+[..0])]", 2);
+ testConvert("foo in [-9223372036854775808..9223372036854775807]", "foo in [-9223372036854775808..9223372036854775807 (foo=-9223372036854775808+[..0],foo=-9223372036854775807-0,foo=0-9223372036854775807)]", 2);
+
+ testConvert("foo in [9223372036854775807..9223372036854775807]", "foo in [9223372036854775807..9223372036854775807 (foo=9223372036854775806+[1..1])]", 3);
+ testConvert("foo in [-9223372036854775808..-9223372036854775808]", "foo in [-9223372036854775808..-9223372036854775808 (foo=-9223372036854775806+[2..])]", 3);
+ testConvert("foo in [-9223372036854775808..-1]",
+ "foo in [-9223372036854775808..-1 (" +
+ "foo=-9223372036854775808-9223372036854775782," +
+ "foo=-9223372036854775700-9223372036854775620," +
+ "foo=-9223372036854775781-9223372036854775701," +
+ "foo=-9223372036854775376-9223372036854775134," +
+ "foo=-9223372036854775619-9223372036854775377," +
+ "foo=-9223372036854775133-9223372036854774405," +
+ "foo=-9223372036854774404-9223372036854767844," +
+ "foo=-9223372036854708794-9223372036854649746," +
+ "foo=-9223372036854767843-9223372036854708795," +
+ "foo=-9223372036854472598-9223372036854295452," +
+ "foo=-9223372036854649745-9223372036854472599," +
+ "foo=-9223372036854295451-9223372036853764011," +
+ "foo=-9223372036852169687-9223372036850575365," +
+ "foo=-9223372036853764010-9223372036852169688," +
+ "foo=-9223372036850575364-9223372036807528644," +
+ "foo=-9223372036420108154-9223372036032687666," +
+ "foo=-9223372036807528643-9223372036420108155," +
+ "foo=-9223372036032687665-9223372032545903265," +
+ "foo=-9223372022085550061-9223372011625196859," +
+ "foo=-9223372032545903264-9223372022085550062," +
+ "foo=-9223372011625196858-9223371980244137250," +
+ "foo=-9223371980244137249-9223371132955527807," +
+ "foo=-9223368591089699477-9223366049223871149," +
+ "foo=-9223371132955527806-9223368591089699478," +
+ "foo=-9223358423626386161-9223350798028901175," +
+ "foo=-9223366049223871148-9223358423626386162," +
+ "foo=-9223327921236446213-9223305044443991253," +
+ "foo=-9223350798028901174-9223327921236446214," +
+ "foo=-9223305044443991252-9223099153311896604," +
+ "foo=-9223099153311896603-9222481479915612657," +
+ "foo=-9222481479915612656-9205804298215946088," +
+ "foo=-9205804298215946087-9155772753116946381," +
+ "foo=-9155772753116946380-9005678117819947260," +
+ "foo=-8555394211928949896-8105110306037952534," +
+ "foo=-9005678117819947259-8555394211928949897," +
+ "foo=-4052555153018976266-0," +
+ "foo=-8105110306037952533-4052555153018976267)]", 3);
+ }
+
+ @Test
+ public void requireThatHighAritiesWork() {
+ testConvert("foo in [10..39]", "foo in [10..39 (foo=0+[10..39])]", 1000);
+ testConvert("foo in [9000..11000]", "foo in [9000..11000 (foo=0+[9000..],foo=10000+[..1000])]", 10000);
+ testConvert("foo in [10..39]", "foo in [10..39 (foo=0+[10..39])]", 16384);
+ testConvert("foo in [10..32768]", "foo in [10..32768 (foo=0+[10..],foo=32768+[..0],foo=16384-32767)]", 16384);
+
+ testConvert("foo in [9223372036854775807..9223372036854775807]", "foo in [9223372036854775807..9223372036854775807 (foo=9223372036854759424+[16383..])]", 16384);
+ testConvert("foo in [-9223372036854775808..-9223372036854775808]", "foo in [-9223372036854775808..-9223372036854775808 (foo=-9223372036854775808+[..0])]", 16384);
+ }
+
+ @Test
+ public void requireThatOpenRangesWork() {
+ testConvert("foo in [-7..]", "foo in [-7.. (foo=-7-0,foo=0-9223372036854775807)]", 2);
+ testConvert("foo in [..7]", "foo in [..7 (foo=-9223372036854775808+[..0],foo=-9223372036854775807-0,foo=0-7)]", 2);
+ }
+
+ @Test
+ public void requireThatUpperAndLowerBoundsWork() {
+ lowerBound = -999;
+ upperBound = 999;
+ testConvert("foo in [-9..]", "foo in [-9.. (foo=-9-0,foo=0-999)]", 10);
+ testConvert("foo in [..9]", "foo in [..9 (foo=-999-0,foo=0-9)]", 10);
+ testConvert("foo in [..]", "foo in [.. (foo=-999-0,foo=0-999)]", 10);
+ }
+
+ @Test
+ public void requireThatUpperAndLowerBoundsPruneClosedRanges() {
+ lowerBound = -999;
+ upperBound = 999;
+ testConvert("foo in [0..10000]", "foo in [0..10000 (foo=0-999)]", 10);
+ lowerBound = 888;
+ testConvert("foo in [0..10000]", "foo in [0..10000 (foo=0-999)]", 10);
+ lowerBound = 900;
+ testConvert("foo in [0..10000]", "foo in [0..10000 (foo=0-999)]", 10);
+ }
+
+ @Test
+ public void requireThatRangesOutsideBoundsAreSimplifiedToOneImpossibleRange() {
+ lowerBound = 900;
+ upperBound = 999;
+ testConvert("foo in [0..100]", "foo in [0..100 (foo=-9223372036854775799-9223372036854775790)]", 10);
+ testConvert("foo in [1000..1100]", "foo in [1000..1100 (foo=9223372036854775790-9223372036854775799)]", 10);
+ lowerBound = -999;
+ upperBound = -900;
+ testConvert("foo in [-2000..-1000]", "foo in [-2000..-1000 (foo=-9223372036854775799-9223372036854775790)]", 10);
+ testConvert("foo in [0..100]", "foo in [0..100 (foo=9223372036854775790-9223372036854775799)]", 10);
+ lowerBound = -9223372036854775790L;
+ upperBound = 9223372036854775790L;
+ testConvert("foo in [9223372036854775791..9223372036854775792]", "foo in [9223372036854775791..9223372036854775792 (foo=9223372036854775790+[1..1])]", 10);
+ testConvert("foo in [-9223372036854775792..-9223372036854775791]", "foo in [-9223372036854775792..-9223372036854775791 (foo=-9223372036854775790+[1..1])]", 10);
+ }
+
+ @Test
+ public void requireThatUpperAndLowerBoundsAreAdjustedWithArity() {
+ lowerBound = -999;
+ upperBound = 999;
+ testConvert("foo in [0..10000]", "foo in [0..10000 (foo=0-999)]", 10);
+ testConvert("foo in [0..10000]", "foo in [0..10000 (foo=0-1023)]", 2);
+ testConvert("foo in [-10000..10000]", "foo in [-10000..10000 (foo=-999-0,foo=0-999)]", 10);
+ testConvert("foo in [-10000..10000]", "foo in [-10000..10000 (foo=-1023-0,foo=0-1023)]", 2);
+
+ upperBound = 1000;
+ testConvert("foo in [0..10000]", "foo in [0..10000 (foo=0-9999)]", 10);
+
+ lowerBound = 100;
+ upperBound = 999;
+ testConvert("foo in [0..10000]", "foo in [0..10000 (foo=0-999)]", 10);
+ testConvert("foo in [0..10000]", "foo in [0..10000 (foo=0-1023)]", 2);
+
+ lowerBound = -999;
+ upperBound = -100;
+ testConvert("foo in [-10000..10000]", "foo in [-10000..10000 (foo=-999-0)]", 10);
+ testConvert("foo in [-10000..10000]", "foo in [-10000..10000 (foo=-1023-0)]", 2);
+
+ lowerBound = -9223372036854775790L;
+ upperBound = 9223372036854775790L;
+ testConvert("foo in [-9223372036854775791..9223372036854775792]",
+ "foo in [-9223372036854775791..9223372036854775792 (" +
+ "foo=-9223372036854775790+[..0],foo=9223372036854775790+[..0]," +
+ "foo=-9223372036854775709-9223372036854775700," +
+ "foo=-9223372036854775719-9223372036854775710," +
+ "foo=-9223372036854775729-9223372036854775720," +
+ "foo=-9223372036854775739-9223372036854775730," +
+ "foo=-9223372036854775749-9223372036854775740," +
+ "foo=-9223372036854775759-9223372036854775750," +
+ "foo=-9223372036854775769-9223372036854775760," +
+ "foo=-9223372036854775779-9223372036854775770," +
+ "foo=-9223372036854775789-9223372036854775780," +
+ "foo=-9223372036854775099-9223372036854775000," +
+ "foo=-9223372036854775199-9223372036854775100," +
+ "foo=-9223372036854775299-9223372036854775200," +
+ "foo=-9223372036854775399-9223372036854775300," +
+ "foo=-9223372036854775499-9223372036854775400," +
+ "foo=-9223372036854775599-9223372036854775500," +
+ "foo=-9223372036854775699-9223372036854775600," +
+ "foo=-9223372036854770999-9223372036854770000," +
+ "foo=-9223372036854771999-9223372036854771000," +
+ "foo=-9223372036854772999-9223372036854772000," +
+ "foo=-9223372036854773999-9223372036854773000," +
+ "foo=-9223372036854774999-9223372036854774000," +
+ "foo=-9223372036854709999-9223372036854700000," +
+ "foo=-9223372036854719999-9223372036854710000," +
+ "foo=-9223372036854729999-9223372036854720000," +
+ "foo=-9223372036854739999-9223372036854730000," +
+ "foo=-9223372036854749999-9223372036854740000," +
+ "foo=-9223372036854759999-9223372036854750000," +
+ "foo=-9223372036854769999-9223372036854760000," +
+ "foo=-9223372036854099999-9223372036854000000," +
+ "foo=-9223372036854199999-9223372036854100000," +
+ "foo=-9223372036854299999-9223372036854200000," +
+ "foo=-9223372036854399999-9223372036854300000," +
+ "foo=-9223372036854499999-9223372036854400000," +
+ "foo=-9223372036854599999-9223372036854500000," +
+ "foo=-9223372036854699999-9223372036854600000," +
+ "foo=-9223372036850999999-9223372036850000000," +
+ "foo=-9223372036851999999-9223372036851000000," +
+ "foo=-9223372036852999999-9223372036852000000," +
+ "foo=-9223372036853999999-9223372036853000000," +
+ "foo=-9223372036809999999-9223372036800000000," +
+ "foo=-9223372036819999999-9223372036810000000," +
+ "foo=-9223372036829999999-9223372036820000000," +
+ "foo=-9223372036839999999-9223372036830000000," +
+ "foo=-9223372036849999999-9223372036840000000," +
+ "foo=-9223372036099999999-9223372036000000000," +
+ "foo=-9223372036199999999-9223372036100000000," +
+ "foo=-9223372036299999999-9223372036200000000," +
+ "foo=-9223372036399999999-9223372036300000000," +
+ "foo=-9223372036499999999-9223372036400000000," +
+ "foo=-9223372036599999999-9223372036500000000," +
+ "foo=-9223372036699999999-9223372036600000000," +
+ "foo=-9223372036799999999-9223372036700000000," +
+ "foo=-9223372030999999999-9223372030000000000," +
+ "foo=-9223372031999999999-9223372031000000000," +
+ "foo=-9223372032999999999-9223372032000000000," +
+ "foo=-9223372033999999999-9223372033000000000," +
+ "foo=-9223372034999999999-9223372034000000000," +
+ "foo=-9223372035999999999-9223372035000000000," +
+ "foo=-9223372009999999999-9223372000000000000," +
+ "foo=-9223372019999999999-9223372010000000000," +
+ "foo=-9223372029999999999-9223372020000000000," +
+ "foo=-9223370999999999999-9223370000000000000," +
+ "foo=-9223371999999999999-9223371000000000000," +
+ "foo=-9223309999999999999-9223300000000000000," +
+ "foo=-9223319999999999999-9223310000000000000," +
+ "foo=-9223329999999999999-9223320000000000000," +
+ "foo=-9223339999999999999-9223330000000000000," +
+ "foo=-9223349999999999999-9223340000000000000," +
+ "foo=-9223359999999999999-9223350000000000000," +
+ "foo=-9223369999999999999-9223360000000000000," +
+ "foo=-9223099999999999999-9223000000000000000," +
+ "foo=-9223199999999999999-9223100000000000000," +
+ "foo=-9223299999999999999-9223200000000000000," +
+ "foo=-9220999999999999999-9220000000000000000," +
+ "foo=-9221999999999999999-9221000000000000000," +
+ "foo=-9222999999999999999-9222000000000000000," +
+ "foo=-9209999999999999999-9200000000000000000," +
+ "foo=-9219999999999999999-9210000000000000000," +
+ "foo=-9099999999999999999-9000000000000000000," +
+ "foo=-9199999999999999999-9100000000000000000," +
+ "foo=-999999999999999999-0," +
+ "foo=-1999999999999999999-1000000000000000000," +
+ "foo=-2999999999999999999-2000000000000000000," +
+ "foo=-3999999999999999999-3000000000000000000," +
+ "foo=-4999999999999999999-4000000000000000000," +
+ "foo=-5999999999999999999-5000000000000000000," +
+ "foo=-6999999999999999999-6000000000000000000," +
+ "foo=-7999999999999999999-7000000000000000000," +
+ "foo=-8999999999999999999-8000000000000000000," +
+ "foo=9223372036854775700-9223372036854775709," +
+ "foo=9223372036854775710-9223372036854775719," +
+ "foo=9223372036854775720-9223372036854775729," +
+ "foo=9223372036854775730-9223372036854775739," +
+ "foo=9223372036854775740-9223372036854775749," +
+ "foo=9223372036854775750-9223372036854775759," +
+ "foo=9223372036854775760-9223372036854775769," +
+ "foo=9223372036854775770-9223372036854775779," +
+ "foo=9223372036854775780-9223372036854775789," +
+ "foo=9223372036854775000-9223372036854775099," +
+ "foo=9223372036854775100-9223372036854775199," +
+ "foo=9223372036854775200-9223372036854775299," +
+ "foo=9223372036854775300-9223372036854775399," +
+ "foo=9223372036854775400-9223372036854775499," +
+ "foo=9223372036854775500-9223372036854775599," +
+ "foo=9223372036854775600-9223372036854775699," +
+ "foo=9223372036854770000-9223372036854770999," +
+ "foo=9223372036854771000-9223372036854771999," +
+ "foo=9223372036854772000-9223372036854772999," +
+ "foo=9223372036854773000-9223372036854773999," +
+ "foo=9223372036854774000-9223372036854774999," +
+ "foo=9223372036854700000-9223372036854709999," +
+ "foo=9223372036854710000-9223372036854719999," +
+ "foo=9223372036854720000-9223372036854729999," +
+ "foo=9223372036854730000-9223372036854739999," +
+ "foo=9223372036854740000-9223372036854749999," +
+ "foo=9223372036854750000-9223372036854759999," +
+ "foo=9223372036854760000-9223372036854769999," +
+ "foo=9223372036854000000-9223372036854099999," +
+ "foo=9223372036854100000-9223372036854199999," +
+ "foo=9223372036854200000-9223372036854299999," +
+ "foo=9223372036854300000-9223372036854399999," +
+ "foo=9223372036854400000-9223372036854499999," +
+ "foo=9223372036854500000-9223372036854599999," +
+ "foo=9223372036854600000-9223372036854699999," +
+ "foo=9223372036850000000-9223372036850999999," +
+ "foo=9223372036851000000-9223372036851999999," +
+ "foo=9223372036852000000-9223372036852999999," +
+ "foo=9223372036853000000-9223372036853999999," +
+ "foo=9223372036800000000-9223372036809999999," +
+ "foo=9223372036810000000-9223372036819999999," +
+ "foo=9223372036820000000-9223372036829999999," +
+ "foo=9223372036830000000-9223372036839999999," +
+ "foo=9223372036840000000-9223372036849999999," +
+ "foo=9223372036000000000-9223372036099999999," +
+ "foo=9223372036100000000-9223372036199999999," +
+ "foo=9223372036200000000-9223372036299999999," +
+ "foo=9223372036300000000-9223372036399999999," +
+ "foo=9223372036400000000-9223372036499999999," +
+ "foo=9223372036500000000-9223372036599999999," +
+ "foo=9223372036600000000-9223372036699999999," +
+ "foo=9223372036700000000-9223372036799999999," +
+ "foo=9223372030000000000-9223372030999999999," +
+ "foo=9223372031000000000-9223372031999999999," +
+ "foo=9223372032000000000-9223372032999999999," +
+ "foo=9223372033000000000-9223372033999999999," +
+ "foo=9223372034000000000-9223372034999999999," +
+ "foo=9223372035000000000-9223372035999999999," +
+ "foo=9223372000000000000-9223372009999999999," +
+ "foo=9223372010000000000-9223372019999999999," +
+ "foo=9223372020000000000-9223372029999999999," +
+ "foo=9223370000000000000-9223370999999999999," +
+ "foo=9223371000000000000-9223371999999999999," +
+ "foo=9223300000000000000-9223309999999999999," +
+ "foo=9223310000000000000-9223319999999999999," +
+ "foo=9223320000000000000-9223329999999999999," +
+ "foo=9223330000000000000-9223339999999999999," +
+ "foo=9223340000000000000-9223349999999999999," +
+ "foo=9223350000000000000-9223359999999999999," +
+ "foo=9223360000000000000-9223369999999999999," +
+ "foo=9223000000000000000-9223099999999999999," +
+ "foo=9223100000000000000-9223199999999999999," +
+ "foo=9223200000000000000-9223299999999999999," +
+ "foo=9220000000000000000-9220999999999999999," +
+ "foo=9221000000000000000-9221999999999999999," +
+ "foo=9222000000000000000-9222999999999999999," +
+ "foo=9200000000000000000-9209999999999999999," +
+ "foo=9210000000000000000-9219999999999999999," +
+ "foo=9000000000000000000-9099999999999999999," +
+ "foo=9100000000000000000-9199999999999999999," +
+ "foo=0-999999999999999999," +
+ "foo=1000000000000000000-1999999999999999999," +
+ "foo=2000000000000000000-2999999999999999999," +
+ "foo=3000000000000000000-3999999999999999999," +
+ "foo=4000000000000000000-4999999999999999999," +
+ "foo=5000000000000000000-5999999999999999999," +
+ "foo=6000000000000000000-6999999999999999999," +
+ "foo=7000000000000000000-7999999999999999999," +
+ "foo=8000000000000000000-8999999999999999999)]");
+
+ lowerBound = -922337203685477579L;
+ upperBound = 922337203685477579L;
+ testConvert("foo in [-9223372036854775791..9223372036854775792]",
+ "foo in [-9223372036854775791..9223372036854775792 (foo=-999999999999999999-0,foo=0-999999999999999999)]");
+ }
+
+ @Test
+ public void requireThatExistingPartitionsAreCleared() {
+ testConvert("foo in [10..19]", "foo in [10..19 (foo=10-19)]");
+ Predicate p = Predicate.fromString("foo in [10..19]");
+ ((FeatureRange)p).addPartition(new RangePartition("foo", 10000L, 20000L, false));
+ ComplexNodeTransformer tranformer = new ComplexNodeTransformer();
+ Predicate converted = tranformer.process(p, new PredicateOptions(10, lowerBound, upperBound));
+ assertEquals("foo in [10..19 (foo=10-19)]", converted.toString());
+
+ }
+}