This is an automated email from the ASF dual-hosted git repository.
liukun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new a371acb fix a bug in TimeRange's intersect function (#382)
a371acb is described below
commit a371acb052115ced8767d6bf3ee5c5f293156d69
Author: Lei Rui <[email protected]>
AuthorDate: Sun Sep 8 17:38:15 2019 +0800
fix a bug in TimeRange's intersect function (#382)
---
.../apache/iotdb/tsfile/read/common/TimeRange.java | 12 +-
.../iotdb/tsfile/read/common/TimeRangeTest.java | 159 +++++++++++++++++----
2 files changed, 137 insertions(+), 34 deletions(-)
diff --git
a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/TimeRange.java
b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/TimeRange.java
index 792bd51..1b1b98a 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/TimeRange.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/TimeRange.java
@@ -134,7 +134,7 @@ public class TimeRange implements Comparable<TimeRange> {
*
* [1,3] does not intersect with (4,5].
*
- * [1,3) does not intersect with (3,5]
+ * [1,3) does not intersect with (3,5].
*
* [1,3] does not intersect with [5,6].
*
@@ -147,7 +147,7 @@ public class TimeRange implements Comparable<TimeRange> {
* @param r the given time range
* @return true if the current time range intersects with the given time
range r
*/
- private boolean intersects(TimeRange r) {
+ public boolean intersects(TimeRange r) {
if ((!leftClose || !r.rightClose) && (r.max < min)) {
// e.g., [1,3] does not intersect with (4,5].
return false;
@@ -156,10 +156,10 @@ public class TimeRange implements Comparable<TimeRange> {
return false;
} else if (leftClose && r.rightClose && r.max <= min - 2) {
// e.g.,[1,3] does not intersect with [5,6].
- return true;
+ return false;
} else if ((!rightClose || !r.leftClose) && (r.min > max)) {
return false;
- } else if (!rightClose && r.leftClose && r.min >= max) {
+ } else if (!rightClose && !r.leftClose && r.min >= max) {
return false;
} else if (rightClose && r.leftClose && r.min >= max + 2) {
return false;
@@ -190,11 +190,11 @@ public class TimeRange implements Comparable<TimeRange> {
private boolean leftClose = true; // default true
private boolean rightClose = true; // default true
- private void setLeftClose(boolean leftClose) {
+ public void setLeftClose(boolean leftClose) {
this.leftClose = leftClose;
}
- private void setRightClose(boolean rightClose) {
+ public void setRightClose(boolean rightClose) {
this.rightClose = rightClose;
}
diff --git
a/tsfile/src/test/java/org/apache/iotdb/tsfile/read/common/TimeRangeTest.java
b/tsfile/src/test/java/org/apache/iotdb/tsfile/read/common/TimeRangeTest.java
index c1f7867..db6e5b3 100644
---
a/tsfile/src/test/java/org/apache/iotdb/tsfile/read/common/TimeRangeTest.java
+++
b/tsfile/src/test/java/org/apache/iotdb/tsfile/read/common/TimeRangeTest.java
@@ -29,6 +29,90 @@ import org.junit.Test;
public class TimeRangeTest {
@Test
+ /*
+ * [1,3] does not intersect with (4,5].
+ */
+ public void intersect1() {
+ TimeRange r1 = new TimeRange(1, 3);
+ TimeRange r2 = new TimeRange(4, 5);
+ r2.setLeftClose(false);
+ assertEquals("[ 1 : 3 ]", r1.toString());
+ assertEquals("( 4 : 5 ]", r2.toString());
+ assertFalse(r1.intersects(r2));
+ assertFalse(r2.intersects(r1));
+ }
+
+ @Test
+ /*
+ * [1,3) does not intersect with (3,5]
+ */
+ public void intersect2() {
+ TimeRange r1 = new TimeRange(1, 3);
+ r1.setRightClose(false);
+ TimeRange r2 = new TimeRange(3, 5);
+ r2.setLeftClose(false);
+ assertEquals("[ 1 : 3 )", r1.toString());
+ assertEquals("( 3 : 5 ]", r2.toString());
+ assertFalse(r1.intersects(r2));
+ assertFalse(r2.intersects(r1));
+ }
+
+ @Test
+ /*
+ * [1,3] does not intersect with [5,6].
+ */
+ public void intersect3() {
+ TimeRange r1 = new TimeRange(1, 3);
+ TimeRange r2 = new TimeRange(5, 6);
+ assertEquals("[ 1 : 3 ]", r1.toString());
+ assertEquals("[ 5 : 6 ]", r2.toString());
+ assertFalse(r1.intersects(r2));
+ assertFalse(r2.intersects(r1));
+ }
+
+ @Test
+ /*
+ * [1,3] intersects with [2,5].
+ */
+ public void intersect4() {
+ TimeRange r1 = new TimeRange(1, 3);
+ TimeRange r2 = new TimeRange(2, 5);
+ assertEquals("[ 1 : 3 ]", r1.toString());
+ assertEquals("[ 2 : 5 ]", r2.toString());
+ assertTrue(r1.intersects(r2));
+ assertTrue(r2.intersects(r1));
+ }
+
+ @Test
+ /*
+ * [1,3] intersects with (3,5].
+ */
+ public void intersect5() {
+ TimeRange r1 = new TimeRange(1, 3);
+ TimeRange r2 = new TimeRange(3, 5);
+ r2.setLeftClose(false);
+ assertEquals("[ 1 : 3 ]", r1.toString());
+ assertEquals("( 3 : 5 ]", r2.toString());
+ assertTrue(r1.intersects(r2));
+ assertTrue(r2.intersects(r1));
+ }
+
+ @Test
+ /*
+ * [1,3) intersects with (2,5].
+ */
+ public void intersect6() {
+ TimeRange r1 = new TimeRange(1, 3);
+ r1.setRightClose(false);
+ TimeRange r2 = new TimeRange(2, 5);
+ r2.setLeftClose(false);
+ assertEquals("[ 1 : 3 )", r1.toString());
+ assertEquals("( 2 : 5 ]", r2.toString());
+ assertTrue(r1.intersects(r2));
+ assertTrue(r2.intersects(r1));
+ }
+
+ @Test
public void mergeTest() {
ArrayList<TimeRange> unionCandidates = new ArrayList<>();
unionCandidates.add(new TimeRange(0L, 10L));
@@ -57,8 +141,8 @@ public class TimeRangeTest {
ArrayList<TimeRange> remainRanges = new
ArrayList<>(r.getRemains(prevRanges));
assertEquals(1, remainRanges.size());
- assertEquals(remainRanges.get(0).getMin(), 1);
- assertEquals(remainRanges.get(0).getMax(), 10);
+ assertEquals(1, remainRanges.get(0).getMin());
+ assertEquals(10, remainRanges.get(0).getMax());
assertTrue(remainRanges.get(0).getLeftClose());
assertTrue(remainRanges.get(0).getRightClose());
}
@@ -90,8 +174,8 @@ public class TimeRangeTest {
ArrayList<TimeRange> remainRanges = new
ArrayList<>(r.getRemains(prevRanges));
assertEquals(1, remainRanges.size());
- assertEquals(remainRanges.get(0).getMin(), 3);
- assertEquals(remainRanges.get(0).getMax(), 10);
+ assertEquals(3, remainRanges.get(0).getMin());
+ assertEquals(10, remainRanges.get(0).getMax());
assertFalse(remainRanges.get(0).getLeftClose());
assertTrue(remainRanges.get(0).getRightClose());
}
@@ -109,8 +193,8 @@ public class TimeRangeTest {
ArrayList<TimeRange> remainRanges = new
ArrayList<>(r.getRemains(prevRanges));
assertEquals(1, remainRanges.size());
- assertEquals(remainRanges.get(0).getMin(), 1);
- assertEquals(remainRanges.get(0).getMax(), 5);
+ assertEquals(1, remainRanges.get(0).getMin());
+ assertEquals(5, remainRanges.get(0).getMax());
assertTrue(remainRanges.get(0).getLeftClose());
assertFalse(remainRanges.get(0).getRightClose());
}
@@ -128,12 +212,12 @@ public class TimeRangeTest {
ArrayList<TimeRange> remainRanges = new
ArrayList<>(r.getRemains(prevRanges));
assertEquals(2, remainRanges.size());
- assertEquals(remainRanges.get(0).getMin(), 1);
- assertEquals(remainRanges.get(0).getMax(), 3);
+ assertEquals(1, remainRanges.get(0).getMin());
+ assertEquals(3, remainRanges.get(0).getMax());
assertTrue(remainRanges.get(0).getLeftClose());
assertFalse(remainRanges.get(0).getRightClose());
- assertEquals(remainRanges.get(1).getMin(), 8);
- assertEquals(remainRanges.get(1).getMax(), 10);
+ assertEquals(8, remainRanges.get(1).getMin());
+ assertEquals(10, remainRanges.get(1).getMax());
assertFalse(remainRanges.get(1).getLeftClose());
assertTrue(remainRanges.get(1).getRightClose());
}
@@ -152,8 +236,8 @@ public class TimeRangeTest {
ArrayList<TimeRange> remainRanges = new
ArrayList<>(r.getRemains(prevRanges));
assertEquals(1, remainRanges.size());
- assertEquals(remainRanges.get(0).getMin(), 5);
- assertEquals(remainRanges.get(0).getMax(), 10);
+ assertEquals(5, remainRanges.get(0).getMin());
+ assertEquals(10, remainRanges.get(0).getMax());
assertFalse(remainRanges.get(0).getLeftClose());
assertTrue(remainRanges.get(0).getRightClose());
}
@@ -171,8 +255,8 @@ public class TimeRangeTest {
ArrayList<TimeRange> remainRanges = new
ArrayList<>(r.getRemains(prevRanges));
assertEquals(1, remainRanges.size());
- assertEquals(remainRanges.get(0).getMin(), 2);
- assertEquals(remainRanges.get(0).getMax(), 10);
+ assertEquals(2, remainRanges.get(0).getMin());
+ assertEquals(10, remainRanges.get(0).getMax());
assertFalse(remainRanges.get(0).getLeftClose());
assertTrue(remainRanges.get(0).getRightClose());
}
@@ -190,8 +274,8 @@ public class TimeRangeTest {
ArrayList<TimeRange> remainRanges = new
ArrayList<>(r.getRemains(prevRanges));
assertEquals(1, remainRanges.size());
- assertEquals(remainRanges.get(0).getMin(), 1);
- assertEquals(remainRanges.get(0).getMax(), 6);
+ assertEquals(1, remainRanges.get(0).getMin());
+ assertEquals(6, remainRanges.get(0).getMax());
assertTrue(remainRanges.get(0).getLeftClose());
assertFalse(remainRanges.get(0).getRightClose());
}
@@ -209,8 +293,8 @@ public class TimeRangeTest {
ArrayList<TimeRange> remainRanges = new
ArrayList<>(r.getRemains(prevRanges));
assertEquals(1, remainRanges.size());
- assertEquals(remainRanges.get(0).getMin(), 1);
- assertEquals(remainRanges.get(0).getMax(), 11);
+ assertEquals(1, remainRanges.get(0).getMin());
+ assertEquals(11, remainRanges.get(0).getMax());
assertTrue(remainRanges.get(0).getLeftClose());
assertFalse(remainRanges.get(0).getRightClose());
}
@@ -228,16 +312,16 @@ public class TimeRangeTest {
ArrayList<TimeRange> remainRanges = new
ArrayList<>(r.getRemains(prevRanges));
assertEquals(3, remainRanges.size());
- assertEquals(remainRanges.get(0).getMin(), 1);
- assertEquals(remainRanges.get(0).getMax(), 3);
+ assertEquals(1, remainRanges.get(0).getMin());
+ assertEquals(3, remainRanges.get(0).getMax());
assertTrue(remainRanges.get(0).getLeftClose());
assertFalse(remainRanges.get(0).getRightClose());
- assertEquals(remainRanges.get(1).getMin(), 4);
- assertEquals(remainRanges.get(1).getMax(), 6);
+ assertEquals(4, remainRanges.get(1).getMin());
+ assertEquals(6, remainRanges.get(1).getMax());
assertFalse(remainRanges.get(1).getLeftClose());
assertFalse(remainRanges.get(1).getRightClose());
- assertEquals(remainRanges.get(2).getMin(), 8);
- assertEquals(remainRanges.get(2).getMax(), 10);
+ assertEquals(8, remainRanges.get(2).getMin());
+ assertEquals(10, remainRanges.get(2).getMax());
assertFalse(remainRanges.get(2).getLeftClose());
assertTrue(remainRanges.get(2).getRightClose());
}
@@ -255,13 +339,32 @@ public class TimeRangeTest {
ArrayList<TimeRange> remainRanges = new
ArrayList<>(r.getRemains(prevRanges));
assertEquals(2, remainRanges.size());
- assertEquals(remainRanges.get(0).getMin(), 1);
- assertEquals(remainRanges.get(0).getMax(), 3);
+ assertEquals(1, remainRanges.get(0).getMin());
+ assertEquals(3, remainRanges.get(0).getMax());
assertTrue(remainRanges.get(0).getLeftClose());
assertFalse(remainRanges.get(0).getRightClose());
- assertEquals(remainRanges.get(1).getMin(), 4);
- assertEquals(remainRanges.get(1).getMax(), 11); // NOTE here is the
technical detail.
+ assertEquals(4, remainRanges.get(1).getMin());
+ assertEquals(11, remainRanges.get(1).getMax()); // NOTE here is the
technical detail.
assertFalse(remainRanges.get(1).getLeftClose());
assertFalse(remainRanges.get(1).getRightClose());
}
+
+ @Test
+ /*
+ current ranges DO NOT overlap with previous ranges.
+ */
+ public void getRemainsTest11() {
+ TimeRange r = new TimeRange(4, 10);
+
+ ArrayList<TimeRange> prevRanges = new ArrayList<>();
+ prevRanges.add(new TimeRange(1, 2));
+
+ ArrayList<TimeRange> remainRanges = new
ArrayList<>(r.getRemains(prevRanges));
+ assertEquals(1, remainRanges.size());
+ assertEquals(4, remainRanges.get(0).getMin());
+ assertEquals(10, remainRanges.get(0).getMax());
+ assertEquals(remainRanges.get(0).getLeftClose(), true);
+ assertEquals(remainRanges.get(0).getRightClose(), true);
+ }
+
}