| | |
| | | void formatsTableRatiosAsSignedPercentages() throws Exception { |
| | | HolidayBulletinService service = new HolidayBulletinService(null); |
| | | |
| | | assertEquals("-4.7%", ratio(service, "95.3", "100")); |
| | | assertEquals("1.0%", ratio(service, "101", "100")); |
| | | assertEquals("0%", ratio(service, "100", "100")); |
| | | assertEquals("0%", ratio(service, "10004", "10000")); |
| | | assertEquals("—", ratio(service, "100", null)); |
| | | assertEquals("—", ratio(service, "100", "0")); |
| | | assertEquals("-4.7%", ratio(service, "95.3", "100", 1)); |
| | | assertEquals("-4.4%", ratio(service, "95.551398", "100", 1)); |
| | | assertEquals("-4.5%", ratio(service, "95.551398", "100", 2)); |
| | | assertEquals("-0.1%", ratio(service, "99.955", "100", 2)); |
| | | assertEquals("0%", ratio(service, "99.955", "100", 1)); |
| | | assertEquals("1.0%", ratio(service, "101", "100", 1)); |
| | | assertEquals("0%", ratio(service, "100", "100", 1)); |
| | | assertEquals("0%", ratio(service, "10004", "10000", 1)); |
| | | assertEquals("—", ratio(service, "100", null, 1)); |
| | | assertEquals("—", ratio(service, "100", "0", 1)); |
| | | } |
| | | |
| | | @Test |
| | |
| | | verify(stat, never()).cumulativeMetrics(0, "NATIONAL_DAY", 1); |
| | | } |
| | | |
| | | @Test |
| | | void cumulativeParagraphUsesExcelDisplayThenBulletinRounding() throws Exception { |
| | | HolidayBulletinService service = new HolidayBulletinService(null); |
| | | |
| | | DailyMetrics current = new DailyMetrics(); |
| | | current.setTotalPersonFlow(new BigDecimal("3088.62958")); |
| | | DailyMetrics previousYear = new DailyMetrics(); |
| | | previousYear.setTotalPersonFlow(new BigDecimal("3232.42742")); |
| | | DailyMetrics twoYearsAgo = new DailyMetrics(); |
| | | twoYearsAgo.setTotalPersonFlow(new BigDecimal("3137.80860")); |
| | | |
| | | Method method = HolidayBulletinService.class.getDeclaredMethod( |
| | | "cumulativeParagraph", DailyMetrics.class, DailyMetrics.class, DailyMetrics.class); |
| | | method.setAccessible(true); |
| | | String text = (String) method.invoke(service, current, previousYear, twoYearsAgo); |
| | | |
| | | assertEquals( |
| | | "假期以来,全省全社会跨区域人员流动量累计3088.63万人次,比2025年同期下降4.5%,比2024年同期下降1.6%。", |
| | | text); |
| | | } |
| | | |
| | | private Object comparableCumulative(HolidayBulletinService service, DailyMetrics current, |
| | | DailyMetrics comparisonYear, |
| | | Function<DailyMetrics, BigDecimal> selector) throws Exception { |
| | |
| | | return method.invoke(service, current, comparisonYear, selector); |
| | | } |
| | | |
| | | private String ratio(HolidayBulletinService service, String current, String base) throws Exception { |
| | | Method method = HolidayBulletinService.class.getDeclaredMethod("ratio", BigDecimal.class, BigDecimal.class); |
| | | private String ratio(HolidayBulletinService service, String current, String base, |
| | | int excelPercentScale) throws Exception { |
| | | Method method = HolidayBulletinService.class.getDeclaredMethod( |
| | | "ratio", BigDecimal.class, BigDecimal.class, int.class); |
| | | method.setAccessible(true); |
| | | BigDecimal currentValue = current == null ? null : new BigDecimal(current); |
| | | BigDecimal baseValue = base == null ? null : new BigDecimal(base); |
| | | return (String) method.invoke(service, currentValue, baseValue); |
| | | return (String) method.invoke(service, currentValue, baseValue, excelPercentScale); |
| | | } |
| | | } |