mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-07-21 15:09:48 +08:00
修复DateUtil.rangeContains未重置问题(issue#IB8OFS@gitee)
This commit is contained in:
@@ -25,6 +25,7 @@ import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
public class Issue3081Test {
|
||||
@@ -35,10 +36,10 @@ public class Issue3081Test {
|
||||
final Date end = DateUtil.parse("2023-04-25 00:00:00");
|
||||
|
||||
final DateRange dateTimes = new DateRange(start, end, DateField.DAY_OF_MONTH, 30, true, true);
|
||||
|
||||
final Iterator<DateTime> iterator = dateTimes.iterator();
|
||||
final List<DateTime> dateTimeList = new ArrayList<>();
|
||||
while (dateTimes.hasNext()) {
|
||||
dateTimeList.add(dateTimes.next());
|
||||
while (iterator.hasNext()) {
|
||||
dateTimeList.add(iterator.next());
|
||||
}
|
||||
Assertions.assertEquals(4, dateTimeList.size());
|
||||
|
||||
|
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Copyright (c) 2024 Hutool Team and hutool.cn
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.dromara.hutool.core.date;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class IssueIB8OFSTest {
|
||||
@Test
|
||||
void rangeTest() {
|
||||
DateRange startRange = DateUtil.range(
|
||||
DateUtil.parse("2017-01-01"),
|
||||
DateUtil.parse("2017-01-31"), DateField.DAY_OF_YEAR);
|
||||
DateRange endRange = DateUtil.range(
|
||||
DateUtil.parse("2017-01-31"),
|
||||
DateUtil.parse("2017-02-02"), DateField.DAY_OF_YEAR);
|
||||
|
||||
List<DateTime> dateTimes = DateUtil.rangeContains(startRange, endRange);
|
||||
System.out.println("交集: ");
|
||||
dateTimes.forEach(System.out::println);
|
||||
|
||||
List<DateTime> dateNotTimes = DateUtil.rangeNotContains(startRange, endRange);
|
||||
System.out.println("差集: ");
|
||||
dateNotTimes.forEach(System.out::println);
|
||||
}
|
||||
}
|
@@ -25,6 +25,7 @@ import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.NoSuchElementException;
|
||||
|
||||
@@ -47,11 +48,12 @@ public class RangeTest {
|
||||
return current.offsetNew(DateField.DAY_OF_YEAR, 1);
|
||||
});
|
||||
|
||||
Assertions.assertTrue(range.hasNext());
|
||||
Assertions.assertEquals(DateUtil.parse("2017-01-01"), range.next());
|
||||
Assertions.assertTrue(range.hasNext());
|
||||
Assertions.assertEquals(DateUtil.parse("2017-01-02"), range.next());
|
||||
Assertions.assertFalse(range.hasNext());
|
||||
final Iterator<DateTime> iterator = range.iterator();
|
||||
Assertions.assertTrue(iterator.hasNext());
|
||||
Assertions.assertEquals(DateUtil.parse("2017-01-01"), iterator.next());
|
||||
Assertions.assertTrue(iterator.hasNext());
|
||||
Assertions.assertEquals(DateUtil.parse("2017-01-02"), iterator.next());
|
||||
Assertions.assertFalse(iterator.hasNext());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -86,23 +88,24 @@ public class RangeTest {
|
||||
final Date end = DateUtil.parse("2021-03-31");
|
||||
|
||||
final DateRange range = DateUtil.range(start, end, DateField.MONTH);
|
||||
|
||||
Assertions.assertTrue(range.hasNext());
|
||||
Assertions.assertEquals(DateUtil.parse("2021-01-31"), range.next());
|
||||
Assertions.assertTrue(range.hasNext());
|
||||
Assertions.assertEquals(DateUtil.parse("2021-02-28"), range.next());
|
||||
Assertions.assertTrue(range.hasNext());
|
||||
Assertions.assertEquals(DateUtil.parse("2021-03-31"), range.next());
|
||||
Assertions.assertFalse(range.hasNext());
|
||||
final Iterator<DateTime> iterator = range.iterator();
|
||||
Assertions.assertTrue(iterator.hasNext());
|
||||
Assertions.assertEquals(DateUtil.parse("2021-01-31"), iterator.next());
|
||||
Assertions.assertTrue(iterator.hasNext());
|
||||
Assertions.assertEquals(DateUtil.parse("2021-02-28"), iterator.next());
|
||||
Assertions.assertTrue(iterator.hasNext());
|
||||
Assertions.assertEquals(DateUtil.parse("2021-03-31"), iterator.next());
|
||||
Assertions.assertFalse(iterator.hasNext());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void intRangeTest() {
|
||||
final Range<Integer> range = new Range<>(1, 1, (current, end, index) -> current >= end ? null : current + 10);
|
||||
final Iterator<Integer> iterator = range.iterator();
|
||||
|
||||
Assertions.assertTrue(range.hasNext());
|
||||
Assertions.assertEquals(Integer.valueOf(1), range.next());
|
||||
Assertions.assertFalse(range.hasNext());
|
||||
Assertions.assertTrue(iterator.hasNext());
|
||||
Assertions.assertEquals(Integer.valueOf(1), iterator.next());
|
||||
Assertions.assertFalse(iterator.hasNext());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -112,19 +115,21 @@ public class RangeTest {
|
||||
|
||||
// 测试包含开始和结束情况下步进为1的情况
|
||||
DateRange range = DateUtil.range(start, end, DateField.DAY_OF_YEAR);
|
||||
Assertions.assertEquals(range.next(), DateUtil.parse("2017-01-01"));
|
||||
Assertions.assertEquals(range.next(), DateUtil.parse("2017-01-02"));
|
||||
Assertions.assertEquals(range.next(), DateUtil.parse("2017-01-03"));
|
||||
Iterator<DateTime> iterator = range.iterator();
|
||||
Assertions.assertEquals(iterator.next(), DateUtil.parse("2017-01-01"));
|
||||
Assertions.assertEquals(iterator.next(), DateUtil.parse("2017-01-02"));
|
||||
Assertions.assertEquals(iterator.next(), DateUtil.parse("2017-01-03"));
|
||||
try {
|
||||
range.next();
|
||||
iterator.next();
|
||||
Assertions.fail("已超过边界,下一个元素不应该存在!");
|
||||
} catch (final NoSuchElementException ignored) {
|
||||
}
|
||||
|
||||
// 测试多步进的情况
|
||||
range = new DateRange(start, end, DateField.DAY_OF_YEAR, 2);
|
||||
Assertions.assertEquals(DateUtil.parse("2017-01-01"), range.next());
|
||||
Assertions.assertEquals(DateUtil.parse("2017-01-03"), range.next());
|
||||
iterator = range.iterator();
|
||||
Assertions.assertEquals(DateUtil.parse("2017-01-01"), iterator.next());
|
||||
Assertions.assertEquals(DateUtil.parse("2017-01-03"), iterator.next());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -134,11 +139,12 @@ public class RangeTest {
|
||||
|
||||
// 测试不包含开始结束时间的情况
|
||||
final DateRange range = new DateRange(start, end, DateField.DAY_OF_YEAR, 1, false, false);
|
||||
Assertions.assertEquals(DateUtil.parse("2017-01-02"), range.next());
|
||||
Assertions.assertEquals(DateUtil.parse("2017-01-03"), range.next());
|
||||
Assertions.assertEquals(DateUtil.parse("2017-01-04"), range.next());
|
||||
final Iterator<DateTime> iterator = range.iterator();
|
||||
Assertions.assertEquals(DateUtil.parse("2017-01-02"), iterator.next());
|
||||
Assertions.assertEquals(DateUtil.parse("2017-01-03"), iterator.next());
|
||||
Assertions.assertEquals(DateUtil.parse("2017-01-04"), iterator.next());
|
||||
try {
|
||||
range.next();
|
||||
iterator.next();
|
||||
Assertions.fail("不包含结束时间情况下,下一个元素不应该存在!");
|
||||
} catch (final NoSuchElementException ignored) {
|
||||
}
|
||||
|
Reference in New Issue
Block a user