pashto-inflector/src/lib/p-text-helpers.test.ts

1175 lines
56 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 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<T.PsString> = {
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);
expect(endsWith({ p: "ی", f: "éy" }, { p: "سړی", f: "saRey" }))
.toBe(true);
expect(endsWith({ p: "ی", f: "éy" }, { p: "سړی", f: "saRey" }, true))
.toBe(false);
// 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);
});