示例#1
0
            public void VisitRootNode()
            {
                var trie           = new Trie();
                var sut            = new DepthFirstVisitor();
                var expectedAction = new Mock <Action <Node> >();

                sut.Visit(trie.Root, expectedAction.Object);

                expectedAction.Verify(x => x(trie.Root));
            }
示例#2
0
            public IStationFinderStrategy CreateSut(IEnumerable <string> data)
            {
                var trie = new Trie();

                foreach (var station in data)
                {
                    trie.AddWord(station);
                }
                IVisitor visitor = new DepthFirstVisitor();

                return(new TrieBasedStationFinderStrategy(trie, visitor));
            }
示例#3
0
            public void VisitAllNodes()
            {
                var trie = new Trie();

                trie.AddWord("ABER");

                var           sut            = new DepthFirstVisitor();
                var           actual         = new List <Node>();
                Action <Node> expectedAction = x => { actual.Add(x); };

                sut.Visit(trie.Root, expectedAction);

                actual.Select(x => x.Letter).Should().Equal(Trie.RootSymbol, 'A', 'B', 'E', 'R');
            }
示例#4
0
            public void VisitChildNodesInAlphabeticalOrder()
            {
                var trie = new Trie();

                trie.AddWord("A");
                trie.AddWord("AB");
                trie.AddWord("AC");
                trie.AddWord("AD");

                var           sut            = new DepthFirstVisitor();
                var           actual         = new List <Node>();
                Action <Node> expectedAction = x => { actual.Add(x); };

                sut.Visit(trie.Root, expectedAction);

                actual.Select(x => x.Letter).Should().Equal(Trie.RootSymbol, 'A', 'B', 'C', 'D');
            }
示例#5
0
        static void Main(string[] args)
        {
            var rawDataGetter = new RawDataGetter();
            var dataStore     = new DataStore(rawDataGetter);

            var stationsTrie = new Trie();

            foreach (var station in dataStore.GetStations())
            {
                stationsTrie.AddWord(station);
            }

            IVisitor visitor = new DepthFirstVisitor();
            IStationFinderStrategy finderStrategy = new TrieBasedStationFinderStrategy(stationsTrie, visitor);

            if (args.Length > 0)
            {
                if (args.First() == "perf")
                {
                    var basicStrategy = new BasicStationFinderStrategy(dataStore.GetStations());

                    var timedTest = new TimedTest();
                    timedTest.Execute("TrieBased", dataStore, finderStrategy);

                    timedTest = new TimedTest();
                    timedTest.Execute("Basic", dataStore, basicStrategy);
                    return;
                }

                if (args.First() == "basic")
                {
                    Console.WriteLine("[Strategy: Basic]");
                    finderStrategy = new BasicStationFinderStrategy(dataStore.GetStations());
                }
            }

            var finder = new StationFinder(finderStrategy);

            string userInput = "";

            while (true)
            {
                Console.WriteLine("Enter a letter:");
                Console.WriteLine("(or Escape to quit, backspace to delete)");

                var read = Console.ReadKey();

                if (read.Key == ConsoleKey.Escape)
                {
                    break;
                }

                if (read.Key == ConsoleKey.Backspace)
                {
                    if (userInput.Length > 0)
                    {
                        userInput = userInput.Substring(0, userInput.Length - 1);
                    }
                }
                else
                {
                    userInput += read.KeyChar.ToString().ToUpperInvariant();
                }

                var suggestions = finder.GetSuggestions(userInput);

                Console.WriteLine($"\n\nUserInput: {userInput}");
                Console.WriteLine($"NextLetters: {string.Join(" | ", suggestions.NextLetters)}");
                Console.WriteLine($"Stations: {string.Join(" | ", suggestions.Stations)}\n");
            }
        }