Skip to content

Instantly share code, notes, and snippets.

@daraul
Forked from letsgetrandy/past-tense.js
Created September 15, 2017 20:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save daraul/50df89e9245b7a1fcf155b23b41a35ba to your computer and use it in GitHub Desktop.
Save daraul/50df89e9245b7a1fcf155b23b41a35ba to your computer and use it in GitHub Desktop.
var exceptions = {
"are": "were",
"eat": "ate",
"go": "went",
"have": "had",
"inherit": "inherited",
"is": "was",
"run": "ran",
"sit": "sat",
"visit": "visited",
"make": "made",
"pay": "paid"
}
// grammatically predictable rules
function getPastTense(verb) {
if (exceptions[verb]) {
return exceptions[verb];
}
if ((/e$/i).test(verb)) {
return verb + 'd';
}
if ((/[aeiou]c/i).test(verb)) {
return verb + 'ked';
}
// for american english only
if ((/el$/i).test(verb)) {
return verb + 'ed';
}
if ((/[aeio][aeiou][dlmnprst]$/).test(verb)) {
return verb + 'ed';
}
if ((/[aeiou][bdglmnprst]$/i).test(verb)) {
return verb.replace(/(.+[aeiou])([bdglmnprst])/, '$1$2$2ed');
}
return verb + 'ed';
}
// tests
var tests = {
"bake": "baked",
"smile": "smiled",
"free": "freed",
"dye": "dyed",
"tiptoe": "tiptoed",
"travel": "traveled",
"model": "modeled",
"distil": "distilled",
"equal": "equalled",
"admit": "admitted",
"commit": "committed",
"refer": "referred",
"inherit": "inherited",
"visit": "visited",
"stop": "stopped",
"tap": "tapped",
"sob": "sobbed",
"treat": "treated",
"wheel": "wheeled",
"pour": "poured",
"picnic": "picnicked",
"mimic": "mimicked",
"traffic": "trafficked",
"pay": "paid",
"make": "made"
};
for (verb in tests) {
var past = getPastTense(verb);
console.log('Expect "' + verb + '" to be "' + tests[verb] + '": ' + (past === tests[verb] ? 'PASS' : 'FAIL (' + past + ')') );
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment