public void HandleClockTickTest() { var arg = new OnClockTickEventArgs { Maker = this.Maker }; Action act = () => OvenManager.HandleClockTick(null, arg); act.Should().NotThrow(); this.Maker.FirstOven.State.Should().Be(OvenState.Off); this.Maker.FirstOven.CurrentTemperature.Should().Be(22); }
/// <summary> /// The handle clock tick. /// </summary> /// <param name="sender"> /// The sender. /// </param> /// <param name="e"> /// The e. /// </param> public void HandleClockTick(object sender, OnClockTickEventArgs e) { var canPulse = (e.Maker.FirstSwitch.State == SwitchState.On && e.Maker.FirstOven.IsWorkingTemperature) || (e.Maker.FirstSwitch.State == SwitchState.Off && e.Maker.FirstConveyor.HasBiscuits); if (!canPulse) { return; } for (var i = 0; i < e.Maker.Settings.RevolutionsPerTick; i++) { this.Pulse(e.Maker); } }
public void HandleHeatingBorderTickTest() { OvenManager.SetState(this.Maker, 232, OvenState.Heating); Switcher.SetSwitch(this.Maker, SwitchState.On); var arg = new OnClockTickEventArgs { Maker = this.Maker }; Action act = () => OvenManager.HandleClockTick(null, arg); act.Should().NotThrow(); this.Maker.FirstOven.State.Should().Be(OvenState.Cooling); this.Maker.FirstOven.CurrentTemperature.Should().Be(240); }
public void HandleOffBiscuitHeatingTickTest() { this.Maker.FirstConveyor.Belt.Add(Biscuit.Create(true, true, false)); OvenManager.SetState(this.Maker, 235, OvenState.Heating); Switcher.SetSwitch(this.Maker, SwitchState.Off); var arg = new OnClockTickEventArgs { Maker = this.Maker }; Action act = () => OvenManager.HandleClockTick(null, arg); act.Should().NotThrow(); this.Maker.FirstOven.State.Should().Be(OvenState.Cooling); this.Maker.FirstOven.CurrentTemperature.Should().Be(240); }
/// <summary> /// The handle clock tick. /// </summary> /// <param name="sender"> /// The sender. /// </param> /// <param name="e"> /// The e. /// </param> /// <exception cref="ArgumentException"> /// If unknown state is presented. Should not happen /// </exception> public static void HandleClockTick(object sender, OnClockTickEventArgs e) { var settings = e.Maker.Settings; var oven = e.Maker.FirstOven; var button = e.Maker.FirstSwitch; var conveyor = e.Maker.FirstConveyor; var newTemperature = 0; var heatPeak = 0; var state = button.State == SwitchState.Off && !conveyor.HasBiscuits ? OvenState.Off : oven.State; var newState = oven.State; switch (state) { case OvenState.Heating: heatPeak = oven.CurrentTemperature + settings.OvenHeatingRate; newTemperature = Math.Min(heatPeak, settings.OvenMaxTemp); if (heatPeak >= settings.OvenMaxTemp) { newState = OvenState.Cooling; } break; case OvenState.Cooling: heatPeak = oven.CurrentTemperature - settings.OvenCoolingRate; newTemperature = Math.Max(heatPeak, settings.OvenMinTemp); if (heatPeak <= settings.OvenMinTemp) { newState = OvenState.Heating; } break; case OvenState.Off: heatPeak = oven.CurrentTemperature - settings.OvenCoolingRate; newTemperature = Math.Max(heatPeak, settings.RoomTemperature); newState = OvenState.Off; break; default: throw new ArgumentException("Unknown Oven State"); } OvenManager.SetState(e.Maker, newTemperature, newState); }
public void HandleOnInWorkTempClockTickTest() { Switcher.SetSwitch(this.Maker, SwitchState.On); OvenManager.SetState(this.Maker, 220, OvenState.Heating); var hasPulsed = false; var motor = new Motor(); var arg = new OnClockTickEventArgs { Maker = this.Maker }; motor.RaisePulse += (s, e) => hasPulsed = true; Action act = () => motor.HandleClockTick(null, arg); act.Should().NotThrow(); hasPulsed.Should().BeTrue(); }
public void HandleOffWithBiscuitClockTickTest() { Switcher.SetSwitch(this.Maker, SwitchState.Off); OvenManager.SetState(this.Maker, 220, OvenState.Heating); this.Maker.FirstConveyor.Belt.Add(Biscuit.Create(true, true, false)); var hasPulsed = false; var motor = new Motor(); var arg = new OnClockTickEventArgs { Maker = this.Maker }; motor.RaisePulse += (s, e) => hasPulsed = true; Action act = () => motor.HandleClockTick(null, arg); act.Should().NotThrow(); hasPulsed.Should().BeTrue(); }