public void SortThreeWords()
            {
                PuzParser parser      = new PuzParser();
                var       wordsToSort = new List <CrosswordPuzzleEntry>
                {
                    new CrosswordPuzzleEntry()
                    {
                        IndexInSingleString = 1, Direction = CrosswordDirection.Across, Word = "third"
                    },
                    new CrosswordPuzzleEntry()
                    {
                        IndexInSingleString = 0, Direction = CrosswordDirection.Down, Word = "second"
                    },
                    new CrosswordPuzzleEntry()
                    {
                        IndexInSingleString = 0, Direction = CrosswordDirection.Across, Word = "first"
                    }
                };

                var actualSortedWords = parser.NumberWordsFromGrid(wordsToSort);

                Assert.AreEqual("first", actualSortedWords[0].Word);
                Assert.AreEqual(1, actualSortedWords[0].ClueNumber);
                Assert.AreEqual("second", actualSortedWords[1].Word);
                Assert.AreEqual(1, actualSortedWords[1].ClueNumber);
                Assert.AreEqual("third", actualSortedWords[2].Word);
                Assert.AreEqual(2, actualSortedWords[2].ClueNumber);
            }
            public void ExampleFromFile_ReturnsExpectedClues()
            {
                PuzParser parser  = new PuzParser();
                var       results = parser.ParseWordsFromGridString(
                    "POEMS.RANG.DATA" +
                    "ONTAP.AVIA.EPIC" +
                    "MECCA.RAPS.BOTH" +
                    ".SHARPEISHARPIE" +
                    "...ORACLE.BALL." +
                    "APB.ECO.YSL.ELI" +
                    "BRANDEIS.PENCAP" +
                    "BOTS.CNOTE.ETTA" +
                    "OTTAWA.BRANDIES" +
                    "TEL.ARM.EKE.CDS" +
                    ".MEAD.ALEUTS..." +
                    "APPLEIDAPPLIED." +
                    "NOLA.NEMO.ORDER" +
                    "TRAM.CUPS.SENSE" +
                    "ZENO.APSE.SNAKY");

                Assert.AreEqual(74, results.Count, "Expected 34 results");
                bool foundPoems = false; //first across
                bool foundSnaky = false; //last across

                bool foundPom = false;   //first down
                bool foundRey = false;   //last down

                foreach (var result in results)
                {
                    if (result.Word == "POEMS")
                    {
                        foundPoems = true;
                        Assert.AreEqual(0, result.IndexInSingleString, "Unexpected IndexInSingleString for POEMS");
                        Assert.AreEqual(1, result.ClueNumber, "Unexpected IndexInSingleString for POEMS");
                        Assert.AreEqual(true, result.IsCellNumbered, "Unexpected IndexInSingleString for POEMS");
                        Assert.AreEqual(CrosswordDirection.Across, result.Direction,
                                        "Unexpected IndexInSingleString for POEMS");
                    }

                    if (result.Word == "SNAKY")
                    {
                        foundSnaky = true;
                    }

                    if (result.Word == "POM")
                    {
                        foundPom = true;
                    }
                    if (result.Word == "REY")
                    {
                        foundRey = true;
                    }
                }

                Assert.AreEqual(true, foundPoems, "Found POEMS");
                Assert.AreEqual(true, foundSnaky, "Found SNAKY");

                Assert.AreEqual(true, foundPom, "Found POM");
                Assert.AreEqual(true, foundRey, "Found REY");
            }
            public void ExampleFile_ReturnsExpectedCollection()
            {
                PuzParser parser = new PuzParser();

                ClueRepository results = parser.ParseFile(@"data\uc200525.puz");

                Assert.IsNotNull(results);
                Assert.AreEqual(75, results.CountOfWordWithClues);
            }
            public void OtherExampleFile_ReturnsExpectedCollection(int fileNumber, string expectedWord,
                                                                   string expectedClue)
            {
                PuzParser parser = new PuzParser();

                ClueRepository results = parser.ParseFile($@"data\example{fileNumber}.puz");

                Assert.IsNotNull(results);
                Assert.LessOrEqual(74, results.CountOfWordWithClues);
                Assert.AreEqual(expectedClue, results.GetCluesForWord(expectedWord)[0].ClueText,
                                $"Expected clue for {expectedWord}");
            }
        public void ProcessAllPuzzlesInDirectory_NoAssertions()
        {
            PuzParser    parser = new PuzParser();
            const string DIRECTORY_WITH_PUZ_FILES =
                @"C:\Users\Chip\Source\Repos\WordPuzzle3\WordPuzzlesTest\data\PUZ";

            foreach (string file in Directory.EnumerateFiles(DIRECTORY_WITH_PUZ_FILES, "*.puz"))
            {
                Console.WriteLine($"Attempting {file}");
                var results = parser.ParseFile(file);
                Console.WriteLine($"{results.CountOfWordWithClues}: {file}");
                var fileWithClues = file.Replace(".puz", ".json");
                results.WriteToDisk(fileWithClues);
                Assert.LessOrEqual(70, results.CountOfWordWithClues, "Expected at least 70 clues.");
            }
        }
            public void TopRow_ReturnsTrue()
            {
                PuzParser parser = new PuzParser();

                string[] letterGridAsStrings =
                {
                    "POEMS.",
                    "ONTAP.",
                    "MECCA.",
                    ".SHAR.",
                    "......",
                    "......",
                };
                for (int x = 0; x < 6; x++)
                {
                    Assert.IsTrue(parser.DetermineIfCellIsNumbered(x, 0, letterGridAsStrings));
                }
            }
            public void SixBySix_ReturnsExpectedClues()
            {
                string grid = "" +
                              "POEMS." +
                              "ONTAP." +
                              "MECCA." +
                              ".SHAR." +
                              "......" +
                              "......";
                PuzParser parser  = new PuzParser();
                var       results = parser.ParseWordsFromGridString(grid);

                Assert.AreEqual(9, results.Count, "Expected 10 crossword entries");

                Assert.AreEqual("POEMS", results[0].Word);
                Assert.AreEqual(true, results[0].IsCellNumbered, "Unexpected value for IsCellNumbered for word POEMS");
                Assert.AreEqual(0, results[0].IndexInSingleString,
                                "Unexpected value for IndexInSingleString for word POEMS");
                Assert.AreEqual(CrosswordDirection.Across, results[0].Direction,
                                "Unexpected value for Direction for word POEMS");
                Assert.AreEqual(1, results[0].ClueNumber, "Unexpected value for ClueNumber for word POEMS");

                var entryPom = results[1];

                Assert.AreEqual("POM", entryPom.Word);
                Assert.AreEqual(true, entryPom.IsCellNumbered, "Unexpected value for IsCellNumbered for word POM");
                Assert.AreEqual(0, entryPom.IndexInSingleString,
                                "Unexpected value for IndexInSingleString for word POM");
                Assert.AreEqual(CrosswordDirection.Down, entryPom.Direction,
                                "Unexpected value for Direction for word POM");

                var entryOnes = results[2];

                Assert.AreEqual("ONES", entryOnes.Word);
                Assert.AreEqual(true, entryOnes.IsCellNumbered, "Unexpected value for IsCellNumbered for word ONES");
                Assert.AreEqual(1, entryOnes.IndexInSingleString,
                                "Unexpected value for IndexInSingleString for word ONES");
                Assert.AreEqual(CrosswordDirection.Down, entryOnes.Direction,
                                "Unexpected value for Direction for word ONES");


                var entryEtch = results[3];

                Assert.AreEqual("ETCH", entryEtch.Word);
                Assert.AreEqual(true, entryEtch.IsCellNumbered, "Unexpected value for IsCellNumbered for word ETCH");
                Assert.AreEqual(2, entryEtch.IndexInSingleString,
                                "Unexpected value for IndexInSingleString for word ETCH");
                Assert.AreEqual(CrosswordDirection.Down, entryEtch.Direction,
                                "Unexpected value for Direction for word ETCH");

                var entryMaca = results[4];

                Assert.AreEqual("MACA", entryMaca.Word);
                Assert.AreEqual(true, entryMaca.IsCellNumbered, "Unexpected value for IsCellNumbered for word MACA");
                Assert.AreEqual(3, entryMaca.IndexInSingleString,
                                "Unexpected value for IndexInSingleString for word MACA");
                Assert.AreEqual(CrosswordDirection.Down, entryMaca.Direction,
                                "Unexpected value for Direction for word MACA");

                var entrySpar = results[5];

                Assert.AreEqual("SPAR", entrySpar.Word);
                Assert.AreEqual(true, entrySpar.IsCellNumbered, "Unexpected value for IsCellNumbered for word SPAR");
                Assert.AreEqual(4, entrySpar.IndexInSingleString,
                                "Unexpected value for IndexInSingleString for word SPAR");
                Assert.AreEqual(CrosswordDirection.Down, entrySpar.Direction,
                                "Unexpected value for Direction for word SPAR");

                var entryOnTap = results[6];

                Assert.AreEqual("ONTAP", entryOnTap.Word);
                Assert.AreEqual(true, entryOnTap.IsCellNumbered, "Unexpected value for IsCellNumbered for word ONTAP");
                Assert.AreEqual(6, entryOnTap.IndexInSingleString,
                                "Unexpected value for IndexInSingleString for word ONTAP");
                Assert.AreEqual(CrosswordDirection.Across, entryOnTap.Direction,
                                "Unexpected value for Direction for word POEMS");

                var entryMecca = results[7];

                Assert.AreEqual("MECCA", entryMecca.Word);
                Assert.AreEqual(true, entryMecca.IsCellNumbered, "Unexpected value for IsCellNumbered for word MECCA");
                Assert.AreEqual(12, entryMecca.IndexInSingleString,
                                "Unexpected value for IndexInSingleString for word MECCA");
                Assert.AreEqual(CrosswordDirection.Across, entryMecca.Direction,
                                "Unexpected value for Direction for word MECCA");

                var entryShar = results[8];

                Assert.AreEqual("SHAR", entryShar.Word);
                Assert.AreEqual(true, entryShar.IsCellNumbered, "Unexpected value for IsCellNumbered for word SHAR");
                Assert.AreEqual(19, entryShar.IndexInSingleString,
                                "Unexpected value for IndexInSingleString for word SHAR");
                Assert.AreEqual(CrosswordDirection.Across, entryShar.Direction,
                                "Unexpected value for Direction for word SHAR");
            }