Exemple #1
0
        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));
        }