package cn.iocoder.yudao.module.mes.service.pro.task.schedule; import org.junit.jupiter.api.Test; import java.math.BigDecimal; import java.util.Map; import static org.junit.jupiter.api.Assertions.*; class MesScheduleMaterialCheckTest { @Test void oneBatchCannotUseSameStockTwice() { var stock = Map.of(1L, new BigDecimal("10")); var first = MesScheduleMaterialCheck.allocate(stock, Map.of(1L, new BigDecimal("6"))); assertEquals(0, first.get(1L).compareTo(new BigDecimal("4"))); assertThrows(IllegalArgumentException.class, () -> MesScheduleMaterialCheck.allocate(first, Map.of(1L, new BigDecimal("5")))); assertEquals(0, stock.get(1L).compareTo(new BigDecimal("10"))); } @Test void shortageOrInvalidRequirementIsRejected() { assertThrows(IllegalArgumentException.class, () -> MesScheduleMaterialCheck.allocate(Map.of(), Map.of(2L, BigDecimal.ONE))); assertThrows(IllegalArgumentException.class, () -> MesScheduleMaterialCheck.allocate(Map.of(2L, BigDecimal.TEN), Map.of(2L, BigDecimal.ZERO))); } @Test void sufficientStockCanBeAllocated() { assertEquals(0, MesScheduleMaterialCheck.allocate(Map.of(2L, BigDecimal.TEN), Map.of(2L, BigDecimal.TEN)).get(2L).signum()); } }