package com.zy.ai.service;
|
|
import com.zy.ai.domain.autotune.AutoTuneFlowTopologyItem;
|
import com.zy.ai.domain.autotune.AutoTuneStationRuntimeItem;
|
import com.zy.ai.service.impl.FlowTopologySnapshotServiceImpl;
|
import com.zy.asrs.entity.StationFlowCapacity;
|
import org.junit.jupiter.api.Test;
|
|
import java.util.Arrays;
|
import java.util.LinkedHashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
|
class FlowTopologySnapshotServiceImplTest {
|
|
@Test
|
void buildTopologyItemUsesExplicitDirectionAndTargetStation() {
|
FlowTopologySnapshotServiceImpl service = new FlowTopologySnapshotServiceImpl();
|
StationFlowCapacity capacity = capacity(101, "OUT", 3);
|
Map<Integer, List<Integer>> adjacency = new LinkedHashMap<>();
|
adjacency.put(101, Arrays.asList(103, 102));
|
|
AutoTuneFlowTopologyItem item = service.buildTopologyItem(
|
capacity,
|
adjacency,
|
Arrays.asList(runtime(101, 1, 0, 0), runtime(102, 1, 1, 0))
|
);
|
|
assertEquals(101, item.getTargetStationId());
|
assertEquals("OUT", item.getDirection());
|
assertEquals(Arrays.asList(102, 103), item.getUpstreamStationIds());
|
assertEquals(Arrays.asList(102, 103), item.getDownstreamStationIds());
|
assertEquals(Arrays.asList(101, 102, 103), item.getFlowStationIds());
|
}
|
|
@Test
|
void calculateRuntimeCountsUsesOnlyAutoingLoadingAndTaskNo() {
|
FlowTopologySnapshotServiceImpl service = new FlowTopologySnapshotServiceImpl();
|
List<AutoTuneStationRuntimeItem> runtimeItems = Arrays.asList(
|
runtime(101, 0, 0, 0),
|
runtime(102, 1, 1, 0),
|
runtime(103, 1, 0, 9001),
|
runtime(104, 0, 1, 9002)
|
);
|
|
FlowTopologySnapshotServiceImpl.RuntimeCount count = service.calculateRuntimeCount(runtimeItems);
|
|
assertEquals(3, count.getOccupiedCount());
|
assertEquals(2, count.getNonAutoingCount());
|
assertEquals(2, count.getLoadingCount());
|
assertEquals(2, count.getTaskHoldingCount());
|
}
|
|
@Test
|
void findCapacityUsesStationIdAndDirectionCode() {
|
FlowTopologySnapshotServiceImpl service = new FlowTopologySnapshotServiceImpl();
|
List<StationFlowCapacity> capacities = Arrays.asList(
|
capacity(101, "IN", 2),
|
capacity(101, "OUT", 4),
|
capacity(102, "OUT", 8)
|
);
|
|
StationFlowCapacity result = service.findCapacity(capacities, 101, "OUT");
|
|
assertNotNull(result);
|
assertEquals(4, result.getBufferCapacity());
|
assertEquals("OUT", result.getDirectionCode());
|
}
|
|
@Test
|
void flowStationIdsAndCountsAreNotTruncatedByBufferCapacity() {
|
FlowTopologySnapshotServiceImpl service = new FlowTopologySnapshotServiceImpl();
|
StationFlowCapacity capacity = capacity(101, "OUT", 1);
|
Map<Integer, List<Integer>> adjacency = new LinkedHashMap<>();
|
adjacency.put(101, Arrays.asList(104, 102, 103));
|
|
AutoTuneFlowTopologyItem item = service.buildTopologyItem(
|
capacity,
|
adjacency,
|
Arrays.asList(
|
runtime(101, 1, 0, 0),
|
runtime(102, 1, 1, 0),
|
runtime(103, 1, 0, 9001),
|
runtime(104, 0, 0, 0)
|
)
|
);
|
|
assertEquals(Arrays.asList(101, 102, 103, 104), item.getFlowStationIds());
|
assertEquals(2, item.getOccupiedCount());
|
assertEquals(1, item.getLoadingCount());
|
assertEquals(1, item.getTaskHoldingCount());
|
assertEquals(1, item.getNonAutoingCount());
|
assertEquals(0, item.getFreeCount());
|
}
|
|
private StationFlowCapacity capacity(Integer stationId, String directionCode, Integer bufferCapacity) {
|
StationFlowCapacity capacity = new StationFlowCapacity();
|
capacity.setStationId(stationId);
|
capacity.setDirectionCode(directionCode);
|
capacity.setBufferCapacity(bufferCapacity);
|
return capacity;
|
}
|
|
private AutoTuneStationRuntimeItem runtime(Integer stationId, Integer autoing, Integer loading, Integer taskNo) {
|
AutoTuneStationRuntimeItem item = new AutoTuneStationRuntimeItem();
|
item.setStationId(stationId);
|
item.setAutoing(autoing);
|
item.setLoading(loading);
|
item.setTaskNo(taskNo);
|
return item;
|
}
|
}
|