private static FirewallLayer[] _getLayersFromString(string input) { IEnumerable <string> lines = input.Split("\n", StringSplitOptions.RemoveEmptyEntries); Dictionary <int, int> parsed = lines .Select(x => x.Trim().Split(": ", StringSplitOptions.RemoveEmptyEntries)) .Select(pairs => (Int32.Parse(pairs[0]), Int32.Parse(pairs[1]))) .ToDictionary(x => x.Item1, x => x.Item2); var lastIndex = parsed.Last().Key; List <FirewallLayer> layers = new List <FirewallLayer>(); for (int i = 0; i < lastIndex + 1; i++) { FirewallLayer layer; if (parsed.ContainsKey(i)) { layer = new FirewallLayer(parsed[i], true); } else { layer = new FirewallLayer(1, false); } layers.Add(layer); } return(layers.ToArray()); }
public void MoveScannerCorrectly() { FirewallLayer layer = new FirewallLayer(3, true); Assert.False(layer.SafeAtTime(0)); Assert.True(layer.SafeAtTime(1)); Assert.False(layer.SafeAtTime(4)); }
public void MoveScannerWhenLengthIsTwo() { FirewallLayer layer = new FirewallLayer(2, true); Assert.False(layer.SafeAtTime(0)); Assert.True(layer.SafeAtTime(1)); Assert.False(layer.SafeAtTime(2)); }
public void CaclculateSafetyAtGivenTime() { FirewallLayer layer = new FirewallLayer(4, true); Assert.False(layer.SafeAtTime(0)); Assert.True(layer.SafeAtTime(1)); Assert.True(layer.SafeAtTime(2)); Assert.True(layer.SafeAtTime(3)); Assert.True(layer.SafeAtTime(4)); Assert.True(layer.SafeAtTime(5)); Assert.False(layer.SafeAtTime(6)); Assert.True(layer.SafeAtTime(7)); FirewallLayer layerWithoutScanner = new FirewallLayer(2, false); Assert.True(layerWithoutScanner.SafeAtTime(0)); Assert.True(layerWithoutScanner.SafeAtTime(100)); }