/** * Copyright (c) 2021 lingdocs.com * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * */ import { concatPsString, makePsString, removeEndingL, yulEndingInfinitive, mapVerbBlock, allMascFirstInflection, addToForm, unisexInfToObjectMatrix, complementInflects, concatInflections, psStringEquals, removeRetroflexR, splitDoubleWord, endsInConsonant, addOEnding, removeFVarients, endsInShwa, splitPsByVarients, endsWith, } from "./p-text-helpers"; import * as T from "../types"; import { pastEndings } from "./grammar-units"; test(`concatPsString should work`, () => { const input = concatPsString( { p: "لیکل", f: "leekul" }, { p: "ی", f: "ey" }, " ", { p: "دی", f: "dey" }, ); expect(input).toEqual({ p: "لیکلی دی", f: "leekuley dey" }); // test with length options added const inputWLength = concatPsString( { p: "خفه", f: "khufa" }, " ", { short: { p: "کړو", f: "kRo" }, long: { p: "کړلو", f: "kRulo" }, }, ); expect(inputWLength).toEqual({ short: { p: "خفه کړو", f: "khufa kRo" }, long: { p: "خفه کړلو", f: "khufa kRulo" }, }); // even with minin const inputWMini = concatPsString( { p: "خفه", f: "khufa" }, " ", { short: { p: "کړی", f: "kRey" }, long: { p: "کړلی", f: "kRuley" }, }, " ", { mini: { p: "کو", f: "ko" }, short: { p: "کړو", f: "kRo" }, long: { p: "کړلو", f: "kRulo" }, }, ); expect(inputWMini).toEqual({ mini: { p: "خفه کړی کو", f: "khufa kRey ko" }, short: { p: "خفه کړی کړو", f: "khufa kRey kRo" }, long: { p: "خفه کړلی کړلو", f: "khufa kRuley kRulo" }, }); // also with personInflections const inputWPersInfs = concatPsString( { mascSing: { p: "پوخ", f: "pokh" }, mascPlur: { p: "پاخه", f: "paakhu" }, femSing: { p: "پخه", f: "pakha" }, femPlur: { p: "پخې", f: "pakhe" }, }, " ", { short: { p: "ک", f: "k" }, long: { p: "کړ", f: "kR" }, }, ); expect(inputWPersInfs).toEqual({ mascSing: { short: { p: "پوخ ک", f: "pokh k" }, long: { p: "پوخ کړ", f: "pokh kR" }, }, mascPlur: { short: { p: "پاخه ک", f: "paakhu k" }, long: { p: "پاخه کړ", f: "paakhu kR" }, }, femSing: { short: { p: "پخه ک", f: "pakha k" }, long: { p: "پخه کړ", f: "pakha kR" }, }, femPlur: { short: { p: "پخې ک", f: "pakhe k" }, long: { p: "پخې کړ", f: "pakhe kR" }, }, }); }); test(`addToForm should work`, () => { const block: T.VerbBlock = [ [[{p: "شوی", f: "shuwey"}], [{p: "شوي", f: "shuwee"}]], [[{p: "شوې", f: "shuwe"}], [{p: "شوې", f: "shuwe"}]], [[{p: "شوی", f: "shuwey"}], [{p: "شوي", f: "shuwee"}]], [[{p: "شوې", f: "shuwe"}], [{p: "شوې", f: "shuwe"}]], [[{p: "شوی", f: "shuwey"}], [{p: "شوي", f: "shuwee"}]], [[{p: "شوې", f: "shuwe"}], [{p: "شوې", f: "shuwe"}]], ]; const result = addToForm([{ p: "خفه", f: "khufa" }, " "], block); expect(result).toEqual([ [[{p: "خفه شوی", f: "khufa shuwey"}], [{p: "خفه شوي", f: "khufa shuwee"}]], [[{p: "خفه شوې", f: "khufa shuwe"}], [{p: "خفه شوې", f: "khufa shuwe"}]], [[{p: "خفه شوی", f: "khufa shuwey"}], [{p: "خفه شوي", f: "khufa shuwee"}]], [[{p: "خفه شوې", f: "khufa shuwe"}], [{p: "خفه شوې", f: "khufa shuwe"}]], [[{p: "خفه شوی", f: "khufa shuwey"}], [{p: "خفه شوي", f: "khufa shuwee"}]], [[{p: "خفه شوې", f: "khufa shuwe"}], [{p: "خفه شوې", f: "khufa shuwe"}]], ]); const result2 = addToForm([{ short: { p: "کړی", f: "kRey" }, long: { p: "کړلی", f: "kRuley" }, }, " "], block); expect(result2).toEqual({ short: [ [[{p: "کړی شوی", f: "kRey shuwey"}], [{p: "کړی شوي", f: "kRey shuwee"}]], [[{p: "کړی شوې", f: "kRey shuwe"}], [{p: "کړی شوې", f: "kRey shuwe"}]], [[{p: "کړی شوی", f: "kRey shuwey"}], [{p: "کړی شوي", f: "kRey shuwee"}]], [[{p: "کړی شوې", f: "kRey shuwe"}], [{p: "کړی شوې", f: "kRey shuwe"}]], [[{p: "کړی شوی", f: "kRey shuwey"}], [{p: "کړی شوي", f: "kRey shuwee"}]], [[{p: "کړی شوې", f: "kRey shuwe"}], [{p: "کړی شوې", f: "kRey shuwe"}]], ], long: [ [[{p: "کړلی شوی", f: "kRuley shuwey"}], [{p: "کړلی شوي", f: "kRuley shuwee"}]], [[{p: "کړلی شوې", f: "kRuley shuwe"}], [{p: "کړلی شوې", f: "kRuley shuwe"}]], [[{p: "کړلی شوی", f: "kRuley shuwey"}], [{p: "کړلی شوي", f: "kRuley shuwee"}]], [[{p: "کړلی شوې", f: "kRuley shuwe"}], [{p: "کړلی شوې", f: "kRuley shuwe"}]], [[{p: "کړلی شوی", f: "kRuley shuwey"}], [{p: "کړلی شوي", f: "kRuley shuwee"}]], [[{p: "کړلی شوې", f: "kRuley shuwe"}], [{p: "کړلی شوې", f: "kRuley shuwe"}]], ], }); const result3 = addToForm([ { masc: [ [{ p: "زوړ", f: "zoR" }], [{ p: "زاړه", f: "zaaRu" }], [{ p: "زړو", f: "zaRo" }], ], fem: [ [{ p: "زړه", f: "zaRa" }], [{ p: "زړې", f: "zaRe" }], [{ p: "زړو", f: "zaRo" }], ], }, " ", [ { p: "کړل", f: "kRul" }, { short: { p: "کړی", f: "kRey" }, long: { p: "کړلی", f: "kRuley" }, }, ], " ", ], block); const expected3 = { long: [ [ [{p: "زوړ کړل شوی", f: "zoR kRul shuwey"}, {p: "زوړ کړلی شوی", f: "zoR kRuley shuwey"}], [{p: "زاړه کړل شوي", f: "zaaRu kRul shuwee"}, {p: "زاړه کړلی شوي", f: "zaaRu kRuley shuwee"}] ], [ [{p: "زړه کړل شوې", f: "zaRa kRul shuwe"}, {p: "زړه کړلی شوې", f: "zaRa kRuley shuwe"}], [{p: "زړې کړل شوې", f: "zaRe kRul shuwe"}, {p: "زړې کړلی شوې", f: "zaRe kRuley shuwe"}], ], [ [{p: "زوړ کړل شوی", f: "zoR kRul shuwey"}, {p: "زوړ کړلی شوی", f: "zoR kRuley shuwey"}], [{p: "زاړه کړل شوي", f: "zaaRu kRul shuwee"}, {p: "زاړه کړلی شوي", f: "zaaRu kRuley shuwee"}] ], [ [{p: "زړه کړل شوې", f: "zaRa kRul shuwe"}, {p: "زړه کړلی شوې", f: "zaRa kRuley shuwe"}], [{p: "زړې کړل شوې", f: "zaRe kRul shuwe"}, {p: "زړې کړلی شوې", f: "zaRe kRuley shuwe"}], ], [ [{p: "زوړ کړل شوی", f: "zoR kRul shuwey"}, {p: "زوړ کړلی شوی", f: "zoR kRuley shuwey"}], [{p: "زاړه کړل شوي", f: "zaaRu kRul shuwee"}, {p: "زاړه کړلی شوي", f: "zaaRu kRuley shuwee"}] ], [ [{p: "زړه کړل شوې", f: "zaRa kRul shuwe"}, {p: "زړه کړلی شوې", f: "zaRa kRuley shuwe"}], [{p: "زړې کړل شوې", f: "zaRe kRul shuwe"}, {p: "زړې کړلی شوې", f: "zaRe kRuley shuwe"}], ], ], short: [ [ [{p: "زوړ کړل شوی", f: "zoR kRul shuwey"}, {p: "زوړ کړی شوی", f: "zoR kRey shuwey"}], [{p: "زاړه کړل شوي", f: "zaaRu kRul shuwee"}, {p: "زاړه کړی شوي", f: "zaaRu kRey shuwee"}] ], [ [{p: "زړه کړل شوې", f: "zaRa kRul shuwe"}, {p: "زړه کړی شوې", f: "zaRa kRey shuwe"}], [{p: "زړې کړل شوې", f: "zaRe kRul shuwe"}, {p: "زړې کړی شوې", f: "zaRe kRey shuwe"}], ], [ [{p: "زوړ کړل شوی", f: "zoR kRul shuwey"}, {p: "زوړ کړی شوی", f: "zoR kRey shuwey"}], [{p: "زاړه کړل شوي", f: "zaaRu kRul shuwee"}, {p: "زاړه کړی شوي", f: "zaaRu kRey shuwee"}] ], [ [{p: "زړه کړل شوې", f: "zaRa kRul shuwe"}, {p: "زړه کړی شوې", f: "zaRa kRey shuwe"}], [{p: "زړې کړل شوې", f: "zaRe kRul shuwe"}, {p: "زړې کړی شوې", f: "zaRe kRey shuwe"}], ], [ [{p: "زوړ کړل شوی", f: "zoR kRul shuwey"}, {p: "زوړ کړی شوی", f: "zoR kRey shuwey"}], [{p: "زاړه کړل شوي", f: "zaaRu kRul shuwee"}, {p: "زاړه کړی شوي", f: "zaaRu kRey shuwee"}] ], [ [{p: "زړه کړل شوې", f: "zaRa kRul shuwe"}, {p: "زړه کړی شوې", f: "zaRa kRey shuwe"}], [{p: "زړې کړل شوې", f: "zaRe kRul shuwe"}, {p: "زړې کړی شوې", f: "zaRe kRey shuwe"}], ], ], }; expect(result3).toEqual(expected3); // check with imperative const impFormIntrans: T.ImperativeForm = [ [[{p: "شه", f: "sha"}], [{p: "شئ", f: "sheyy"}]], [[{p: "شه", f: "sha"}], [{p: "شئ", f: "sheyy"}]], ]; const impFormTrans: T.ImperativeForm = [ [[{p: "کړه", f: "kRa"}], [{p: "کړئ", f: "kReyy"}]], [[{p: "کړه", f: "kRa"}], [{p: "کړئ", f: "kReyy"}]], ]; const impFormTransOpts: T.ImperativeForm = { short: [ [[{p: "که", f: "ka"}], [{p: "کئ", f: "keyy"}]], [[{p: "که", f: "ka"}], [{p: "کئ", f: "keyy"}]], ], long: [ [[{p: "کړه", f: "kRa"}], [{p: "کړئ", f: "kReyy"}]], [[{p: "کړه", f: "kRa"}], [{p: "کړئ", f: "kReyy"}]], ], } const unisexComp: T.UnisexInflections = { masc: [ [{ p: "زوړ", f: "zoR" }], [{ p: "زاړه", f: "zaaRu" }], [{ p: "زړو", f: "zaRo" }], ], fem: [ [{ p: "زړه", f: "zaRa" }], [{ p: "زړې", f: "zaRe" }], [{ p: "زړو", f: "zaRo" }], ], }; const objectMatrix: T.OptionalPersonInflections = { mascSing: { p: "زوړ", f: "zoR" }, mascPlur: { p: "زاړه", f: "zaaRu" }, femSing: { p: "زړه", f: "zaRa" }, femPlur: { p: "زړې", f: "zaRe" }, }; expect(addToForm([unisexComp, " "], impFormIntrans)).toEqual([ [[{p: "زوړ شه", f: "zoR sha"}], [{p: "زاړه شئ", f: "zaaRu sheyy"}]], [[{p: "زړه شه", f: "zaRa sha"}], [{p: "زړې شئ", f: "zaRe sheyy"}]], ]); expect(addToForm([objectMatrix, " "], impFormTrans)).toEqual({ mascSing: [ [[{p: "زوړ کړه", f: "zoR kRa"}], [{p: "زوړ کړئ", f: "zoR kReyy"}]], [[{p: "زوړ کړه", f: "zoR kRa"}], [{p: "زوړ کړئ", f: "zoR kReyy"}]], ], mascPlur: [ [[{p: "زاړه کړه", f: "zaaRu kRa"}], [{p: "زاړه کړئ", f: "zaaRu kReyy"}]], [[{p: "زاړه کړه", f: "zaaRu kRa"}], [{p: "زاړه کړئ", f: "zaaRu kReyy"}]], ], femSing: [ [[{p: "زړه کړه", f: "zaRa kRa"}], [{p: "زړه کړئ", f: "zaRa kReyy"}]], [[{p: "زړه کړه", f: "zaRa kRa"}], [{p: "زړه کړئ", f: "zaRa kReyy"}]], ], femPlur: [ [[{p: "زړې کړه", f: "zaRe kRa"}], [{p: "زړې کړئ", f: "zaRe kReyy"}]], [[{p: "زړې کړه", f: "zaRe kRa"}], [{p: "زړې کړئ", f: "zaRe kReyy"}]], ], }); expect(addToForm([objectMatrix, " "], impFormTransOpts)).toEqual({ mascSing: { short: [ [[{p: "زوړ که", f: "zoR ka"}], [{p: "زوړ کئ", f: "zoR keyy"}]], [[{p: "زوړ که", f: "zoR ka"}], [{p: "زوړ کئ", f: "zoR keyy"}]], ], long: [ [[{p: "زوړ کړه", f: "zoR kRa"}], [{p: "زوړ کړئ", f: "zoR kReyy"}]], [[{p: "زوړ کړه", f: "zoR kRa"}], [{p: "زوړ کړئ", f: "zoR kReyy"}]], ], }, mascPlur: { short: [ [[{p: "زاړه که", f: "zaaRu ka"}], [{p: "زاړه کئ", f: "zaaRu keyy"}]], [[{p: "زاړه که", f: "zaaRu ka"}], [{p: "زاړه کئ", f: "zaaRu keyy"}]], ], long: [ [[{p: "زاړه کړه", f: "zaaRu kRa"}], [{p: "زاړه کړئ", f: "zaaRu kReyy"}]], [[{p: "زاړه کړه", f: "zaaRu kRa"}], [{p: "زاړه کړئ", f: "zaaRu kReyy"}]], ], }, femSing: { short: [ [[{p: "زړه که", f: "zaRa ka"}], [{p: "زړه کئ", f: "zaRa keyy"}]], [[{p: "زړه که", f: "zaRa ka"}], [{p: "زړه کئ", f: "zaRa keyy"}]], ], long: [ [[{p: "زړه کړه", f: "zaRa kRa"}], [{p: "زړه کړئ", f: "zaRa kReyy"}]], [[{p: "زړه کړه", f: "zaRa kRa"}], [{p: "زړه کړئ", f: "zaRa kReyy"}]], ], }, femPlur: { short: [ [[{p: "زړې که", f: "zaRe ka"}], [{p: "زړې کئ", f: "zaRe keyy"}]], [[{p: "زړې که", f: "zaRe ka"}], [{p: "زړې کئ", f: "zaRe keyy"}]], ], long: [ [[{p: "زړې کړه", f: "zaRe kRa"}], [{p: "زړې کړئ", f: "zaRe kReyy"}]], [[{p: "زړې کړه", f: "zaRe kRa"}], [{p: "زړې کړئ", f: "zaRe kReyy"}]], ], }, }); const matrixBase: T.VerbForm = { mascSing: [ [[{p: "ستړی کوم", f: "stuRey kawum"}], [{p: "ستړی کوو", f: "stuRey kawoo"}]], [[{p: "ستړی کوم", f: "stuRey kawum"}], [{p: "ستړی کوو", f: "stuRey kawoo"}]], [[{p: "ستړی کوې", f: "stuRey kawe"}], [{p: "ستړی کوئ", f: "stuRey kaweyy"}]], [[{p: "ستړی کوې", f: "stuRey kawe"}], [{p: "ستړی کوئ", f: "stuRey kaweyy"}]], [[{p: "ستړی کوي", f: "stuRey kawee"}], [{p: "ستړی کوي", f: "stuRey kawee"}]], [[{p: "ستړی کوي", f: "stuRey kawee"}], [{p: "ستړی کوي", f: "stuRey kawee"}]], ], mascPlur: [ [[{p: "ستړي ستړي کوم", f: "stuRee kawum"}], [{p: "ستړي کوو", f: "stuRee kawoo"}]], [[{p: "ستړي ستړي کوم", f: "stuRee kawum"}], [{p: "ستړي کوو", f: "stuRee kawoo"}]], [[{p: "ستړي ستړي کوې", f: "stuRee kawe"}], [{p: "ستړي کوئ", f: "stuRee kaweyy"}]], [[{p: "ستړي ستړي کوې", f: "stuRee kawe"}], [{p: "ستړي کوئ", f: "stuRee kaweyy"}]], [[{p: "ستړي ستړي کوي", f: "stuRee kawee"}], [{p: "ستړي کوي", f: "stuRee kawee"}]], [[{p: "ستړي ستړي کوي", f: "stuRee kawee"}], [{p: "ستړي کوي", f: "stuRee kawee"}]], ], femSing: [ [[{p: "ستړې کوم", f: "stuRe kawum"}], [{p: "ستړې کوو", f: "stuRe kawoo"}]], [[{p: "ستړې کوم", f: "stuRe kawum"}], [{p: "ستړې کوو", f: "stuRe kawoo"}]], [[{p: "ستړې کوې", f: "stuRe kawe"}], [{p: "ستړې کوئ", f: "stuRe kaweyy"}]], [[{p: "ستړې کوې", f: "stuRe kawe"}], [{p: "ستړې کوئ", f: "stuRe kaweyy"}]], [[{p: "ستړې کوي", f: "stuRe kawee"}], [{p: "ستړې کوي", f: "stuRe kawee"}]], [[{p: "ستړې کوي", f: "stuRe kawee"}], [{p: "ستړې کوي", f: "stuRe kawee"}]], ], femPlur: [ [[{p: "ستړې کوم", f: "stuRe kawum"}], [{p: "ستړې کوو", f: "stuRe kawoo"}]], [[{p: "ستړې کوم", f: "stuRe kawum"}], [{p: "ستړې کوو", f: "stuRe kawoo"}]], [[{p: "ستړې کوې", f: "stuRe kawe"}], [{p: "ستړې کوئ", f: "stuRe kaweyy"}]], [[{p: "ستړې کوې", f: "stuRe kawe"}], [{p: "ستړې کوئ", f: "stuRe kaweyy"}]], [[{p: "ستړې کوي", f: "stuRe kawee"}], [{p: "ستړې کوي", f: "stuRe kawee"}]], [[{p: "ستړې کوي", f: "stuRe kawee"}], [{p: "ستړې کوي", f: "stuRe kawee"}]], ], }; expect(addToForm([objectMatrix, " ", { p: "به", f: "ba" }, " "], matrixBase)).toEqual({ mascSing: [ [[{p: "زوړ به ستړی کوم", f: "zoR ba stuRey kawum"}], [{p: "زوړ به ستړی کوو", f: "zoR ba stuRey kawoo"}]], [[{p: "زوړ به ستړی کوم", f: "zoR ba stuRey kawum"}], [{p: "زوړ به ستړی کوو", f: "zoR ba stuRey kawoo"}]], [[{p: "زوړ به ستړی کوې", f: "zoR ba stuRey kawe"}], [{p: "زوړ به ستړی کوئ", f: "zoR ba stuRey kaweyy"}]], [[{p: "زوړ به ستړی کوې", f: "zoR ba stuRey kawe"}], [{p: "زوړ به ستړی کوئ", f: "zoR ba stuRey kaweyy"}]], [[{p: "زوړ به ستړی کوي", f: "zoR ba stuRey kawee"}], [{p: "زوړ به ستړی کوي", f: "zoR ba stuRey kawee"}]], [[{p: "زوړ به ستړی کوي", f: "zoR ba stuRey kawee"}], [{p: "زوړ به ستړی کوي", f: "zoR ba stuRey kawee"}]], ], mascPlur: [ [[{p: "زاړه به ستړي ستړي کوم", f: "zaaRu ba stuRee kawum"}], [{p: "زاړه به ستړي کوو", f: "zaaRu ba stuRee kawoo"}]], [[{p: "زاړه به ستړي ستړي کوم", f: "zaaRu ba stuRee kawum"}], [{p: "زاړه به ستړي کوو", f: "zaaRu ba stuRee kawoo"}]], [[{p: "زاړه به ستړي ستړي کوې", f: "zaaRu ba stuRee kawe"}], [{p: "زاړه به ستړي کوئ", f: "zaaRu ba stuRee kaweyy"}]], [[{p: "زاړه به ستړي ستړي کوې", f: "zaaRu ba stuRee kawe"}], [{p: "زاړه به ستړي کوئ", f: "zaaRu ba stuRee kaweyy"}]], [[{p: "زاړه به ستړي ستړي کوي", f: "zaaRu ba stuRee kawee"}], [{p: "زاړه به ستړي کوي", f: "zaaRu ba stuRee kawee"}]], [[{p: "زاړه به ستړي ستړي کوي", f: "zaaRu ba stuRee kawee"}], [{p: "زاړه به ستړي کوي", f: "zaaRu ba stuRee kawee"}]], ], femSing: [ [[{p: "زړه به ستړې کوم", f: "zaRa ba stuRe kawum"}], [{p: "زړه به ستړې کوو", f: "zaRa ba stuRe kawoo"}]], [[{p: "زړه به ستړې کوم", f: "zaRa ba stuRe kawum"}], [{p: "زړه به ستړې کوو", f: "zaRa ba stuRe kawoo"}]], [[{p: "زړه به ستړې کوې", f: "zaRa ba stuRe kawe"}], [{p: "زړه به ستړې کوئ", f: "zaRa ba stuRe kaweyy"}]], [[{p: "زړه به ستړې کوې", f: "zaRa ba stuRe kawe"}], [{p: "زړه به ستړې کوئ", f: "zaRa ba stuRe kaweyy"}]], [[{p: "زړه به ستړې کوي", f: "zaRa ba stuRe kawee"}], [{p: "زړه به ستړې کوي", f: "zaRa ba stuRe kawee"}]], [[{p: "زړه به ستړې کوي", f: "zaRa ba stuRe kawee"}], [{p: "زړه به ستړې کوي", f: "zaRa ba stuRe kawee"}]], ], femPlur: [ [[{p: "زړې به ستړې کوم", f: "zaRe ba stuRe kawum"}], [{p: "زړې به ستړې کوو", f: "zaRe ba stuRe kawoo"}]], [[{p: "زړې به ستړې کوم", f: "zaRe ba stuRe kawum"}], [{p: "زړې به ستړې کوو", f: "zaRe ba stuRe kawoo"}]], [[{p: "زړې به ستړې کوې", f: "zaRe ba stuRe kawe"}], [{p: "زړې به ستړې کوئ", f: "zaRe ba stuRe kaweyy"}]], [[{p: "زړې به ستړې کوې", f: "zaRe ba stuRe kawe"}], [{p: "زړې به ستړې کوئ", f: "zaRe ba stuRe kaweyy"}]], [[{p: "زړې به ستړې کوي", f: "zaRe ba stuRe kawee"}], [{p: "زړې به ستړې کوي", f: "zaRe ba stuRe kawee"}]], [[{p: "زړې به ستړې کوي", f: "zaRe ba stuRe kawee"}], [{p: "زړې به ستړې کوي", f: "zaRe ba stuRe kawee"}]], ], }); const kawulSimpPast: T.VerbForm = { mini: [ [[{p: "کم", f: "kum"}], [{p: "کو", f: "koo"}]], [[{p: "کم", f: "kum"}], [{p: "کو", f: "koo"}]], [[{p: "کې", f: "ke"}], [{p: "کئ", f: "keyy"}]], [[{p: "کې", f: "ke"}], [{p: "کئ", f: "keyy"}]], [[{p: "که", f: "ku"}, {p: "کو", f: "ko"}], [{p: "کړل", f: "kRul"}, { p: "کو", f: "koo" }]], [[{p: "که", f: "ka"}], [{p: "کې", f: "ke"}]], ], short: [ [[{p: "کړم", f: "kRum"}], [{p: "کړو", f: "kRoo"}]], [[{p: "کړم", f: "kRum"}], [{p: "کړو", f: "kRoo"}]], [[{p: "کړې", f: "kRe"}], [{p: "کړئ", f: "kReyy"}]], [[{p: "کړې", f: "kRe"}], [{p: "کړئ", f: "kReyy"}]], [[{p: "کړه", f: "kRu"}, {p: "کړو", f: "kRo"}, {p: "کړ", f: "kuR"}], [{p: "کړل", f: "kRul"}, {p: "کړو", f: "kRoo" }]], [[{p: "کړه", f: "kRa"}], [{p: "کړې", f: "kRe"}]], ], long: [ [[{p: "کړلم", f: "kRulum"}], [{p: "کړلو", f: "kRuloo"}]], [[{p: "کړلم", f: "kRulum"}], [{p: "کړلو", f: "kRuloo"}]], [[{p: "کړلې", f: "kRule"}], [{p: "کړلئ", f: "kRuleyy"}]], [[{p: "کړلې", f: "kRule"}], [{p: "کړلئ", f: "kRuleyy"}]], [[{p: "کړله", f: "kRulu"}, {p: "کړلو", f: "kRulo"}], [{p: "کړل", f: "kRul"}, {p: "کړلو", f: "kRuloo"}]], [[{p: "کړله", f: "kRula"}], [{p: "کړلې", f: "kRule"}]], ], }; expect(addToForm([{ p: "به", f: "ba" }, " "], kawulSimpPast)).toEqual({ mini: [ [[{p: "به کم", f: "ba kum"}], [{p: "به کو", f: "ba koo"}]], [[{p: "به کم", f: "ba kum"}], [{p: "به کو", f: "ba koo"}]], [[{p: "به کې", f: "ba ke"}], [{p: "به کئ", f: "ba keyy"}]], [[{p: "به کې", f: "ba ke"}], [{p: "به کئ", f: "ba keyy"}]], [[{p: "به که", f: "ba ku"}, {p: "به کو", f: "ba ko"}], [{p: "به کړل", f: "ba kRul"}, { p: "به کو", f: "ba koo" }]], [[{p: "به که", f: "ba ka"}], [{p: "به کې", f: "ba ke"}]], ], short: [ [[{p: "به کړم", f: "ba kRum"}], [{p: "به کړو", f: "ba kRoo"}]], [[{p: "به کړم", f: "ba kRum"}], [{p: "به کړو", f: "ba kRoo"}]], [[{p: "به کړې", f: "ba kRe"}], [{p: "به کړئ", f: "ba kReyy"}]], [[{p: "به کړې", f: "ba kRe"}], [{p: "به کړئ", f: "ba kReyy"}]], [[{p: "به کړه", f: "ba kRu"}, {p: "به کړو", f: "ba kRo"}, {p: "به کړ", f: "ba kuR"}], [{p: "به کړل", f: "ba kRul"}, {p: "به کړو", f: "ba kRoo" }]], [[{p: "به کړه", f: "ba kRa"}], [{p: "به کړې", f: "ba kRe"}]], ], long: [ [[{p: "به کړلم", f: "ba kRulum"}], [{p: "به کړلو", f: "ba kRuloo"}]], [[{p: "به کړلم", f: "ba kRulum"}], [{p: "به کړلو", f: "ba kRuloo"}]], [[{p: "به کړلې", f: "ba kRule"}], [{p: "به کړلئ", f: "ba kRuleyy"}]], [[{p: "به کړلې", f: "ba kRule"}], [{p: "به کړلئ", f: "ba kRuleyy"}]], [[{p: "به کړله", f: "ba kRulu"}, {p: "به کړلو", f: "ba kRulo"}], [{p: "به کړل", f: "ba kRul"}, {p: "به کړلو", f: "ba kRuloo"}]], [[{p: "به کړله", f: "ba kRula"}], [{p: "به کړلې", f: "ba kRule"}]], ], }); expect(addToForm([{ long: { p: "به", f: "ba" }, short: { p: "ب", f: "b" }, }, " "], kawulSimpPast)).toEqual({ mini: [ [[{p: "ب کم", f: "b kum"}], [{p: "ب کو", f: "b koo"}]], [[{p: "ب کم", f: "b kum"}], [{p: "ب کو", f: "b koo"}]], [[{p: "ب کې", f: "b ke"}], [{p: "ب کئ", f: "b keyy"}]], [[{p: "ب کې", f: "b ke"}], [{p: "ب کئ", f: "b keyy"}]], [[{p: "ب که", f: "b ku"}, {p: "ب کو", f: "b ko"}], [{p: "ب کړل", f: "b kRul"}, { p: "ب کو", f: "b koo" }]], [[{p: "ب که", f: "b ka"}], [{p: "ب کې", f: "b ke"}]], ], short: [ [[{p: "ب کړم", f: "b kRum"}], [{p: "ب کړو", f: "b kRoo"}]], [[{p: "ب کړم", f: "b kRum"}], [{p: "ب کړو", f: "b kRoo"}]], [[{p: "ب کړې", f: "b kRe"}], [{p: "ب کړئ", f: "b kReyy"}]], [[{p: "ب کړې", f: "b kRe"}], [{p: "ب کړئ", f: "b kReyy"}]], [[{p: "ب کړه", f: "b kRu"}, {p: "ب کړو", f: "b kRo"}, {p: "ب کړ", f: "b kuR"}], [{p: "ب کړل", f: "b kRul"}, {p: "ب کړو", f: "b kRoo" }]], [[{p: "ب کړه", f: "b kRa"}], [{p: "ب کړې", f: "b kRe"}]], ], long: [ [[{p: "به کړلم", f: "ba kRulum"}], [{p: "به کړلو", f: "ba kRuloo"}]], [[{p: "به کړلم", f: "ba kRulum"}], [{p: "به کړلو", f: "ba kRuloo"}]], [[{p: "به کړلې", f: "ba kRule"}], [{p: "به کړلئ", f: "ba kRuleyy"}]], [[{p: "به کړلې", f: "ba kRule"}], [{p: "به کړلئ", f: "ba kRuleyy"}]], [[{p: "به کړله", f: "ba kRulu"}, {p: "به کړلو", f: "ba kRulo"}], [{p: "به کړل", f: "ba kRul"}, {p: "به کړلو", f: "ba kRuloo"}]], [[{p: "به کړله", f: "ba kRula"}], [{p: "به کړلې", f: "ba kRule"}]], ], }); expect(addToForm([[{ long: { p: "به", f: "ba" }, short: { p: "ب", f: "b" }, }], " "], kawulSimpPast)).toEqual({ mini: [ [[{p: "ب کم", f: "b kum"}], [{p: "ب کو", f: "b koo"}]], [[{p: "ب کم", f: "b kum"}], [{p: "ب کو", f: "b koo"}]], [[{p: "ب کې", f: "b ke"}], [{p: "ب کئ", f: "b keyy"}]], [[{p: "ب کې", f: "b ke"}], [{p: "ب کئ", f: "b keyy"}]], [[{p: "ب که", f: "b ku"}, {p: "ب کو", f: "b ko"}], [{p: "ب کړل", f: "b kRul"}, { p: "ب کو", f: "b koo" }]], [[{p: "ب که", f: "b ka"}], [{p: "ب کې", f: "b ke"}]], ], short: [ [[{p: "ب کړم", f: "b kRum"}], [{p: "ب کړو", f: "b kRoo"}]], [[{p: "ب کړم", f: "b kRum"}], [{p: "ب کړو", f: "b kRoo"}]], [[{p: "ب کړې", f: "b kRe"}], [{p: "ب کړئ", f: "b kReyy"}]], [[{p: "ب کړې", f: "b kRe"}], [{p: "ب کړئ", f: "b kReyy"}]], [[{p: "ب کړه", f: "b kRu"}, {p: "ب کړو", f: "b kRo"}, {p: "ب کړ", f: "b kuR"}], [{p: "ب کړل", f: "b kRul"}, {p: "ب کړو", f: "b kRoo" }]], [[{p: "ب کړه", f: "b kRa"}], [{p: "ب کړې", f: "b kRe"}]], ], long: [ [[{p: "به کړلم", f: "ba kRulum"}], [{p: "به کړلو", f: "ba kRuloo"}]], [[{p: "به کړلم", f: "ba kRulum"}], [{p: "به کړلو", f: "ba kRuloo"}]], [[{p: "به کړلې", f: "ba kRule"}], [{p: "به کړلئ", f: "ba kRuleyy"}]], [[{p: "به کړلې", f: "ba kRule"}], [{p: "به کړلئ", f: "ba kRuleyy"}]], [[{p: "به کړله", f: "ba kRulu"}, {p: "به کړلو", f: "ba kRulo"}], [{p: "به کړل", f: "ba kRul"}, {p: "به کړلو", f: "ba kRuloo"}]], [[{p: "به کړله", f: "ba kRula"}], [{p: "به کړلې", f: "ba kRule"}]], ], }); expect(addToForm([{ short: { p: "لیک", f: "leek" }, long: { p: "لیکل", f: "leekul" }, }], pastEndings)).toEqual({ short: [ [[{ p: "لیکم", f: "leekum" }], [{ p: "لیکو", f: "leekoo" }]], [[{ p: "لیکم", f: "leekum" }], [{ p: "لیکو", f: "leekoo" }]], [[{ p: "لیکې", f: "leeke" }], [{ p: "لیکئ", f: "leekeyy" }]], [[{ p: "لیکې", f: "leeke" }], [{ p: "لیکئ", f: "leekeyy" }]], [[{ p: "لیکه", f: "leeku" }, { p: "لیکو", f: "leeko"}], [{ p: "لیکل", f: "leekul" }]], [[{ p: "لیکه", f: "leeka"}], [{ p: "لیکې", f: "leeke" }]], ], long: [ [[{ p: "لیکلم", f: "leekulum" }], [{ p: "لیکلو", f: "leekuloo" }]], [[{ p: "لیکلم", f: "leekulum" }], [{ p: "لیکلو", f: "leekuloo" }]], [[{ p: "لیکلې", f: "leekule" }], [{ p: "لیکلئ", f: "leekuleyy" }]], [[{ p: "لیکلې", f: "leekule" }], [{ p: "لیکلئ", f: "leekuleyy" }]], [[{ p: "لیکله", f: "leekulu" }, { p: "لیکلو", f: "leekulo"}], [{ p: "لیکل", f: "leekul"}]], [[{ p: "لیکله", f: "leekula"}], [{ p: "لیکلې", f: "leekule" }]], ], }); expect(addToForm([{ long: { p: "تتت", f: "ttt" }, short: { p: "تت", f: "tt" }, mini: { p: "ت", f: "t" }, }, " "], { long: [ [[{p: "کړم", f: "kRum"}], [{p: "کړو", f: "kRoo"}]], [[{p: "کړم", f: "kRum"}], [{p: "کړو", f: "kRoo"}]], [[{p: "کړې", f: "kRe"}], [{p: "کړئ", f: "kReyy"}]], [[{p: "کړې", f: "kRe"}], [{p: "کړئ", f: "kReyy"}]], [[{p: "کړي", f: "kRee"}], [{p: "کړي", f: "kRee"}]], [[{p: "کړي", f: "kRee"}], [{p: "کړي", f: "kRee"}]], ], short: [ [[{p: "کم", f: "kum"}], [{p: "کو", f: "koo"}]], [[{p: "کم", f: "kum"}], [{p: "کو", f: "koo"}]], [[{p: "کې", f: "ke"}], [{p: "کئ", f: "keyy"}]], [[{p: "کې", f: "ke"}], [{p: "کئ", f: "keyy"}]], [[{p: "کي", f: "kee"}], [{p: "کي", f: "kee"}]], [[{p: "کي", f: "kee"}], [{p: "کي", f: "kee"}]], ], })).toEqual({ long: [ [[{p: "تتت کړم", f: "ttt kRum"}], [{p: "تتت کړو", f: "ttt kRoo"}]], [[{p: "تتت کړم", f: "ttt kRum"}], [{p: "تتت کړو", f: "ttt kRoo"}]], [[{p: "تتت کړې", f: "ttt kRe"}], [{p: "تتت کړئ", f: "ttt kReyy"}]], [[{p: "تتت کړې", f: "ttt kRe"}], [{p: "تتت کړئ", f: "ttt kReyy"}]], [[{p: "تتت کړي", f: "ttt kRee"}], [{p: "تتت کړي", f: "ttt kRee"}]], [[{p: "تتت کړي", f: "ttt kRee"}], [{p: "تتت کړي", f: "ttt kRee"}]], ], short: [ [[{p: "تت کم", f: "tt kum"}], [{p: "تت کو", f: "tt koo"}]], [[{p: "تت کم", f: "tt kum"}], [{p: "تت کو", f: "tt koo"}]], [[{p: "تت کې", f: "tt ke"}], [{p: "تت کئ", f: "tt keyy"}]], [[{p: "تت کې", f: "tt ke"}], [{p: "تت کئ", f: "tt keyy"}]], [[{p: "تت کي", f: "tt kee"}], [{p: "تت کي", f: "tt kee"}]], [[{p: "تت کي", f: "tt kee"}], [{p: "تت کي", f: "tt kee"}]], ], mini: [ [[{p: "ت کم", f: "t kum"}], [{p: "ت کو", f: "t koo"}]], [[{p: "ت کم", f: "t kum"}], [{p: "ت کو", f: "t koo"}]], [[{p: "ت کې", f: "t ke"}], [{p: "ت کئ", f: "t keyy"}]], [[{p: "ت کې", f: "t ke"}], [{p: "ت کئ", f: "t keyy"}]], [[{p: "ت کي", f: "t kee"}], [{p: "ت کي", f: "t kee"}]], [[{p: "ت کي", f: "t kee"}], [{p: "ت کي", f: "t kee"}]], ], }); }); test(`unisexInfToObjectMatrix`, () => { expect(unisexInfToObjectMatrix({ masc: [ [{ p: "زوړ", f: "zoR" }], [{ p: "زاړه", f: "zaaRu" }], [{ p: "زړو", f: "zaRo" }], ], fem: [ [{ p: "زړه", f: "zaRa" }], [{ p: "زړې", f: "zaRe" }], [{ p: "زړو", f: "zaRo" }], ], })).toEqual({ mascSing: { p: "زوړ", f: "zoR" }, mascPlur: { p: "زاړه", f: "zaaRu" }, femSing: { p: "زړه", f: "zaRa" }, femPlur: { p: "زړې", f: "zaRe" }, }); }); test(`complementInflects`, () => { expect(complementInflects({ masc: [ [{ p: "زوړ", f: "zoR" }], [{ p: "زاړه", f: "zaaRu" }], [{ p: "زړو", f: "zaRo" }], ], fem: [ [{ p: "زړه", f: "zaRa" }], [{ p: "زړې", f: "zaRe" }], [{ p: "زړو", f: "zaRo" }], ], })).toBe(true); expect(complementInflects({ masc: [ [{ p: "خفه", f: "khufa" }], [{ p: "خفه", f: "khufa" }], [{ p: "خفه", f: "khufao" }], ], fem: [ [{ p: "خفه", f: "khufa" }], [{ p: "خفه", f: "khufa" }], [{ p: "خفه", f: "khufa" }], ], })).toBe(false); }); test(`removeFVarients`, () => { expect(removeFVarients("ist'imaal, istimaal")).toBe("ist'imaal"); expect(removeFVarients({ p: "معالوم", f: "ma'aalóom, maalóom" })) .toEqual({ p: "معالوم", f: "ma'aalóom" }); expect(removeFVarients("kor")).toBe("kor"); }); test(`makePsString should work`, () => { expect(makePsString("کور", "kor")).toEqual({ p: "کور", f: "kor" }); }); test(`removeEndingL should work`, () => { expect(removeEndingL(makePsString("لیدل", "leedúl"))).toEqual( makePsString("لید", "leed"), ); expect(removeEndingL(makePsString("لیدل", "leedul"))).toEqual( makePsString("لید", "leed"), ); expect(removeEndingL(makePsString("پرېښود", "prexod"))).toEqual( makePsString("پرېښود", "prexod"), ); }); test(`yulEndingInfinitive should work`, () => { expect(yulEndingInfinitive({ p: "وایل", f: "waayul" })).toBe(true); expect(yulEndingInfinitive({ p: "لیکل", f: "leekúl" })).toBe(false); }); test(`mapVerbBlock should work`, () => { expect( mapVerbBlock( (ps: T.PsString) => concatPsString({ p: "به", f: "ba" }, " ", ps), [ [[{p: "کېدم", f: "kedum"}], [{p: "کېدو", f: "kedoo"}]], [[{p: "کېدم", f: "kedum"}], [{p: "کېدو", f: "kedoo"}]], [[{p: "کېدې", f: "kede"}], [{p: "کېدئ", f: "kedeyy"}]], [[{p: "کېدې", f: "kede"}], [{p: "کېدئ", f: "kedeyy"}]], [[{p: "کېده", f: "kedu"}, {p: "کېدو", f: "kedo"}], [{p: "کېدل", f: "kedul"}]], [[{p: "کېده", f: "keda"}], [{p: "کېدې", f: "kede"}]], ], ) ).toEqual([ [[{p: "به کېدم", f: "ba kedum"}], [{p: "به کېدو", f: "ba kedoo"}]], [[{p: "به کېدم", f: "ba kedum"}], [{p: "به کېدو", f: "ba kedoo"}]], [[{p: "به کېدې", f: "ba kede"}], [{p: "به کېدئ", f: "ba kedeyy"}]], [[{p: "به کېدې", f: "ba kede"}], [{p: "به کېدئ", f: "ba kedeyy"}]], [[{p: "به کېده", f: "ba kedu"}, {p: "به کېدو", f: "ba kedo"}], [{p: "به کېدل", f: "ba kedul"}]], [[{p: "به کېده", f: "ba keda"}], [{p: "به کېدې", f: "ba kede"}]], ]) }); test(`splitDoubleWord should work`, () => { const orig: T.DictionaryEntry = { ts: 123, p: "ګډ وډ", f: "guD wuD", g: "guDwuD", e: "mixed up", c: "adj. doub.", i: 1, }; const out: [T.DictionaryEntry, T.DictionaryEntry] = [ { ts: 123, p: "ګډ", f: "guD", g: "guDwuD", e: "mixed up", c: "adj.", i: 1, }, { ts: 123, p: "وډ", f: "wuD", g: "guDwuD", e: "mixed up", c: "adj.", i: 1, }, ] expect(splitDoubleWord(orig)).toEqual(out); }); // test(`allThirdPersMascPlur should work`, () => { // expect( // allThirdPersMascPlur([ // [[{p: "کېدم", f: "kedum"}], [{p: "کېدو", f: "kedoo"}]], // [[{p: "کېدم", f: "kedum"}], [{p: "کېدو", f: "kedoo"}]], // [[{p: "کېدې", f: "kede"}], [{p: "کېدئ", f: "kedeyy"}]], // [[{p: "کېدې", f: "kede"}], [{p: "کېدئ", f: "kedeyy"}]], // [[{p: "کېده", f: "kedu"}, {p: "کېدو", f: "kedo"}], [{p: "کېدل", f: "kedul"}]], // [[{p: "کېده", f: "keda"}], [{p: "کېدې", f: "kede"}]] // ]) // ).toEqual([ // [[{p: "کېدل", f: "kedul"}], [{p: "کېدل", f: "kedul"}]], // [[{p: "کېدل", f: "kedul"}], [{p: "کېدل", f: "kedul"}]], // [[{p: "کېدل", f: "kedul"}], [{p: "کېدل", f: "kedul"}]], // [[{p: "کېدل", f: "kedul"}], [{p: "کېدل", f: "kedul"}]], // [[{p: "کېدل", f: "kedul"}], [{p: "کېدل", f: "kedul"}]], // [[{p: "کېدل", f: "kedul"}], [{p: "کېدل", f: "kedul"}]], // ]); // expect( // allThirdPersMascPlur({ // short: [ // [[{p: "کېدم", f: "kedum"}], [{p: "کېدو", f: "kedoo"}]], // [[{p: "کېدم", f: "kedum"}], [{p: "کېدو", f: "kedoo"}]], // [[{p: "کېدې", f: "kede"}], [{p: "کېدئ", f: "kedeyy"}]], // [[{p: "کېدې", f: "kede"}], [{p: "کېدئ", f: "kedeyy"}]], // [[{p: "کېده", f: "kedu"}, {p: "کېدو", f: "kedo"}], [{p: "کېدل", f: "kedul"}]], // [[{p: "کېده", f: "keda"}], [{p: "کېدې", f: "kede"}]], // ], // long: [ // [[{p: "کېدلم", f: "kedulum"}], [{p: "کېدلو", f: "keduloo"}]], // [[{p: "کېدلم", f: "kedulum"}], [{p: "کېدلو", f: "keduloo"}]], // [[{p: "کېدلې", f: "kedule"}], [{p: "کېدلئ", f: "keduleyy"}]], // [[{p: "کېدلې", f: "kedule"}], [{p: "کېدلئ", f: "keduleyy"}]], // [[{p: "کېدله", f: "kedulu"}, {p: "کېدلو", f: "kedulo"}], [{p: "کېدل", f: "kedul"}]], // [[{p: "کېدله", f: "kedula"}], [{p: "کېدلې", f: "kedule"}]], // ], // }) // ).toEqual({ // short: [ // [[{p: "کېدل", f: "kedul"}], [{p: "کېدل", f: "kedul"}]], // [[{p: "کېدل", f: "kedul"}], [{p: "کېدل", f: "kedul"}]], // [[{p: "کېدل", f: "kedul"}], [{p: "کېدل", f: "kedul"}]], // [[{p: "کېدل", f: "kedul"}], [{p: "کېدل", f: "kedul"}]], // [[{p: "کېدل", f: "kedul"}], [{p: "کېدل", f: "kedul"}]], // [[{p: "کېدل", f: "kedul"}], [{p: "کېدل", f: "kedul"}]], // ], // long: [ // [[{p: "کېدل", f: "kedul"}], [{p: "کېدل", f: "kedul"}]], // [[{p: "کېدل", f: "kedul"}], [{p: "کېدل", f: "kedul"}]], // [[{p: "کېدل", f: "kedul"}], [{p: "کېدل", f: "kedul"}]], // [[{p: "کېدل", f: "kedul"}], [{p: "کېدل", f: "kedul"}]], // [[{p: "کېدل", f: "kedul"}], [{p: "کېدل", f: "kedul"}]], // [[{p: "کېدل", f: "kedul"}], [{p: "کېدل", f: "kedul"}]], // ], // }); // const matrixBase: VerbForm = { // mascSing: [ // [[{p: "ستړی کوم", f: "stuRey kawum"}], [{p: "ستړی کوو", f: "stuRey kawoo"}]], // [[{p: "ستړی کوم", f: "stuRey kawum"}], [{p: "ستړی کوو", f: "stuRey kawoo"}]], // [[{p: "ستړی کوې", f: "stuRey kawe"}], [{p: "ستړی کوئ", f: "stuRey kaweyy"}]], // [[{p: "ستړی کوې", f: "stuRey kawe"}], [{p: "ستړی کوئ", f: "stuRey kaweyy"}]], // [[{p: "ستړی کوي", f: "stuRey kawee"}], [{p: "ستړی کوي", f: "stuRey kawee"}]], // [[{p: "ستړی کوي", f: "stuRey kawee"}], [{p: "ستړی کوي", f: "stuRey kawee"}]], // ], // mascPlur: [ // [[{p: "ستړي کوم", f: "stuRee kawum"}], [{p: "ستړي کوو", f: "stuRee kawoo"}]], // [[{p: "ستړي کوم", f: "stuRee kawum"}], [{p: "ستړي کوو", f: "stuRee kawoo"}]], // [[{p: "ستړي کوې", f: "stuRee kawe"}], [{p: "ستړي کوئ", f: "stuRee kaweyy"}]], // [[{p: "ستړي کوې", f: "stuRee kawe"}], [{p: "ستړي کوئ", f: "stuRee kaweyy"}]], // [[{p: "ستړي کوي", f: "stuRee kawee"}], [{p: "ستړي کوي", f: "stuRee kawee"}]], // [[{p: "ستړي کوي", f: "stuRee kawee"}], [{p: "ستړي کوي", f: "stuRee kawee"}]], // ], // femSing: [ // [[{p: "ستړې کوم", f: "stuRe kawum"}], [{p: "ستړې کوو", f: "stuRe kawoo"}]], // [[{p: "ستړې کوم", f: "stuRe kawum"}], [{p: "ستړې کوو", f: "stuRe kawoo"}]], // [[{p: "ستړې کوې", f: "stuRe kawe"}], [{p: "ستړې کوئ", f: "stuRe kaweyy"}]], // [[{p: "ستړې کوې", f: "stuRe kawe"}], [{p: "ستړې کوئ", f: "stuRe kaweyy"}]], // [[{p: "ستړې کوي", f: "stuRe kawee"}], [{p: "ستړې کوي", f: "stuRe kawee"}]], // [[{p: "ستړې کوي", f: "stuRe kawee"}], [{p: "ستړې کوي", f: "stuRe kawee"}]], // ], // femPlur: [ // [[{p: "ستړې کوم", f: "stuRe kawum"}], [{p: "ستړې کوو", f: "stuRe kawoo"}]], // [[{p: "ستړې کوم", f: "stuRe kawum"}], [{p: "ستړې کوو", f: "stuRe kawoo"}]], // [[{p: "ستړې کوې", f: "stuRe kawe"}], [{p: "ستړې کوئ", f: "stuRe kaweyy"}]], // [[{p: "ستړې کوې", f: "stuRe kawe"}], [{p: "ستړې کوئ", f: "stuRe kaweyy"}]], // [[{p: "ستړې کوي", f: "stuRe kawee"}], [{p: "ستړې کوي", f: "stuRe kawee"}]], // [[{p: "ستړې کوي", f: "stuRe kawee"}], [{p: "ستړې کوي", f: "stuRe kawee"}]], // ], // }; // // NOTE: This should never really be used, because this is only used of the past tense // // versions on grammatically transitive verbs and the objectMatrixes are only used with // // present forms of verbs, but testing to cover all type safety // expect(allThirdPersMascPlur(matrixBase)).toEqual({ // mascSing: [ // [[{p: "ستړی کوي", f: "stuRey kawee"}], [{p: "ستړی کوي", f: "stuRey kawee"}]], // [[{p: "ستړی کوي", f: "stuRey kawee"}], [{p: "ستړی کوي", f: "stuRey kawee"}]], // [[{p: "ستړی کوي", f: "stuRey kawee"}], [{p: "ستړی کوي", f: "stuRey kawee"}]], // [[{p: "ستړی کوي", f: "stuRey kawee"}], [{p: "ستړی کوي", f: "stuRey kawee"}]], // [[{p: "ستړی کوي", f: "stuRey kawee"}], [{p: "ستړی کوي", f: "stuRey kawee"}]], // [[{p: "ستړی کوي", f: "stuRey kawee"}], [{p: "ستړی کوي", f: "stuRey kawee"}]], // ], // mascPlur: [ // [[{p: "ستړي کوي", f: "stuRee kawee"}], [{p: "ستړي کوي", f: "stuRee kawee"}]], // [[{p: "ستړي کوي", f: "stuRee kawee"}], [{p: "ستړي کوي", f: "stuRee kawee"}]], // [[{p: "ستړي کوي", f: "stuRee kawee"}], [{p: "ستړي کوي", f: "stuRee kawee"}]], // [[{p: "ستړي کوي", f: "stuRee kawee"}], [{p: "ستړي کوي", f: "stuRee kawee"}]], // [[{p: "ستړي کوي", f: "stuRee kawee"}], [{p: "ستړي کوي", f: "stuRee kawee"}]], // [[{p: "ستړي کوي", f: "stuRee kawee"}], [{p: "ستړي کوي", f: "stuRee kawee"}]], // ], // femSing: [ // [[{p: "ستړې کوي", f: "stuRe kawee"}], [{p: "ستړې کوي", f: "stuRe kawee"}]], // [[{p: "ستړې کوي", f: "stuRe kawee"}], [{p: "ستړې کوي", f: "stuRe kawee"}]], // [[{p: "ستړې کوي", f: "stuRe kawee"}], [{p: "ستړې کوي", f: "stuRe kawee"}]], // [[{p: "ستړې کوي", f: "stuRe kawee"}], [{p: "ستړې کوي", f: "stuRe kawee"}]], // [[{p: "ستړې کوي", f: "stuRe kawee"}], [{p: "ستړې کوي", f: "stuRe kawee"}]], // [[{p: "ستړې کوي", f: "stuRe kawee"}], [{p: "ستړې کوي", f: "stuRe kawee"}]], // ], // femPlur: [ // [[{p: "ستړې کوي", f: "stuRe kawee"}], [{p: "ستړې کوي", f: "stuRe kawee"}]], // [[{p: "ستړې کوي", f: "stuRe kawee"}], [{p: "ستړې کوي", f: "stuRe kawee"}]], // [[{p: "ستړې کوي", f: "stuRe kawee"}], [{p: "ستړې کوي", f: "stuRe kawee"}]], // [[{p: "ستړې کوي", f: "stuRe kawee"}], [{p: "ستړې کوي", f: "stuRe kawee"}]], // [[{p: "ستړې کوي", f: "stuRe kawee"}], [{p: "ستړې کوي", f: "stuRe kawee"}]], // [[{p: "ستړې کوي", f: "stuRe kawee"}], [{p: "ستړې کوي", f: "stuRe kawee"}]], // ], // }); // }); test(`allMascFirstInflection should work`, () => { expect( allMascFirstInflection({ masc: [ [{p: "زوړ", f: "zoR"}], [{p: "زاړه", f: "zaaRu"}], [{p: "زړو", f: "zaRo"}], ], fem: [ [{p: "زړه", f: "zaRa"}], [{p: "زړې", f: "zaRe"}], [{p: "زړو", f: "zaRo"}], ], }) ).toEqual({ masc: [ [{p: "زاړه", f: "zaaRu"}], [{p: "زاړه", f: "zaaRu"}], [{p: "زاړه", f: "zaaRu"}], ], fem: [ [{p: "زاړه", f: "zaaRu"}], [{p: "زاړه", f: "zaaRu"}], [{p: "زاړه", f: "zaaRu"}], ], }) expect( allMascFirstInflection({ short: { masc: [ [{p: "زوړ", f: "zoR"}], [{p: "زاړه", f: "zaaRu"}], [{p: "زړو", f: "zaRo"}], ], fem: [ [{p: "زړه", f: "zaRa"}], [{p: "زړې", f: "zaRe"}], [{p: "زړو", f: "zaRo"}], ], }, long: { masc: [ [{p: "زووړ", f: "zoooR"}], [{p: "زاااړه", f: "zaaaaRu"}], [{p: "زړو", f: "zaRo"}], ], fem: [ [{p: "زړه", f: "zaRa"}], [{p: "زړې", f: "zaRe"}], [{p: "زړو", f: "zaRo"}], ], } }) ).toEqual({ short: { masc: [ [{p: "زاړه", f: "zaaRu"}], [{p: "زاړه", f: "zaaRu"}], [{p: "زاړه", f: "zaaRu"}], ], fem: [ [{p: "زاړه", f: "zaaRu"}], [{p: "زاړه", f: "zaaRu"}], [{p: "زاړه", f: "zaaRu"}], ], }, long: { masc: [ [{p: "زاااړه", f: "zaaaaRu"}], [{p: "زاااړه", f: "zaaaaRu"}], [{p: "زاااړه", f: "zaaaaRu"}], ], fem: [ [{p: "زاااړه", f: "zaaaaRu"}], [{p: "زاااړه", f: "zaaaaRu"}], [{p: "زاااړه", f: "zaaaaRu"}], ], }, }); }); test('concat inflections', () => { const unisexInfs: T.UnisexInflections = { masc: [ [{ p: "زوړ", f: "zoR" }], [{ p: "زاړه", f: "zaaRu" }], [{ p: "زړو", f: "zaRo" }], ], fem: [ [{ p: "زړه", f: "zaRa" }], [{ p: "زړې", f: "zaRe" }], [{ p: "زړو", f: "zaRo" }], ], }; const partInfs: T.UnisexInflections = { masc: [ [{p: "شوی", f: "shuwey"}], [{p: "شوي", f: "shuwee"}], [{p: "شویو", f: "shuwiyo" }, { p: "شوو", f: "shuwo" }], ], fem: [ [{p: "شوې", f: "shuwe"}], [{p: "شوې", f: "shuwe"}], [{p: "شوو", f: "shuwo"}], ], }; expect(concatInflections(unisexInfs, partInfs)).toEqual({ masc: [ [{p: "زوړ شوی", f: "zoR shuwey"}], [{p: "زاړه شوي", f: "zaaRu shuwee"}], [{p: "زړو شویو", f: "zaRo shuwiyo"}, {p: "زړو شوو", f: "zaRo shuwo"}], ], fem: [ [{p: "زړه شوې", f: "zaRa shuwe"}], [{p: "زړې شوې", f: "zaRe shuwe"}], [{p: "زړو شوو", f: "zaRo shuwo"}], ], }); // TODO: Should also work this way // const unisexInfs2: UnisexInflections = { // masc: [ // [{ p: "زوړ", f: "zoR" }, { p: "تور", f: "tor"}], // [{ p: "زاړه", f: "zaaRu" }], // [{ p: "زړو", f: "zaRo" }], // ], // fem: [ // [{ p: "زړه", f: "zaRa" }], // [{ p: "زړې", f: "zaRe" }], // [{ p: "زړو", f: "zaRo" }], // ], // }; // const partInfs2: UnisexInflections = { // masc: [ // [{p: "شوی", f: "shuwey"}], // [{p: "شوي", f: "shuwee"}], // [{p: "شویو", f: "shuwiyo" }], // ], // fem: [ // [{p: "شوې", f: "shuwe"}], // [{p: "شوې", f: "shuwe"}], // [{p: "شوو", f: "shuwo"}], // ], // }; // expect(concatInflections(unisexInfs2, partInfs2)).toEqual({ // masc: [ // [{p: "زوړ شوی", f: "zoR shuwey"}, {p: "تور شوی", f: "tor shuwey"}], // [{p: "زاړه شوي", f: "zaaRu shuwee"}], // [{p: "زړو شویو", f: "zaRo shuwiyo"}], // ], // fem: [ // [{p: "زړه شوې", f: "zaRa shuwe"}], // [{p: "زړې شوې", f: "zaRe shuwe"}], // [{p: "زړو شوو", f: "zaRo shuwo"}], // ], // }); expect(concatInflections({ p: "خفه", f: "khufa" }, partInfs)).toEqual({ masc: [ [{p: "خفه شوی", f: "khufa shuwey"}], [{p: "خفه شوي", f: "khufa shuwee"}], [{p: "خفه شویو", f: "khufa shuwiyo"}, {p: "خفه شوو", f: "khufa shuwo"}], ], fem: [ [{p: "خفه شوې", f: "khufa shuwe"}], [{p: "خفه شوې", f: "khufa shuwe"}], [{p: "خفه شوو", f: "khufa shuwo"}], ], }); }); test("psStringEquals", () => { expect( psStringEquals({ p: "تور", f: "tor" }, { p: "تور", f: "tor" }) ).toBe(true); expect( psStringEquals({ p: "بور", f: "bor" }, { p: "تور", f: "tor" }) ).toBe(false); expect( psStringEquals({ p: "ملګری", f: "malgúrey" }, { p: "ملګری", f: "malgurey" }) ).toBe(false); expect( psStringEquals({ p: "ملګری", f: "malgúrey" }, { p: "ملګری", f: "malgurey" }, true) ).toBe(true); }); test("removeRetroflexR", () => { expect( removeRetroflexR({ p: "وکړ", f: "óokR" }), ).toEqual({ p: "وک", f: "óok" }); }); test("endsInAConsonant", () => { const does: T.PsString[] = [ { p: "پښتون", f: "puxtoon" }, { p: "کور", f: "kor" }, { p: "ګناه", f: "gUnaah" }, { p: "زوی", f: "zooy" }, { p: "ځای", f: "dzaay" }, ]; const doesnt: T.PsString[] = [ { p: "بابا", f: "baabaa" }, { p: "قاضي", f: "qaazee" }, { p: "ګناه", f: "gunaa" }, { p: "اطلاع", f: "itlaa" }, ]; does.forEach((x) => expect(endsInConsonant(x)).toBe(true)); doesnt.forEach((x) => expect(endsInConsonant(x)).toBe(false)); }) test("addOEnding", () => { const tests: { in: T.PsString, out: T.PsString[] }[] = [ { in: { p: "کتابونه", f: "kitaabóona" }, out: [{ p: "کتابونو", f: "kitaabóono" }], }, { in: { p: "کارغان", f: "kaargháan" }, out: [{ p: "کارغانو", f: "kaargháano" }], }, { in: { p: "کارغانې", f: "kaargháane" }, out: [{ p: "کارغانو", f: "kaargháano" }], }, { in: { p: "ښځې", f: "xúdze" }, out: [{ p: "ښځو", f: "xúdzo" }], }, // TODO: Make this last thing accented?? { in: { p: "کور", f: "kor" }, out: [{ p: "کورو", f: "koro" }], }, { in: { p: "سړی", f: "saRéy" }, out: [{ p: "سړیو", f: "saRíyo" }, { p: "سړو", f: "saRó"}], }, { in: { p: "افغانۍ", f: "afghaanúy" }, out: [{ p: "افغانیو", f: "afghaanúyo" }], }, { in: { p: "اوبه", f: "oobú" }, out: [{ p: "اوبو", f: "oobó" }], }, { in: { p: "شودې", f: "shoodé" }, out: [{ p: "شودو", f: "shoodó" }], }, { in: { p: "منابع", f: "manaabí" }, out: [{ p: "منابو", f: "manaabó" }], }, { in: { p: "انبیا", f: "ambiyáa" }, out: [{ p: "انبیاوو", f: "ambiyáawo" }], }, { in: { p: "مراجع", f: "maraají'" }, out: [{ p: "مراجو", f: "maraajó" }], }, { in: { p: "اتباع", f: "atbaa" }, out: [{ p: "اتباعوو", f: "atbaawo" }], }, { in: { p: "اتباع", "f": "atbáa'" }, out: [{ p: "اتباعوو", f: "atbáawo" }], }, ]; tests.forEach((t) => { expect(addOEnding(t.in)).toEqual(t.out); }); }); test("endsInShwa", () => { expect(endsInShwa({ p: "ښایسته", f: "xaaystú" })).toBe(true); expect(endsInShwa({ p: "ښایسته", f: "xaaystu" })).toBe(true); expect(endsInShwa({ p: "ښایسته", f: "xaaysta" })).toBe(false); expect(endsInShwa({ p: "کور", f: "kor" })).toBe(false); }); test("splitPsByVarients", () => { expect(splitPsByVarients({ p: "حوادث, حادثات", f: "hawáadis, haadisáat" })) .toEqual([{ p: "حوادث", f: "hawáadis" }, { p: "حادثات", f: "haadisáat" }]); // should work with Pashto comma too expect(splitPsByVarients({ p: "حوادث، حادثات", f: "hawáadis, haadisáat" })) .toEqual([{ p: "حوادث", f: "hawáadis" }, { p: "حادثات", f: "haadisáat" }]); expect(splitPsByVarients({ p: "کور", f: "kor" })) .toEqual([{ p: "کور", f: "kor" }]); }); test("endsWith", () => { expect(endsWith({ p: "ی", f: "ey" }, { p: "سړی", f: "saRey" })) .toBe(true); // f variations should be removed in case of using DictionaryEntry expect(endsWith({ p: "ی", f: "ey" }, { p: "سړی", f: "saRey, saRaayyy" })) .toBe(true); expect(endsWith({ p: "ي", f: "ee" }, { p: "سړی", f: "saRey" })) .toBe(false); expect(endsWith({ p: "ه", f: "u" }, { p: "ویده", f: "weedú" }, true)) .toBe(false); expect(endsWith({ p: "ه", f: "u" }, { p: "ویده", f: "weedú" })) .toBe(true); expect(endsWith([{ p: "وی", f: "ooy" }, { p: "ای", f: "aay" }], { p: "چای", f: "chaay" })) .toBe(true); expect(endsWith({ p: "ه"}, { p: "ویده", f: "weedú" })) .toBe(true); expect(endsWith({ p: "ت"}, { p: "ویده", f: "weedú" })) .toBe(false); expect(endsWith({ f: "u" }, { p: "ویده", f: "weedú" })) .toBe(true); expect(endsWith({ f: "u" }, { p: "ویده", f: "weedú" }, true)) .toBe(false); expect(endsWith({ f: ["d", "t"] }, { p: "چت", f: "chat" })) .toBe(true); expect(endsWith({ f: ["d", "D"] }, { p: "چت", f: "chat" })) .toBe(false); expect(endsWith({ p: ["د", "ت"] }, { p: "چت", f: "chat" })) .toBe(true); expect(endsWith([{ p: "ای", f: "aay" }, { p: ["د", "ت"] }], { p: "چت", f: "chat" })) .toBe(true); expect(endsWith({ p: ["ډ", "د"] }, { p: "چت", f: "chat" })) .toBe(false); // ignore ' expect(endsWith({ p: "ا", f: "aa" }, { p: "اعدا", f: "idaa'" })) .toBe(true); expect(endsWith({ p: "ا", f: "aa'" }, { p: "اعدا", f: "idaa" })) .toBe(true); // ability to curry expect(endsWith({ p: "ی", f: "ey" })({ p: "سړی", f: "saRéy" })) .toBe(true); expect(endsWith({ p: "ی", f: "ey" }, true)({ p: "سړی", f: "saRéy" })) .toBe(false); expect(endsWith({ f: ["d", "D"] })({ p: "چت", f: "chat" })) .toBe(false); });