-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathNgramAnalyserTest.java
More file actions
156 lines (129 loc) · 5.25 KB
/
Copy pathNgramAnalyserTest.java
File metadata and controls
156 lines (129 loc) · 5.25 KB
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.lang.reflect.Field;
import java.util.HashMap;
import org.junit.Test;
/**
* Unit tests for the utility class MarkovModel.
* Do not change this file. Add new tests to the ProjectTest class.
*
* @author Arran Stewart
* @version May 2017
*/
public class NgramAnalyserTest
{
/** tolerance for double comparisons */
static final double tolerance = 0.0001;
/** Use reflection to extract the ngram map, even though it's private.
*/
@SuppressWarnings("unchecked")
public static HashMap<String, Integer> extractMap(NgramAnalyser analyser) {
try {
Field ngramField = analyser.getClass().getDeclaredField("ngram");
ngramField.setAccessible(true);
return (HashMap<String, Integer>) ngramField.get(analyser);
} catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException | SecurityException ex) {
throw new RuntimeException(ex);
}
}
@Test(timeout=1000)
public void testSimpleOneGram() {
//default value for n should be 1
NgramAnalyser analyser = new NgramAnalyser("abc");
assertEquals(3,analyser.getAlphabetSize());
HashMap<String, Integer> ngram = extractMap(analyser);
assertEquals(3,analyser.getDistinctNgramCount());
assertEquals(1,(int)ngram.get("a"));
assertEquals(1,(int)ngram.get("b"));
assertEquals(1,(int)ngram.get("c"));
}
@Test(timeout=1000)
public void testOneGram() {
//default value for n should be 1
NgramAnalyser analyser = new NgramAnalyser("aabcabaacaac");
assertEquals(3,analyser.getAlphabetSize());
HashMap<String, Integer> ngram = extractMap(analyser);
assertEquals(3,analyser.getDistinctNgramCount());
assertEquals(7,(int)ngram.get("a"));
assertEquals(2,(int)ngram.get("b"));
assertEquals(3,(int)ngram.get("c"));
}
@Test(timeout=1000,expected = IllegalArgumentException.class) //TODO exception catch
public void testNullString()
{
NgramAnalyser analyser = new NgramAnalyser(1, null);
}
@Test(timeout=1000,expected = IllegalArgumentException.class) //TODO exception catch
public void testEmptyString()
{
NgramAnalyser analyser = new NgramAnalyser(3, "");
}
@Test(timeout=1000,expected = IllegalArgumentException.class) //TODO exception catch
public void testInvalidNtooLow()
{
NgramAnalyser analyser = new NgramAnalyser(0, "test");
}
@Test(timeout=1000,expected = IllegalArgumentException.class) //TODO exception catch
public void testInvalidNtooHigh()
{
NgramAnalyser analyser = new NgramAnalyser(5, "test");
}
@Test(timeout=1000)
public void testBiGrams()
{
NgramAnalyser analyser = new NgramAnalyser(2, "aabcabaacaac");
assertEquals(3,analyser.getAlphabetSize());
assertEquals(6,analyser.getDistinctNgramCount() );
HashMap<String, Integer> ngram = extractMap(analyser);
assertEquals(3,(int) ngram.get("aa"));
assertEquals(2,(int) ngram.get("ab"));
assertEquals(2,(int) ngram.get("ac"));
assertEquals(1,(int) ngram.get("ba"));
assertEquals(1,(int) ngram.get("bc"));
assertEquals(3,(int) ngram.get("ca"));
}
@Test(timeout=1000)
public void testTriGrams() {
NgramAnalyser analyser = new NgramAnalyser(3,"aabcabaacaac");
assertEquals(3,analyser.getAlphabetSize());
assertEquals(9,analyser.getDistinctNgramCount() );
HashMap<String, Integer> ngram = extractMap(analyser);
assertEquals(1,(int)ngram.get("aab"));
assertEquals(2,(int)ngram.get("aac"));
assertEquals(1,(int)ngram.get("aba"));
assertEquals(1,(int)ngram.get("abc"));
assertEquals(2,(int)ngram.get("aca"));
assertEquals(1,(int)ngram.get("baa"));
assertEquals(1,(int)ngram.get("bca"));
assertEquals(2,(int)ngram.get("caa"));
assertEquals(1,(int)ngram.get("cab"));
}
@Test(timeout=1000)
public void testNgramCount() {
NgramAnalyser analyser;
String[] inputTexts = { "WXyZ", "abc", "aabcabaacaac" };
int[] ngramSizes = {1, 2, 3};
for (String inputText : inputTexts) {
for (int n : ngramSizes) {
analyser = new NgramAnalyser(n,inputText);
assertEquals( inputText.length(), analyser.getNgramCount());
}
}
}
@Test(timeout=1000)
public void fieldsUnaltered() {
NgramAnalyser analyser = new NgramAnalyser(1,"aa");
Class<? extends NgramAnalyser> clazz = analyser.getClass();
assertEquals("should be no public fields", 0, clazz.getFields().length );
int nf = clazz.getDeclaredFields().length;
assertTrue("should be at least 2 fields", nf >= 2);
//assertEquals("should be 2 fields total", 2, clazz.getDeclaredFields().length );
//allow more than this
try {
Field ngramField = clazz.getDeclaredField("ngram");
Field alphField = clazz.getDeclaredField("alphabetSize");
} catch (NoSuchFieldException | SecurityException e) {
throw new RuntimeException(e);
}
}
}