Files
plusone-commons/src/test/java/xyz/zhouxy/plusone/commons/time/QuarterTests.java
2025-04-09 21:44:59 +08:00

349 lines
12 KiB
Java

/*
* Copyright 2024 the original author or authors.
*
* 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
*
* https://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 xyz.zhouxy.plusone.commons.time;
import static org.junit.jupiter.api.Assertions.*;
import java.time.DateTimeException;
import java.time.Month;
import java.time.MonthDay;
import org.junit.jupiter.api.Test;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public
class QuarterTests {
@Test
void testQ1() {
Quarter quarter = Quarter.of(1);
assertSame(Quarter.Q1, quarter);
assertSame(quarter, Quarter.valueOf("Q1"));
assertEquals(1, quarter.getValue());
assertEquals("Q1", quarter.name());
assertThrows(DateTimeException.class, () -> Quarter.of(0));
// ==========
int firstMonthValue = quarter.firstMonthValue();
log.info("firstMonthValue: {}", firstMonthValue);
assertEquals(1, firstMonthValue);
Month firstMonth = quarter.firstMonth();
log.info("firstMonth: {}", firstMonth);
assertEquals(Month.JANUARY, firstMonth);
assertEquals(firstMonthValue, firstMonth.getValue());
// ==========
int lastMonthValue = quarter.lastMonthValue();
log.info("lastMonthValue: {}", lastMonthValue);
assertEquals(3, lastMonthValue);
Month lastMonth = quarter.lastMonth();
log.info("lastMonth: {}", lastMonth);
assertEquals(Month.MARCH, lastMonth);
assertEquals(lastMonthValue, lastMonth.getValue());
// ==========
MonthDay firstMonthDay = quarter.firstMonthDay();
log.info("firstMonthDay: {}", firstMonthDay);
assertEquals(firstMonthDay, MonthDay.of(1, 1));
MonthDay lastMonthDay = quarter.lastMonthDay();
log.info("lastMonthDay: {}", lastMonthDay);
assertEquals(lastMonthDay, MonthDay.of(3, 31));
}
@Test
void testQ2() {
Quarter quarter = Quarter.of(2);
assertSame(Quarter.Q2, quarter);
assertSame(quarter, Quarter.valueOf("Q2"));
assertEquals(2, quarter.getValue());
assertEquals("Q2", quarter.name());
assertThrows(DateTimeException.class, () -> Quarter.of(5));
// ==========
int firstMonthValue = quarter.firstMonthValue();
log.info("firstMonthValue: {}", firstMonthValue);
assertEquals(4, firstMonthValue);
Month firstMonth = quarter.firstMonth();
log.info("firstMonth: {}", firstMonth);
assertEquals(Month.APRIL, firstMonth);
assertEquals(firstMonthValue, firstMonth.getValue());
// ==========
int lastMonthValue = quarter.lastMonthValue();
log.info("lastMonthValue: {}", lastMonthValue);
assertEquals(6, lastMonthValue);
Month lastMonth = quarter.lastMonth();
log.info("lastMonth: {}", lastMonth);
assertEquals(Month.JUNE, lastMonth);
assertEquals(lastMonthValue, lastMonth.getValue());
// ==========
MonthDay firstMonthDay = quarter.firstMonthDay();
log.info("firstMonthDay: {}", firstMonthDay);
assertEquals(firstMonthDay, MonthDay.of(4, 1));
MonthDay lastMonthDay = quarter.lastMonthDay();
log.info("lastMonthDay: {}", lastMonthDay);
assertEquals(lastMonthDay, MonthDay.of(6, 30));
}
@Test
void testQ3() {
Quarter quarter = Quarter.of(3);
assertSame(Quarter.Q3, quarter);
assertSame(quarter, Quarter.valueOf("Q3"));
assertEquals(3, quarter.getValue());
assertEquals("Q3", quarter.name());
assertThrows(IllegalArgumentException.class, () -> Quarter.valueOf("Abc"));
// ==========
int firstMonthValue = quarter.firstMonthValue();
log.info("firstMonthValue: {}", firstMonthValue);
assertEquals(7, firstMonthValue);
Month firstMonth = quarter.firstMonth();
log.info("firstMonth: {}", firstMonth);
assertEquals(Month.JULY, firstMonth);
assertEquals(firstMonthValue, firstMonth.getValue());
// ==========
int lastMonthValue = quarter.lastMonthValue();
log.info("lastMonthValue: {}", lastMonthValue);
assertEquals(9, lastMonthValue);
Month lastMonth = quarter.lastMonth();
log.info("lastMonth: {}", lastMonth);
assertEquals(Month.SEPTEMBER, lastMonth);
assertEquals(lastMonthValue, lastMonth.getValue());
// ==========
MonthDay firstMonthDay = quarter.firstMonthDay();
log.info("firstMonthDay: {}", firstMonthDay);
assertEquals(firstMonthDay, MonthDay.of(7, 1));
MonthDay lastMonthDay = quarter.lastMonthDay();
log.info("lastMonthDay: {}", lastMonthDay);
assertEquals(lastMonthDay, MonthDay.of(9, 30));
}
@Test
void testQ4() {
Quarter quarter = Quarter.of(4);
assertSame(Quarter.Q4, quarter);
assertSame(quarter, Quarter.valueOf("Q4"));
assertEquals(4, quarter.getValue());
assertEquals("Q4", quarter.name());
assertThrows(IllegalArgumentException.class, () -> Quarter.valueOf("Q5"));
// ==========
int firstMonthValue = quarter.firstMonthValue();
log.info("firstMonthValue: {}", firstMonthValue);
assertEquals(10, firstMonthValue);
Month firstMonth = quarter.firstMonth();
log.info("firstMonth: {}", firstMonth);
assertEquals(Month.OCTOBER, firstMonth);
assertEquals(firstMonthValue, firstMonth.getValue());
// ==========
int lastMonthValue = quarter.lastMonthValue();
log.info("lastMonthValue: {}", lastMonthValue);
assertEquals(12, lastMonthValue);
Month lastMonth = quarter.lastMonth();
log.info("lastMonth: {}", lastMonth);
assertEquals(Month.DECEMBER, lastMonth);
assertEquals(lastMonthValue, lastMonth.getValue());
// ==========
MonthDay firstMonthDay = quarter.firstMonthDay();
log.info("firstMonthDay: {}", firstMonthDay);
assertEquals(firstMonthDay, MonthDay.of(10, 1));
MonthDay lastMonthDay = quarter.lastMonthDay();
log.info("lastMonthDay: {}", lastMonthDay);
assertEquals(lastMonthDay, MonthDay.of(12, 31));
}
@Test
void testFirstDayOfYear() {
int firstDayOfYear;
firstDayOfYear = Quarter.Q1.firstDayOfYear(true);
assertEquals(1, firstDayOfYear);
firstDayOfYear = Quarter.Q1.firstDayOfYear(false);
assertEquals(1, firstDayOfYear);
firstDayOfYear = Quarter.Q2.firstDayOfYear(true);
assertEquals(1 + (31 + 29 + 31), firstDayOfYear);
firstDayOfYear = Quarter.Q2.firstDayOfYear(false);
assertEquals(1 + (31 + 28 + 31), firstDayOfYear);
firstDayOfYear = Quarter.Q3.firstDayOfYear(true);
assertEquals(1 + (31 + 29 + 31) + (30 + 31 + 30), firstDayOfYear);
firstDayOfYear = Quarter.Q3.firstDayOfYear(false);
assertEquals(1 + (31 + 28 + 31) + (30 + 31 + 30), firstDayOfYear);
firstDayOfYear = Quarter.Q4.firstDayOfYear(true);
assertEquals(1 + (31 + 29 + 31) + (30 + 31 + 30) + (31 + 30 + 31), firstDayOfYear);
firstDayOfYear = Quarter.Q4.firstDayOfYear(false);
assertEquals(1 + (31 + 28 + 31) + (30 + 31 + 30) + (31 + 30 + 31), firstDayOfYear);
}
@Test
void testPlusZeroAndPositiveRealNumbers() {
for (int i = 0; i < 100; i += 4) {
assertEquals(Quarter.Q1, Quarter.Q1.plus(i));
assertEquals(Quarter.Q2, Quarter.Q2.plus(i));
assertEquals(Quarter.Q3, Quarter.Q3.plus(i));
assertEquals(Quarter.Q4, Quarter.Q4.plus(i));
}
for (int i = 1; i < 100 + 1; i += 4) {
assertEquals(Quarter.Q2, Quarter.Q1.plus(i));
assertEquals(Quarter.Q3, Quarter.Q2.plus(i));
assertEquals(Quarter.Q4, Quarter.Q3.plus(i));
assertEquals(Quarter.Q1, Quarter.Q4.plus(i));
}
for (int i = 2; i < 100 + 2; i += 4) {
assertEquals(Quarter.Q3, Quarter.Q1.plus(i));
assertEquals(Quarter.Q4, Quarter.Q2.plus(i));
assertEquals(Quarter.Q1, Quarter.Q3.plus(i));
assertEquals(Quarter.Q2, Quarter.Q4.plus(i));
}
for (int i = 3; i < 100 + 3; i += 4) {
assertEquals(Quarter.Q4, Quarter.Q1.plus(i));
assertEquals(Quarter.Q1, Quarter.Q2.plus(i));
assertEquals(Quarter.Q2, Quarter.Q3.plus(i));
assertEquals(Quarter.Q3, Quarter.Q4.plus(i));
}
}
@Test
void testPlusZeroAndNegativeNumber() {
for (int i = 0; i > -100; i -= 4) {
assertEquals(Quarter.Q1, Quarter.Q1.plus(i));
assertEquals(Quarter.Q2, Quarter.Q2.plus(i));
assertEquals(Quarter.Q3, Quarter.Q3.plus(i));
assertEquals(Quarter.Q4, Quarter.Q4.plus(i));
}
for (int i = -1; i > -(100 + 1); i -= 4) {
assertEquals(Quarter.Q4, Quarter.Q1.plus(i));
assertEquals(Quarter.Q1, Quarter.Q2.plus(i));
assertEquals(Quarter.Q2, Quarter.Q3.plus(i));
assertEquals(Quarter.Q3, Quarter.Q4.plus(i));
}
for (int i = -2; i > -(100 + 2); i -= 4) {
assertEquals(Quarter.Q3, Quarter.Q1.plus(i));
assertEquals(Quarter.Q4, Quarter.Q2.plus(i));
assertEquals(Quarter.Q1, Quarter.Q3.plus(i));
assertEquals(Quarter.Q2, Quarter.Q4.plus(i));
}
for (int i = -3; i > -(100 + 3); i -= 4) {
assertEquals(Quarter.Q2, Quarter.Q1.plus(i));
assertEquals(Quarter.Q3, Quarter.Q2.plus(i));
assertEquals(Quarter.Q4, Quarter.Q3.plus(i));
assertEquals(Quarter.Q1, Quarter.Q4.plus(i));
}
}
@Test
void testMinusZeroAndNegativeNumber() {
for (int i = 0; i < 100; i += 4) {
assertEquals(Quarter.Q1, Quarter.Q1.minus(i));
assertEquals(Quarter.Q2, Quarter.Q2.minus(i));
assertEquals(Quarter.Q3, Quarter.Q3.minus(i));
assertEquals(Quarter.Q4, Quarter.Q4.minus(i));
}
for (int i = 1; i < 100 + 1; i += 4) {
assertEquals(Quarter.Q4, Quarter.Q1.minus(i));
assertEquals(Quarter.Q1, Quarter.Q2.minus(i));
assertEquals(Quarter.Q2, Quarter.Q3.minus(i));
assertEquals(Quarter.Q3, Quarter.Q4.minus(i));
}
for (int i = 2; i < 100 + 2; i += 4) {
assertEquals(Quarter.Q3, Quarter.Q1.minus(i));
assertEquals(Quarter.Q4, Quarter.Q2.minus(i));
assertEquals(Quarter.Q1, Quarter.Q3.minus(i));
assertEquals(Quarter.Q2, Quarter.Q4.minus(i));
}
for (int i = 3; i < 100 + 3; i += 4) {
assertEquals(Quarter.Q2, Quarter.Q1.minus(i));
assertEquals(Quarter.Q3, Quarter.Q2.minus(i));
assertEquals(Quarter.Q4, Quarter.Q3.minus(i));
assertEquals(Quarter.Q1, Quarter.Q4.minus(i));
}
}
@Test
void testMinusZeroAndPositiveRealNumbers() {
for (int i = 0; i > -100; i -= 4) {
assertEquals(Quarter.Q1, Quarter.Q1.minus(i));
assertEquals(Quarter.Q2, Quarter.Q2.minus(i));
assertEquals(Quarter.Q3, Quarter.Q3.minus(i));
assertEquals(Quarter.Q4, Quarter.Q4.minus(i));
}
for (int i = -1; i > -(100 + 1); i -= 4) {
assertEquals(Quarter.Q2, Quarter.Q1.minus(i));
assertEquals(Quarter.Q3, Quarter.Q2.minus(i));
assertEquals(Quarter.Q4, Quarter.Q3.minus(i));
assertEquals(Quarter.Q1, Quarter.Q4.minus(i));
}
for (int i = -2; i > -(100 + 2); i -= 4) {
assertEquals(Quarter.Q3, Quarter.Q1.minus(i));
assertEquals(Quarter.Q4, Quarter.Q2.minus(i));
assertEquals(Quarter.Q1, Quarter.Q3.minus(i));
assertEquals(Quarter.Q2, Quarter.Q4.minus(i));
}
for (int i = -3; i > -(100 + 3); i -= 4) {
assertEquals(Quarter.Q4, Quarter.Q1.minus(i));
assertEquals(Quarter.Q1, Quarter.Q2.minus(i));
assertEquals(Quarter.Q2, Quarter.Q3.minus(i));
assertEquals(Quarter.Q3, Quarter.Q4.minus(i));
}
}
}