public void WhileLoop_2OutOf5AreOnTooLong_IterateOver2Only() { var trace = new List <string>(); //results of turning on/off each and any of the relay var oldAfter = TimeSpan.FromSeconds(1); //pay attention container (repository) is separated from iterator ! STL in C++ and the TRUE POWER!!!! var repo = new RelayRepository(relayList => new RecentlySwitchedOnRelayIterator(relayList, oldAfter)); CreateOnAndStore(repo, 2, trace); Thread.Sleep(TimeSpan.FromSeconds(3)); CreateOnAndStore(repo, 3, trace); //the magic! using IEnumerator <IRelay> iterator = repo.GetEnumerator(); while (iterator.MoveNext()) { var relay = iterator.Current; TurnOff(relay, trace); } Thread.Sleep(TimeSpan.FromSeconds(2)); iterator.Reset(); while (iterator.MoveNext()) { var relay = iterator.Current; TurnOff(relay, trace); } }
private void CreateOnAndStore(RelayRepository repo, int amount, List <string> trace) { for (int i = 0; i < amount; i++) { IRelay r = new Relay(); var theCry = r.On(); repo.Add(r); trace.Add(theCry); _output.WriteLine(theCry); //I am alive! } }
public void ForeachLoop_2OutOf5AreOnTooLong_IterateOver2Only() { var trace = new List <string>(); //results of turning on/off each and any of the relay var oldAfter = TimeSpan.FromSeconds(2); //pay attention container (repository) is separated from iterator ! STL in C++ and the TRUE POWER!!!! var repo = new RelayRepository(relayList => new RecentlySwitchedOnRelayIterator(relayList, oldAfter)); CreateOnAndStore(repo, 2, trace); Thread.Sleep(TimeSpan.FromSeconds(3)); CreateOnAndStore(repo, 3, trace); //the magic! foreach (IRelay relay in repo) { TurnOff(relay, trace); } }