def test_RootWordStatistics(self):
     fsm = FsmMorphologicalAnalyzer("../turkish_dictionary.txt",
                                    "../turkish_misspellings.txt",
                                    "../turkish_finite_state_machine.xml")
     rootWordStatistics = RootWordStatistics(
         "../penntreebank_statistics.txt")
     self.assertTrue(rootWordStatistics.containsKey("it$iti$itici"))
     self.assertTrue(rootWordStatistics.containsKey("yas$yasa$yasama"))
     self.assertTrue(rootWordStatistics.containsKey("tutuk$tutukla"))
     self.assertEqual(
         "çık",
         rootWordStatistics.bestRootWord(fsm.morphologicalAnalysis("çıkma"),
                                         0.0))
     self.assertEqual(
         "danışman",
         rootWordStatistics.bestRootWord(
             fsm.morphologicalAnalysis("danışman"), 0.0))
     self.assertIsNone(
         rootWordStatistics.bestRootWord(
             fsm.morphologicalAnalysis("danışman"), 0.7))
     self.assertEqual(
         "görüşme",
         rootWordStatistics.bestRootWord(
             fsm.morphologicalAnalysis("görüşme"), 0.0))
     self.assertIsNone(
         rootWordStatistics.bestRootWord(
             fsm.morphologicalAnalysis("görüşme"), 0.7))
     self.assertEqual(
         "anlaş",
         rootWordStatistics.bestRootWord(
             fsm.morphologicalAnalysis("anlaşma"), 0.0))
     self.assertIsNone(
         rootWordStatistics.bestRootWord(
             fsm.morphologicalAnalysis("anlaşma"), 0.7))
 def setUp(self) -> None:
     fsm = FsmMorphologicalAnalyzer("../turkish_dictionary.txt",
                                    "../turkish_misspellings.txt",
                                    "../turkish_finite_state_machine.xml")
     self.parse1 = fsm.morphologicalAnalysis("açılır")
     self.parse2 = fsm.morphologicalAnalysis("koparılarak")
     self.parse3 = fsm.morphologicalAnalysis("toplama")
     self.parse4 = fsm.morphologicalAnalysis("değerlendirmede")
     self.parse5 = fsm.morphologicalAnalysis("soruşturmasının")
     self.parse6 = fsm.morphologicalAnalysis("karşılaştırmalı")
     self.parse7 = fsm.morphologicalAnalysis("esaslarını")
     self.parse8 = fsm.morphologicalAnalysis("güçleriyle")
     self.parse9 = fsm.morphologicalAnalysis("bulmayacakları")
 def test_Deasciify(self):
     fsm = FsmMorphologicalAnalyzer("../turkish_dictionary.txt", "../turkish_misspellings.txt",
                                    "../turkish_finite_state_machine.xml")
     nGram = NGram("../ngram.txt")
     nGram.calculateNGramProbabilitiesSimple(NoSmoothing())
     nGramDeasciifier = NGramDeasciifier(fsm, nGram, True)
     simpleAsciifier = SimpleAsciifier()
     corpus = Corpus("../corpus.txt")
     for i in range(corpus.sentenceCount()):
         sentence = corpus.getSentence(i)
         for j in range(1, sentence.wordCount()):
             if fsm.morphologicalAnalysis(sentence.getWord(j).getName()).size() > 0:
                 asciified = simpleAsciifier.asciifyWord(sentence.getWord(j))
                 if asciified != sentence.getWord(j).getName():
                     deasciified = nGramDeasciifier.deasciify(Sentence(sentence.getWord(j - 1).getName() + " " + sentence.getWord(j).getName()))
                     self.assertEqual(sentence.getWord(j).getName(), deasciified.getWord(1).getName())
class FsmParseTest(unittest.TestCase):

    parse1: FsmParse
    parse2: FsmParse
    parse3: FsmParse
    parse4: FsmParse
    parse5: FsmParse
    parse6: FsmParse
    parse7: FsmParse
    parse8: FsmParse
    parse9: FsmParse
    parse10: FsmParse

    def setUp(self) -> None:
        self.fsm = FsmMorphologicalAnalyzer()
        self.parse1 = self.fsm.morphologicalAnalysis("açılır").getFsmParse(0)
        self.parse2 = self.fsm.morphologicalAnalysis(
            "koparılarak").getFsmParse(0)
        self.parse3 = self.fsm.morphologicalAnalysis("toplama").getFsmParse(0)
        self.parse4 = self.fsm.morphologicalAnalysis(
            "değerlendirmede").getFsmParse(0)
        self.parse5 = self.fsm.morphologicalAnalysis(
            "soruşturmasının").getFsmParse(0)
        self.parse6 = self.fsm.morphologicalAnalysis(
            "karşılaştırmalı").getFsmParse(0)
        self.parse7 = self.fsm.morphologicalAnalysis("esaslarını").getFsmParse(
            0)
        self.parse8 = self.fsm.morphologicalAnalysis("güçleriyle").getFsmParse(
            0)
        self.parse9 = self.fsm.morphologicalAnalysis(
            "bulmayacakları").getFsmParse(0)
        self.parse10 = self.fsm.morphologicalAnalysis("mü").getFsmParse(0)

    def test_GetLastLemmaWithTag(self):
        self.assertEqual("açıl", self.parse1.getLastLemmaWithTag("VERB"))
        self.assertEqual("koparıl", self.parse2.getLastLemmaWithTag("VERB"))
        self.assertEqual("değerlendir",
                         self.parse4.getLastLemmaWithTag("VERB"))
        self.assertEqual("soruştur", self.parse5.getLastLemmaWithTag("VERB"))
        self.assertEqual("karşı", self.parse6.getLastLemmaWithTag("ADJ"))

    def test_GetLastLemma(self):
        self.assertEqual("açıl", self.parse1.getLastLemma())
        self.assertEqual("koparılarak", self.parse2.getLastLemma())
        self.assertEqual("değerlendirme", self.parse4.getLastLemma())
        self.assertEqual("soruşturma", self.parse5.getLastLemma())
        self.assertEqual("karşılaştır", self.parse6.getLastLemma())

    def test_GetTransitionList(self):
        self.assertEqual("aç+VERB^DB+VERB+PASS+POS+AOR+A3SG",
                         self.parse1.__str__())
        self.assertEqual(
            "kop+VERB^DB+VERB+CAUS^DB+VERB+PASS+POS^DB+ADV+BYDOINGSO",
            self.parse2.__str__())
        self.assertEqual("topla+NOUN+A3SG+P1SG+DAT", self.parse3.__str__())
        self.assertEqual(
            "değer+NOUN+A3SG+PNON+NOM^DB+VERB+ACQUIRE^DB+VERB+CAUS+POS^DB+NOUN+INF2+A3SG+PNON+LOC",
            self.parse4.__str__())
        self.assertEqual(
            "sor+VERB+RECIP^DB+VERB+CAUS+POS^DB+NOUN+INF2+A3SG+P3SG+GEN",
            self.parse5.__str__())
        self.assertEqual(
            "karşı+ADJ^DB+VERB+BECOME^DB+VERB+CAUS+POS+NECES+A3SG",
            self.parse6.__str__())
        self.assertEqual("esas+ADJ^DB+NOUN+ZERO+A3PL+P2SG+ACC",
                         self.parse7.__str__())
        self.assertEqual("güç+ADJ^DB+NOUN+ZERO+A3PL+P3PL+INS",
                         self.parse8.__str__())
        self.assertEqual("bul+VERB+NEG^DB+ADJ+FUTPART+P3PL",
                         self.parse9.__str__())
        self.assertEqual("mi+QUES+PRES+A3SG", self.parse10.__str__())

    def test_WithList(self):
        self.assertEqual("aç+Hl+Hr", self.parse1.withList())
        self.assertEqual("kop+Ar+Hl+yArAk", self.parse2.withList())
        self.assertEqual("topla+Hm+yA", self.parse3.withList())
        self.assertEqual("değer+lAn+DHr+mA+DA", self.parse4.withList())
        self.assertEqual("sor+Hs+DHr+mA+sH+nHn", self.parse5.withList())
        self.assertEqual("karşı+lAs+DHr+mAlH", self.parse6.withList())
        self.assertEqual("esas+lAr+Hn+yH", self.parse7.withList())
        self.assertEqual("güç+lArH+ylA", self.parse8.withList())
        self.assertEqual("bul+mA+yAcAk+lArH", self.parse9.withList())

    def test_SuffixList(self):
        self.assertEqual(
            "VerbalRoot(F5PR)(aç)+PassiveHl(açıl)+OtherTense2(açılır)",
            self.parse1.suffixList())
        self.assertEqual(
            "VerbalRoot(F1P1)(kop)+CausativeAr(kopar)+PassiveHl(koparıl)+Adverb1(koparılarak)",
            self.parse2.suffixList())
        self.assertEqual(
            "NominalRoot(topla)+Possessive(toplam)+Case1(toplama)",
            self.parse3.suffixList())
        self.assertEqual(
            "NominalRoot(değer)+VerbalRoot(F5PR)(değerlen)+CausativeDHr(değerlendir)+NominalRoot(değerlendirme)+Case1(değerlendirmede)",
            self.parse4.suffixList())
        self.assertEqual(
            "VerbalRoot(F5PR)(sor)+Reciprocal(soruş)+CausativeDHr(soruştur)+NominalRoot(soruşturma)+Possessive3(soruşturması)+Case1(soruşturmasının)",
            self.parse5.suffixList())
        self.assertEqual(
            "AdjectiveRoot(karşı)+VerbalRoot(F5PR)(karşılaş)+CausativeDHr(karşılaştır)+OtherTense(karşılaştırmalı)",
            self.parse6.suffixList())
        self.assertEqual(
            "AdjectiveRoot(esas)+Plural(esaslar)+Possessive(esasların)+AccusativeNoun(esaslarını)",
            self.parse7.suffixList())
        self.assertEqual(
            "AdjectiveRoot(güç)+Possesive3(güçleri)+Case1(güçleriyle)",
            self.parse8.suffixList())
        self.assertEqual(
            "VerbalRoot(F5PW)(bul)+Negativema(bulma)+AdjectiveParticiple(bulmayacak)+Adjective(bulmayacakları)",
            self.parse9.suffixList())
class TransitionTest(unittest.TestCase):

    fsm : FsmMorphologicalAnalyzer

    def setUp(self) -> None:
        self.fsm = FsmMorphologicalAnalyzer()

    def test_NumberWithAccusative(self):
        self.assertTrue(self.fsm.morphologicalAnalysis("2'yi").size() != 0)
        self.assertEqual(0, self.fsm.morphologicalAnalysis("2'i").size())
        self.assertTrue(self.fsm.morphologicalAnalysis("5'i").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("9'u").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("10'u").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("30'u").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("3'ü").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("4'ü").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("100'ü").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("6'yı").size() != 0)
        self.assertEqual(0, self.fsm.morphologicalAnalysis("6'ı").size())
        self.assertTrue(self.fsm.morphologicalAnalysis("40'ı").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("60'ı").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("90'ı").size() != 0)

    def test_NumberWithDative(self):
        self.assertTrue(self.fsm.morphologicalAnalysis("6'ya").size() != 0)
        self.assertEqual(0, self.fsm.morphologicalAnalysis("6'a").size())
        self.assertTrue(self.fsm.morphologicalAnalysis("9'a").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("10'a").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("30'a").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("40'a").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("60'a").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("90'a").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("2'ye").size() != 0)
        self.assertEqual(0, self.fsm.morphologicalAnalysis("2'e").size())
        self.assertTrue(self.fsm.morphologicalAnalysis("8'e").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("5'e").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("4'e").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("1'e").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("3'e").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("7'ye").size() != 0)
        self.assertEqual(0, self.fsm.morphologicalAnalysis("7'e").size())

    def test_PresentTense(self):
        self.assertTrue(self.fsm.morphologicalAnalysis("büyülüyor").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("bölümlüyor").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("buğuluyor").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("bulguluyor").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("açıklıyor").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("çalkalıyor").size() != 0)

    def test_A(self):
        self.assertTrue(self.fsm.morphologicalAnalysis("alkole").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("anormale").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("sakala").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("kabala").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("faika").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("halika").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("kediye").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("eve").size() != 0)

    def test_C(self):
        self.assertTrue(self.fsm.morphologicalAnalysis("gripçi").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("güllaççı").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("gülütçü").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("gülükçü").size() != 0)

    def test_SH(self):
        self.assertTrue(self.fsm.morphologicalAnalysis("altışar").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("yedişer").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("üçer").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("beşer").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("dörder").size() != 0)

    def test_NumberWithD(self):
        self.assertTrue(self.fsm.morphologicalAnalysis("1'di").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("2'ydi").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("3'tü").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("4'tü").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("5'ti").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("6'ydı").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("7'ydi").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("8'di").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("9'du").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("30'du").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("40'tı").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("60'tı").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("70'ti").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("50'ydi").size() != 0)

    def test_D(self):
        self.assertTrue(self.fsm.morphologicalAnalysis("koştu").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("kitaptı").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("kaçtı").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("evdi").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("fraktı").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("sattı").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("aftı").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("kesti").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("ahtı").size() != 0)

    def test_Exceptions(self):
        self.assertTrue(self.fsm.morphologicalAnalysis("yiyip").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("sana").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("bununla").size() != 0)
        self.assertEqual(0, self.fsm.morphologicalAnalysis("buyla").size())
        self.assertTrue(self.fsm.morphologicalAnalysis("onunla").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("şununla").size() != 0)
        self.assertEqual(0, self.fsm.morphologicalAnalysis("şuyla").size())
        self.assertTrue(self.fsm.morphologicalAnalysis("bana").size() != 0)

    def test_VowelEChangesToIDuringYSuffixation(self):
        self.assertTrue(self.fsm.morphologicalAnalysis("diyor").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("yiyor").size() != 0)

    def test_LastIdropsDuringPassiveSuffixation(self):
        self.assertTrue(self.fsm.morphologicalAnalysis("yoğruldu").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("buyruldu").size() != 0)

    def test_ShowsSuRegularities(self):
        self.assertTrue(self.fsm.morphologicalAnalysis("karasuyu").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("suyu").size() != 0)

    def test_DuplicatesDuringSuffixation(self):
        self.assertTrue(self.fsm.morphologicalAnalysis("tıbbı").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("ceddi").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("zıddı").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("serhaddi").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("fenni").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("haddi").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("hazzı").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("şakkı").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("şakı").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("halli").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("hali").size() != 0)

    def test_LastIdropsDuringSuffixation(self):
        self.assertTrue(self.fsm.morphologicalAnalysis("hizbi").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("kaybı").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("ahdi").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("nesci").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("zehri").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("zikri").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("metni").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("metini").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("katli").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("katili").size() != 0)

    def test_NounSoftenDuringSuffixation(self):
        self.assertTrue(self.fsm.morphologicalAnalysis("adabı").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("amibi").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("armudu").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("ağacı").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("akacı").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("arkeoloğu").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("filoloğu").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("ahengi").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("küngü").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("kitaplığı").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("küllüğü").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("adedi").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("adeti").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("ağıdı").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("ağıtı").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("anotu").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("anodu").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("Kuzguncuk'u").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("Leylak'ı").size() != 0)

    def test_VerbSoftenDuringSuffixation(self):
        self.assertTrue(self.fsm.morphologicalAnalysis("cezbediyor").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("ediyor").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("bahsediyor").size() != 0)
 def setUp(self) -> None:
     fsm = FsmMorphologicalAnalyzer()
     self.parse1 = fsm.morphologicalAnalysis("açılır")
     self.parse2 = fsm.morphologicalAnalysis("koparılarak")
     self.parse3 = fsm.morphologicalAnalysis("toplama")
     self.parse4 = fsm.morphologicalAnalysis("değerlendirmede")
     self.parse5 = fsm.morphologicalAnalysis("soruşturmasının")
     self.parse6 = fsm.morphologicalAnalysis("karşılaştırmalı")
     self.parse7 = fsm.morphologicalAnalysis("esaslarını")
     self.parse8 = fsm.morphologicalAnalysis("güçleriyle")
     self.parse9 = fsm.morphologicalAnalysis("bulmayacakları")
     self.parse10 = fsm.morphologicalAnalysis("kitabı")
     self.parse11 = fsm.morphologicalAnalysis("kitapları")
     self.parse12 = fsm.morphologicalAnalysis("o")
     self.parse13 = fsm.morphologicalAnalysis("arabası")
     self.parse14 = fsm.morphologicalAnalysis("sana")
class FsmMorphologicalAnalyzerTest(unittest.TestCase):

    fsm: FsmMorphologicalAnalyzer

    def setUp(self) -> None:
        self.fsm = FsmMorphologicalAnalyzer(
            "../turkish_dictionary.txt", "../turkish_misspellings.txt",
            "../turkish_finite_state_machine.xml")

    def test_morphologicalAnalysisDataTimeNumber(self):
        self.assertTrue(self.fsm.morphologicalAnalysis("3/4").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("3\\/4").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("4/2/1973").size() != 0)
        self.assertTrue(
            self.fsm.morphologicalAnalysis("14/2/1993").size() != 0)
        self.assertTrue(
            self.fsm.morphologicalAnalysis("14/12/1933").size() != 0)
        self.assertTrue(
            self.fsm.morphologicalAnalysis("6/12/1903").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("%34.5").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("%3").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("%56").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("2:3").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("12:3").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("4:23").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("11:56").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("1:2:3").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("3:12:3").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("5:4:23").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("7:11:56").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("12:2:3").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("10:12:3").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("11:4:23").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("22:11:56").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("45").size() != 0)
        self.assertTrue(self.fsm.morphologicalAnalysis("34.23").size() != 0)

    def test_morphologicalAnalysisProperNoun(self):
        dictionary = self.fsm.getDictionary()
        for i in range(dictionary.size()):
            word = dictionary.getWordWithIndex(i)
            if isinstance(word, TxtWord):
                if word.isProperNoun():
                    self.assertTrue(
                        self.fsm.morphologicalAnalysis(word.getName().replace(
                            "i", "İ").upper()).size() != 0)

    def test_morphologicalAnalysisNounSoftenDuringSuffixation(self):
        dictionary = self.fsm.getDictionary()
        for i in range(dictionary.size()):
            word = dictionary.getWordWithIndex(i)
            if isinstance(word, TxtWord):
                if word.isNominal() and word.nounSoftenDuringSuffixation():
                    transitionState = State("Possessive", False, False)
                    startState = State("NominalRoot", True, False)
                    transition = Transition("yH", transitionState, "ACC")
                    surfaceForm = transition.makeTransition(
                        word, word.getName(), startState)
                    self.assertTrue(
                        self.fsm.morphologicalAnalysis(surfaceForm).size() != 0
                    )

    def test_morphologicalAnalysisVowelAChangesToIDuringYSuffixation(self):
        dictionary = self.fsm.getDictionary()
        for i in range(dictionary.size()):
            word = dictionary.getWordWithIndex(i)
            if isinstance(word, TxtWord):
                if word.isVerb() and word.vowelAChangesToIDuringYSuffixation():
                    transitionState = State("VerbalStem", False, False)
                    startState = State("VerbalRoot", True, False)
                    transition = Transition("Hyor", transitionState, "PROG1")
                    surfaceForm = transition.makeTransition(
                        word, word.getName(), startState)
                    self.assertTrue(
                        self.fsm.morphologicalAnalysis(surfaceForm).size() != 0
                    )

    def test_morphologicalAnalysisIsPortmanteau(self):
        dictionary = self.fsm.getDictionary()
        for i in range(dictionary.size()):
            word = dictionary.getWordWithIndex(i)
            if isinstance(word, TxtWord):
                if word.isNominal() and word.isPortmanteau() and not word.isPlural() and \
                        not word.isPortmanteauFacedVowelEllipsis():
                    transitionState = State("CompoundNounRoot", True, False)
                    startState = State("CompoundNounRoot", True, False)
                    transition = Transition("lArH", transitionState,
                                            "A3PL+P3PL")
                    exceptLast2 = word.getName()[:len(word.getName()) - 2]
                    exceptLast = word.getName()[:len(word.getName()) - 1]
                    if word.isPortmanteauFacedSoftening():
                        if word.getName()[len(word.getName()) - 2] == "b":
                            rootForm = exceptLast2 + 'p'
                        elif word.getName()[len(word.getName()) - 2] == "c":
                            rootForm = exceptLast2 + 'ç'
                        elif word.getName()[len(word.getName()) - 2] == "d":
                            rootForm = exceptLast2 + 't'
                        elif word.getName()[len(word.getName()) - 2] == "ğ":
                            rootForm = exceptLast2 + 'k'
                        else:
                            rootForm = exceptLast
                    else:
                        if word.isPortmanteauEndingWithSI():
                            rootForm = exceptLast2
                        else:
                            rootForm = exceptLast
                    surfaceForm = transition.makeTransition(
                        word, rootForm, startState)
                    self.assertTrue(
                        self.fsm.morphologicalAnalysis(surfaceForm).size() != 0
                    )

    def test_morphologicalAnalysisNotObeysVowelHarmonyDuringAgglutination(
            self):
        dictionary = self.fsm.getDictionary()
        for i in range(dictionary.size()):
            word = dictionary.getWordWithIndex(i)
            if isinstance(word, TxtWord):
                if word.isNominal(
                ) and word.notObeysVowelHarmonyDuringAgglutination():
                    transitionState = State("Possessive", False, False)
                    startState = State("NominalRoot", True, False)
                    transition = Transition("yH", transitionState, "ACC")
                    surfaceForm = transition.makeTransition(
                        word, word.getName(), startState)
                    self.assertTrue(
                        self.fsm.morphologicalAnalysis(surfaceForm).size() != 0
                    )

    def test_morphologicalAnalysisLastIdropsDuringSuffixation(self):
        dictionary = self.fsm.getDictionary()
        for i in range(dictionary.size()):
            word = dictionary.getWordWithIndex(i)
            if isinstance(word, TxtWord):
                if word.isNominal() and word.lastIdropsDuringSuffixation():
                    transitionState = State("Possessive", False, False)
                    startState = State("NominalRoot", True, False)
                    transition = Transition("yH", transitionState, "ACC")
                    surfaceForm = transition.makeTransition(
                        word, word.getName(), startState)
                    self.assertTrue(
                        self.fsm.morphologicalAnalysis(surfaceForm).size() != 0
                    )

    def test_morphologicalAnalysisVerbSoftenDuringSuffixation(self):
        dictionary = self.fsm.getDictionary()
        for i in range(dictionary.size()):
            word = dictionary.getWordWithIndex(i)
            if isinstance(word, TxtWord):
                if word.isVerb() and word.verbSoftenDuringSuffixation():
                    transitionState = State("VerbalStem", False, False)
                    startState = State("VerbalRoot", True, False)
                    transition = Transition("Hyor", transitionState, "PROG1")
                    surfaceForm = transition.makeTransition(
                        word, word.getName(), startState)
                    self.assertTrue(
                        self.fsm.morphologicalAnalysis(surfaceForm).size() != 0
                    )

    def test_morphologicalAnalysisDuplicatesDuringSuffixation(self):
        dictionary = self.fsm.getDictionary()
        for i in range(dictionary.size()):
            word = dictionary.getWordWithIndex(i)
            if isinstance(word, TxtWord):
                if word.isNominal() and word.duplicatesDuringSuffixation():
                    transitionState = State("Possessive", False, False)
                    startState = State("NominalRoot", True, False)
                    transition = Transition("yH", transitionState, "ACC")
                    surfaceForm = transition.makeTransition(
                        word, word.getName(), startState)
                    self.assertTrue(
                        self.fsm.morphologicalAnalysis(surfaceForm).size() != 0
                    )

    def test_morphologicalAnalysisEndingKChangesIntoG(self):
        dictionary = self.fsm.getDictionary()
        for i in range(dictionary.size()):
            word = dictionary.getWordWithIndex(i)
            if isinstance(word, TxtWord):
                if word.isNominal() and word.endingKChangesIntoG():
                    transitionState = State("Possessive", False, False)
                    startState = State("NominalRoot", True, False)
                    transition = Transition("yH", transitionState, "ACC")
                    surfaceForm = transition.makeTransition(
                        word, word.getName(), startState)
                    self.assertTrue(
                        self.fsm.morphologicalAnalysis(surfaceForm).size() != 0
                    )

    def test_morphologicalAnalysisLastIdropsDuringPassiveSuffixation(self):
        dictionary = self.fsm.getDictionary()
        for i in range(dictionary.size()):
            word = dictionary.getWordWithIndex(i)
            if isinstance(word, TxtWord):
                if word.isVerb() and word.lastIdropsDuringPassiveSuffixation():
                    transitionState = State("VerbalStem", False, False)
                    startState = State("VerbalRoot", True, False)
                    transition = Transition("Hl", transitionState,
                                            "^DB+VERB+PASS")
                    surfaceForm = transition.makeTransition(
                        word, word.getName(), startState)
                    self.assertTrue(
                        self.fsm.morphologicalAnalysis(surfaceForm).size() != 0
                    )