public void ItTurnLightRedAtCrossingStation() { //Given var signalS0 = new Signal() {Name = "S0", Light = Light.GREEN}; var track = new Track(signalS0); //When track.TrainCrosses(signalS0); //Then Assert.AreEqual(Light.RED, signalS0.Light); }
public void ItTurnLightYellowAtLastStation() { //Given var signalS0 = new Signal() { Name = "S0", Light = Light.RED }; var signalS1 = new Signal() { Name = "S1", Light = Light.GREEN }; var track = new Track(signalS0, signalS1); //When track.TrainCrosses(signalS1); //Then Assert.AreEqual(Light.YELLOW, signalS0.Light); }
public void ItTurnLightDoubleYellowTwoStationBack() { //Given var signalS0 = new Signal() { Name = "S0", Light = Light.YELLOW }; var signalS1 = new Signal() { Name = "S1", Light = Light.RED }; var signalS2 = new Signal() { Name = "S2", Light = Light.GREEN }; var track = new Track(signalS0, signalS1, signalS2); //When track.TrainCrosses(signalS2); //Then Assert.AreEqual(Light.DOUBLE_YELLOW, signalS0.Light); }
private List<Signal> GetTailingSignalsFrom(Signal currentSignal) { var endIndex = Signals.IndexOf(currentSignal); var startIndex = endIndex - MIN_BLOCKS >= 0 ? endIndex - MIN_BLOCKS : 0; return Signals.GetRange(startIndex, endIndex + 1); }
public void TrainCrosses(Signal currentSignal) { GetTailingSignalsFrom(currentSignal).ForEach(signal => signal.ToggleLight()); }