@@ -0,0 +1,3603 @@
+package com.google.research.bleth.simulator;%0A%0Aimport org.junit.Test;%0A%0Aimport static com.google.common.truth.Truth.assertThat;%0A%0Apublic class TracingSimulationTest %7B%0A%0A    public final MovementStrategy moveUp = new moveUp();%0A    public final MovementStrategy stationary = new StationaryMovementStrategy();%0A%0A    private static final String simulationId = %22test-sim-id-1%22;%0A    private static final int maxRoundsEqualsTwo = 2;%0A    private static final int numberOfBeaconsEqualsTwo = 2;%0A    private static final int numberOfObserversEqualsZero = 0;%0A%0A    private static final int awakenessCycleEqualsTwo = 2;%0A    private static final double radiusEqualsOne = 1.0;%0A%0A    public class moveUp implements MovementStrategy %7B%0A%0A        @Override%0A        public Location moveTo(Board board, Location currentLocation) %7B%0A            Location newLocation = currentLocation.moveInDirection(Direction.UP);%0A            if (board.isLocationValid(newLocation)) %7B%0A                return newLocation;%0A            %7D%0A            return currentLocation;%0A        %7D%0A    %7D%0A%0A    public Board buildExpectedBoard(Board originalBoard, int rowNum, int colNum) %7B%0A%0A        Board expectedBoard = new Board(rowNum, colNum);%0A        for (int row = 0; row %3C rowNum; row++) %7B%0A            for (int col = 0; col %3C colNum; col++) %7B%0A                for (Agent agent : originalBoard.getAgentsOnLocation(new Location(row, col))) %7B%0A                    expectedBoard.placeAgent(agent.moveTo(), agent);%0A                %7D%0A            %7D%0A        %7D%0A%0A        return expectedBoard;%0A    %7D%0A%0A    public boolean boardsEqual(Board actual, Board expected, int rowNum, int colNum) %7B%0A        for (int row = 0; row %3C rowNum; row++) %7B%0A            for (int col = 0; col %3C colNum; col++) %7B%0A                Location loc = new Location(row, col);%0A                if (!actual.getAgentsOnLocation(loc).equals(expected.getAgentsOnLocation(loc))) %7B%0A                    return false;%0A                %7D%0A            %7D%0A        %7D%0A        return true;%0A    %7D%0A%0A    @Test%0A    public void initializeTwoBeaconsBeaconsContainerShouldEqualTwo() %7B%0A        TracingSimulation simulation = new TracingSimulation%0A                (simulationId, maxRoundsEqualsTwo, 2, 2, numberOfBeaconsEqualsTwo,%0A                 numberOfObserversEqualsZero, awakenessCycleEqualsTwo, radiusEqualsOne, moveUp, stationary);%0A%0A        simulation.initializeBeacons();%0A%0A        assertThat(simulation.getBeacons().size()).isEqualTo(2);%0A    %7D%0A%0A    @Test%0A    public void runSimulationWithMaxRoundNumberTwoCurrentRoundNumberShouldBeTwo() %7B%0A        TracingSimulation simulation = new TracingSimulation%0A                (simulationId, maxRoundsEqualsTwo, 2, 2, numberOfBeaconsEqualsTwo,%0A                        numberOfObserversEqualsZero, awakenessCycleEqualsTwo, radiusEqualsOne, moveUp, stationary);%0A%0A        simulation.run();%0A%0A        assertThat(simulation.currentRound).isEqualTo(2);%0A    %7D%0A%0A    @Test%0A    public void moveAgentsDeterministicMovementStrategyBoardShouldEqualExpectedBoard() %7B%0A        TracingSimulation simulation = new TracingSimulation%0A                (simulationId, maxRoundsEqualsTwo, 2, 2, numberOfBeaconsEqualsTwo,%0A                        numberOfObserversEqualsZero, awakenessCycleEqualsTwo, radiusEqualsOne, moveUp, stationary);%0A        Board boardWhenSimulationInitialized = simulation.getBoard();%0A        Board expectedBoardAfterSingleRound = buildExpectedBoard(boardWhenSimulationInitialized, 2, 2);%0A%0A        simulation.moveAgents();%0A        Board boardAfterMovement = simulation.getBoard();%0A%0A        assertThat(boardsEqual(boardAfterMovement, expectedBoardAfterSingleRound, 2, 2)).isTrue();%0A    %7D%0A%7D%0A

add tracing simulation test cases.