summaryrefslogtreecommitdiff
path: root/src/test/java/bjc/inflexion/InflectionMLTest.java
blob: d94407fe828342f1e836594ce45ef78b4fb9f4ed (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package bjc.inflexion;

import org.junit.Test;

import static org.junit.Assert.*;
import static bjc.inflexion.InflectPair.pair;

import static bjc.inflexion.InflectionML.inflect;

/**
 * Tests for inflection markup.
 * 
 * @author bjculkin
 *
 */
public class InflectionMLTest {
	/**
	 * Test inflection markup.
	 */
	@Test
	public void testML() {
		//////////////////////
		// Check # command   //
		//////////////////////

		// Check general inflection
		assertInflects("<#:%s> <N:indexes> %s found", pair("0 indexes were found", 0, "were"),
				pair("1 index was found", 1, "was"), pair("99 indexes were found", 99, "were"));

		// Check fancier inflection
		assertInflects("<#wnc:%d> <Noun:indexes> %s found", pair("no indexes were found", 0, "were"),
				pair("one index was found", 1, "was"), pair("99 indexes were found", 99, "were"));

		// Check count inflection
		assertInflects("<#w20:%d> <N:indexes> were found", pair("six indexes were found", 6),
				pair("nineteen indexes were found", 19), pair("20 indexes were found", 20));

		// Check 'n' option
		assertInflects("<#n:%d> <N:results>", pair("no results", 0), pair("7 results", 7));

		// FIXME
		//
		// Adjust this to use <V> for were/was when it is implemented
		// Check general inflection
		assertInflects("<#%s:%d> <N:item> %s found", pair("no items were found", "n", 0, "were"),
				pair("no item was found", "s", 0, "was"));

		// Check article picking
		assertInflects("<#a:%d> <N:%s>", pair("a result", 1, "results"), pair("3 results", 3, "results"),
				pair("an outcome", 1, "outcomes"), pair("7 outcomes", 7, "outcomes"));

		// Check 'w' option
		assertInflects("<#w:%d> <N:results>", pair("six results", 6), pair("ten results", 10),
				pair("11 results", 11));
		// Check 'o' option
		assertInflects("<#o:%d> <N:results>", pair("6th result", 6), pair("11th result", 11),
				pair("22nd result", 22));
		assertInflects("<#ow:%d> <N:results>", pair("first result", 1), pair("sixth result", 6),
				pair("22nd result", 22));
		assertInflects("<#o15:%d> <N:results>", pair("6th result", 6), pair("11th result", 11),
				pair("22 results", 22));

		// Check 'f' option
		assertInflects("Found <#f:%d> <N:matches>", pair("Found no matches", 0), pair("Found one match", 1),
				pair("Found a couple of matches", 2), pair("Found a few matches", 4),
				pair("Found several matches", 8), pair("Found many matches", 11));

		assertInflects("Searching for <Np:items>....found <#f1:%d>",
				pair("Searching for items....found none", 0),
				pair("Searching for items....found one", 1),
				pair("Searching for items....found a couple", 2),
				pair("Searching for items....found a few", 4),
				pair("Searching for items....found several", 8),
				pair("Searching for items....found many", 11));

		assertInflects("Found <#fs:%d> <N:matches>", pair("Found no match", 0),
				pair("Found several matches", 7));
		assertInflects("Found <#fa:%d> <N:matches>", pair("Found a match", 1),
				pair("Found several matches", 7));

		// Check 'e' option
		assertInflects("Found <#e:%d> <N:matches>", pair("Found no match", 0), pair("Found a match", 1),
				pair("Found ten matches", 10), pair("Found 12 matches", 12));

		// Check 'd' option
		assertInflects("<#d:%d><N:Match> found", pair("Match found", 1), pair("Matches found", 2));

		////////////////////////
		// Check N command      //
		///////////////////////

		// Check 'c' option
		assertInflects("<#:%d> <N:%s> found", pair("7 maximums found", 7, "maximum"),
				pair("7 formulas found", 7, "formula"), pair("7 corpuses found", 7, "corpuses"),
				pair("7 brothers found", 7, "brothers"));

		assertInflects("<#:%d> <Nc:%s> found", pair("7 maxima found", 7, "maximum"),
				pair("7 formulae found", 7, "formula"), pair("7 corpora found", 7, "corpus"),
				pair("7 brethren found", 7, "brother"));
	}

	private static void assertInflects(String exp, String real) {
		assertEquals(exp, inflect(real));
	}

	private static void assertInflects(String real, InflectPair... pairs) {
		for (InflectPair pair : pairs) {
			assertEquals(pair.exp, inflect(String.format(real, pair.pars)));
		}
	}
}