示例#1
0
            private Dictionary <Coords, PathData> GetReachableSpots(Coords start)
            {
                var toReturn = new Dictionary <Coords, PathData>();

                // Let's not worry about optimization yet.  The simple solution might be good enough.
                var reached = new Dictionary <string, PathData>();

                var pathData = new PathData();

                reached.Add(start.ToString(), pathData);
                pathData.Push(Direction.Up);
                GetReachableSpotsRecursive(start.Up(), (PathData)pathData.Clone(), reached);
                pathData.Pop();
                pathData.Push(Direction.Left);
                GetReachableSpotsRecursive(start.Left(), (PathData)pathData.Clone(), reached);
                pathData.Pop();
                pathData.Push(Direction.Right);
                GetReachableSpotsRecursive(start.Right(), (PathData)pathData.Clone(), reached);
                pathData.Pop();
                pathData.Push(Direction.Down);
                GetReachableSpotsRecursive(start.Down(), (PathData)pathData.Clone(), reached);
                pathData.Pop();

                foreach (var key in reached.Keys)
                {
                    var keySplit = key.Split(',');
                    toReturn.Add(new Coords {
                        Row = int.Parse(keySplit[0]), Col = int.Parse(keySplit[1])
                    }, reached[key]);
                }

                return(toReturn);
            }
示例#2
0
        public void Cloned_path_data_should_not_be_same_item()
        {
            var path  = new PathData(page, item);
            var clone = path.Clone();

            clone.ShouldNotBeSameAs(path);
            clone.QueryParameters.ShouldNotBeSameAs(path.QueryParameters);
        }
示例#3
0
            private void GetReachableSpotsRecursive(Coords start, PathData pathSoFar, Dictionary <string, PathData> reached)
            {
                // If this is already in the dictionary, jump out.
                if (reached.Keys.Contains(start.ToString()))
                {
                    if (reached[start.ToString()].CompareTo(pathSoFar) < 0)
                    {
                        return;
                    }
                    else
                    {
                        reached.Remove(start.ToString());
                    }
                }

                reached.Add(start.ToString(), (PathData)pathSoFar.Clone());

                // If we're not on a space, jump out.
                if (GetSpot(start) != Spot.Space)
                {
                    return;
                }

                pathSoFar.Push(Direction.Up);
                GetReachableSpotsRecursive(start.Up(), (PathData)pathSoFar.Clone(), reached);
                pathSoFar.Pop();
                pathSoFar.Push(Direction.Left);
                GetReachableSpotsRecursive(start.Left(), (PathData)pathSoFar.Clone(), reached);
                pathSoFar.Pop();
                pathSoFar.Push(Direction.Right);
                GetReachableSpotsRecursive(start.Right(), (PathData)pathSoFar.Clone(), reached);
                pathSoFar.Pop();
                pathSoFar.Push(Direction.Down);
                GetReachableSpotsRecursive(start.Down(), (PathData)pathSoFar.Clone(), reached);
                pathSoFar.Pop();
            }
示例#4
0
        public void Cloned_path_data_has_same_values()
        {
            var path = new PathData(page, item)
            {
                Action = "hello", Argument = "world", Ignore = true, IsCacheable = false, IsPubliclyAvailable = true, IsRewritable = false, TemplateUrl = "asdf"
            };
            var clone = path.Clone();

            path.Action.ShouldBe(clone.Action);
            path.Argument.ShouldBe(clone.Argument);
            path.CurrentItem.ShouldBe(clone.CurrentItem);
            path.CurrentPage.ShouldBe(clone.CurrentPage);
            path.ID.ShouldBe(clone.ID);
            path.Ignore.ShouldBe(clone.Ignore);
            path.IsCacheable.ShouldBe(clone.IsCacheable);
            path.IsPubliclyAvailable.ShouldBe(clone.IsPubliclyAvailable);
            path.IsRewritable.ShouldBe(clone.IsRewritable);
            path.PageID.ShouldBe(clone.PageID);
            path.Path.ShouldBe(clone.Path);
            path.QueryParameters.Count.ShouldBe(clone.QueryParameters.Count);
            path.StopID.ShouldBe(clone.StopID);
            path.StopItem.ShouldBe(clone.StopItem);
            path.TemplateUrl.ShouldBe(clone.TemplateUrl);
        }