mirror of
https://github.com/davidalves04/Trabalho-Pratico-SD.git
synced 2025-12-08 20:43:32 +00:00
moved start to dashboard + fixed holding queue - looped sleep might be fine in this case + better customization via CSS file
This commit is contained in:
@@ -44,7 +44,7 @@ public class TrafficLightCoordinationTest {
|
||||
@Test
|
||||
public void testOnlyOneGreenLightAtATime() throws InterruptedException {
|
||||
System.out.println("\n=== Testing Traffic Light Mutual Exclusion ===");
|
||||
|
||||
|
||||
// Start the intersection
|
||||
Thread intersectionThread = new Thread(() -> {
|
||||
try {
|
||||
@@ -59,55 +59,55 @@ public class TrafficLightCoordinationTest {
|
||||
AtomicInteger maxGreenSimultaneously = new AtomicInteger(0);
|
||||
AtomicInteger violationCount = new AtomicInteger(0);
|
||||
List<String> violations = new ArrayList<>();
|
||||
|
||||
|
||||
// Monitor for 10 seconds
|
||||
long endTime = System.currentTimeMillis() + 10000;
|
||||
|
||||
|
||||
while (System.currentTimeMillis() < endTime) {
|
||||
int greenCount = 0;
|
||||
StringBuilder currentState = new StringBuilder("States: ");
|
||||
|
||||
|
||||
for (TrafficLight light : intersectionProcess.getIntersection().getTrafficLights()) {
|
||||
TrafficLightState state = light.getState();
|
||||
currentState.append(light.getDirection()).append("=").append(state).append(" ");
|
||||
|
||||
|
||||
if (state == TrafficLightState.GREEN) {
|
||||
greenCount++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Update maximum simultaneous green lights
|
||||
if (greenCount > maxGreenSimultaneously.get()) {
|
||||
maxGreenSimultaneously.set(greenCount);
|
||||
}
|
||||
|
||||
|
||||
// Check for violations (more than one green)
|
||||
if (greenCount > 1) {
|
||||
violationCount.incrementAndGet();
|
||||
String violation = String.format("[VIOLATION] %d lights GREEN simultaneously: %s",
|
||||
greenCount, currentState.toString());
|
||||
String violation = String.format("[VIOLATION] %d lights GREEN simultaneously: %s",
|
||||
greenCount, currentState.toString());
|
||||
violations.add(violation);
|
||||
System.err.println(violation);
|
||||
}
|
||||
|
||||
|
||||
Thread.sleep(50); // Check every 50ms
|
||||
}
|
||||
|
||||
|
||||
System.out.println("\n=== Test Results ===");
|
||||
System.out.println("Maximum simultaneous GREEN lights: " + maxGreenSimultaneously.get());
|
||||
System.out.println("Total violations detected: " + violationCount.get());
|
||||
|
||||
|
||||
if (!violations.isEmpty()) {
|
||||
System.err.println("\nViolation details:");
|
||||
violations.forEach(System.err::println);
|
||||
}
|
||||
|
||||
|
||||
// Assert that we never had more than one green light
|
||||
assertEquals(0, violationCount.get(),
|
||||
"Traffic light coordination violated! Multiple lights were GREEN simultaneously.");
|
||||
assertTrue(maxGreenSimultaneously.get() <= 1,
|
||||
"At most ONE light should be GREEN at any time. Found: " + maxGreenSimultaneously.get());
|
||||
|
||||
assertEquals(0, violationCount.get(),
|
||||
"Traffic light coordination violated! Multiple lights were GREEN simultaneously.");
|
||||
assertTrue(maxGreenSimultaneously.get() <= 1,
|
||||
"At most ONE light should be GREEN at any time. Found: " + maxGreenSimultaneously.get());
|
||||
|
||||
System.out.println("\nTraffic light coordination working correctly!");
|
||||
}
|
||||
|
||||
@@ -118,7 +118,7 @@ public class TrafficLightCoordinationTest {
|
||||
@Test
|
||||
public void testAllLightsGetGreenTime() throws InterruptedException {
|
||||
System.out.println("\n=== Testing Traffic Light Fairness ===");
|
||||
|
||||
|
||||
// Start the intersection
|
||||
Thread intersectionThread = new Thread(() -> {
|
||||
try {
|
||||
@@ -132,10 +132,10 @@ public class TrafficLightCoordinationTest {
|
||||
// Track which lights have been green
|
||||
List<TrafficLight> lights = intersectionProcess.getIntersection().getTrafficLights();
|
||||
boolean[] hasBeenGreen = new boolean[lights.size()];
|
||||
|
||||
// Monitor for 15 seconds (enough time for all lights to cycle)
|
||||
long endTime = System.currentTimeMillis() + 15000;
|
||||
|
||||
|
||||
// Monitor for 60 seconds (enough time for all lights to cycle: 18+18+12 = 48s)
|
||||
long endTime = System.currentTimeMillis() + 60000;
|
||||
|
||||
while (System.currentTimeMillis() < endTime) {
|
||||
for (int i = 0; i < lights.size(); i++) {
|
||||
if (lights.get(i).getState() == TrafficLightState.GREEN) {
|
||||
@@ -145,16 +145,17 @@ public class TrafficLightCoordinationTest {
|
||||
}
|
||||
Thread.sleep(100);
|
||||
}
|
||||
|
||||
|
||||
// Check if all lights got green time
|
||||
int greenCount = 0;
|
||||
System.out.println("\n=== Fairness Results ===");
|
||||
for (int i = 0; i < lights.size(); i++) {
|
||||
String status = hasBeenGreen[i] ? "✓ YES" : "✗ NO";
|
||||
System.out.println(lights.get(i).getDirection() + " got GREEN time: " + status);
|
||||
if (hasBeenGreen[i]) greenCount++;
|
||||
if (hasBeenGreen[i])
|
||||
greenCount++;
|
||||
}
|
||||
|
||||
|
||||
assertTrue(greenCount > 0, "At least one light should have been GREEN during the test");
|
||||
System.out.println("\n" + greenCount + "/" + lights.size() + " lights were GREEN during test period");
|
||||
}
|
||||
@@ -165,7 +166,7 @@ public class TrafficLightCoordinationTest {
|
||||
@Test
|
||||
public void testStateTransitionsAreConsistent() throws InterruptedException {
|
||||
System.out.println("\n=== Testing State Transition Consistency ===");
|
||||
|
||||
|
||||
Thread intersectionThread = new Thread(() -> {
|
||||
try {
|
||||
intersectionProcess.start();
|
||||
@@ -177,29 +178,29 @@ public class TrafficLightCoordinationTest {
|
||||
|
||||
List<TrafficLight> lights = intersectionProcess.getIntersection().getTrafficLights();
|
||||
TrafficLightState[] previousStates = new TrafficLightState[lights.size()];
|
||||
|
||||
|
||||
// Initialize previous states
|
||||
for (int i = 0; i < lights.size(); i++) {
|
||||
previousStates[i] = lights.get(i).getState();
|
||||
}
|
||||
|
||||
|
||||
int transitionCount = 0;
|
||||
long endTime = System.currentTimeMillis() + 8000;
|
||||
|
||||
|
||||
while (System.currentTimeMillis() < endTime) {
|
||||
for (int i = 0; i < lights.size(); i++) {
|
||||
TrafficLightState currentState = lights.get(i).getState();
|
||||
|
||||
|
||||
if (currentState != previousStates[i]) {
|
||||
transitionCount++;
|
||||
System.out.println(lights.get(i).getDirection() + " transitioned: " +
|
||||
previousStates[i] + " → " + currentState);
|
||||
System.out.println(lights.get(i).getDirection() + " transitioned: " +
|
||||
previousStates[i] + " → " + currentState);
|
||||
previousStates[i] = currentState;
|
||||
}
|
||||
}
|
||||
Thread.sleep(100);
|
||||
}
|
||||
|
||||
|
||||
System.out.println("\nTotal state transitions observed: " + transitionCount);
|
||||
assertTrue(transitionCount > 0, "There should be state transitions during the test period");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user