]> gitweb.fperrin.net Git - DictionaryPC.git/blob - src/com/hughes/android/dictionary/DictionaryTest.java
go
[DictionaryPC.git] / src / com / hughes / android / dictionary / DictionaryTest.java
1 package com.hughes.android.dictionary;\r
2 \r
3 import java.io.File;\r
4 import java.io.IOException;\r
5 import java.io.RandomAccessFile;\r
6 import java.util.ArrayList;\r
7 import java.util.Arrays;\r
8 import java.util.Collections;\r
9 import java.util.LinkedHashSet;\r
10 import java.util.List;\r
11 import java.util.Set;\r
12 import java.util.concurrent.atomic.AtomicBoolean;\r
13 \r
14 import junit.framework.TestCase;\r
15 \r
16 import com.hughes.android.dictionary.Dictionary.IndexEntry;\r
17 import com.hughes.android.dictionary.Dictionary.LanguageData;\r
18 import com.hughes.android.dictionary.Dictionary.Row;\r
19 \r
20 public class DictionaryTest extends TestCase {\r
21 \r
22   public void testDictionary() throws IOException {\r
23     final File file = File.createTempFile("asdf", "asdf");\r
24     file.deleteOnExit();\r
25 \r
26 //    final Dictionary goldenDict;\r
27     final List<Entry> entries = Arrays.asList(\r
28         Entry.parseFromLine("der Hund :: the dog", false),\r
29         Entry.parseFromLine("Die grosse Katze :: The big cat", false), \r
30         Entry.parseFromLine("die Katze :: the cat", false),\r
31         Entry.parseFromLine("gross :: big", false),\r
32         Entry.parseFromLine("Dieb :: thief", false),\r
33         Entry.parseFromLine("rennen :: run", false));\r
34 \r
35     {\r
36       final Dictionary dict = new Dictionary("test", Language.DE, Language.EN);\r
37       dict.entries.addAll(entries);\r
38       DictionaryBuilder.createIndex(dict, Entry.LANG1);\r
39       DictionaryBuilder.createIndex(dict, Entry.LANG2);\r
40       final RandomAccessFile raf = new RandomAccessFile(file, "rw");\r
41       dict.write(raf);\r
42       raf.close();\r
43       \r
44 //      goldenDict = dict;\r
45     }\r
46 \r
47     final RandomAccessFile raf = new RandomAccessFile(file, "r");\r
48     final Dictionary dict = new Dictionary(raf);\r
49     \r
50     assertEquals(entries, dict.entries);\r
51     \r
52     assertEquals("der", dict.languageDatas[0].sortedIndex.get(0).word);\r
53     assertEquals("die", dict.languageDatas[0].sortedIndex.get(1).word);\r
54     \r
55     for (final IndexEntry indexEntry : dict.languageDatas[0].sortedIndex) {\r
56       System.out.println(indexEntry);\r
57     }\r
58 \r
59     int rowCount = 0;\r
60     for (final Row row : dict.languageDatas[0].rows) {\r
61       if (row.index >= 0) {\r
62         System.out.println("  " + rowCount + ":" + dict.entries.get(row.index));\r
63       } else {\r
64         System.out.println(rowCount + ":" + dict.languageDatas[0].sortedIndex.get(-row.index - 1));\r
65       }\r
66       ++rowCount;\r
67     }\r
68 \r
69     for (int l = 0; l <= 1; l++) {\r
70       final LanguageData languageData = dict.languageDatas[l];\r
71       for (int i = 0; i < languageData.sortedIndex.size(); i++) {\r
72         final IndexEntry indexEntry = languageData.sortedIndex.get(i);\r
73         if (indexEntry.word.toLowerCase().equals("dieb"))\r
74           System.out.println();\r
75         final IndexEntry lookedUpEntry = languageData.sortedIndex.get(languageData.lookup(indexEntry.word, new AtomicBoolean(false)));\r
76         if (!indexEntry.word.toLowerCase().equals(lookedUpEntry.word.toLowerCase()))\r
77           System.out.println();\r
78         assertEquals(indexEntry.word.toLowerCase(), lookedUpEntry.word.toLowerCase());\r
79       }\r
80     }\r
81     \r
82     assertEquals("die", dict.languageDatas[0].sortedIndex.get(dict.languageDatas[0].lookup("Die", new AtomicBoolean())).word);\r
83     assertEquals("die", dict.languageDatas[0].sortedIndex.get(dict.languageDatas[0].lookup("die", new AtomicBoolean())).word);\r
84 \r
85   }\r
86   \r
87   public void testTextNorm() throws IOException {\r
88     System.out.println("\n\ntestTextNorm");\r
89     final List<Entry> entries = Arrays.asList(\r
90         Entry.parseFromLine("Hund {m} :: dog", true),\r
91         Entry.parseFromLine("'CHRISTOS' :: doh", true),\r
92         Entry.parseFromLine("\"Pick-up\"-Presse {f} :: baler", true),\r
93         Entry.parseFromLine("(Ach was), echt? [auch ironisch] :: No shit! [also ironic]", true),\r
94         Entry.parseFromLine("(akuter) Myokardinfarkt {m} <AMI / MI> :: (acute) myocardial infarction <AMI / MI>", true),\r
95         Entry.parseFromLine("(reine) Vermutung {f} :: guesswork", true),\r
96         Entry.parseFromLine("(mit) 6:1 vorne liegen :: to be 6-1 up [football]", true),\r
97         Entry.parseFromLine("(auf) den Knopf drücken [auch fig.: auslösen] :: to push the button [also fig.: initiate]", false),\r
98         Entry.parseFromLine("Adjektiv {n} /Adj./; Eigenschaftswort {n} [gramm.] | Adjektive {pl}; Eigenschaftswoerter {pl} :: adjective /adj./ | adjectives", true),\r
99         Entry.parseFromLine("Älteste {m,f}; Ältester :: oldest; eldest", true),\r
100         Entry.parseFromLine("\"...\", schloss er an. :: '...,' he added.", true),\r
101         Entry.parseFromLine("besonderer | besondere | besonderes :: extra", false),\r
102         Entry.parseFromLine("| zu Pferde; zu Pferd | reiten :: horseback | on horseback | go on horseback", true),\r
103         Entry.parseFromLine("Hauptaugenmerk {m} | sein Hauptaugenmerk richten auf ::  | to focus (one's) attention on", true)\r
104         );\r
105 \r
106     assertFalse(entries.contains(null));\r
107     \r
108     // Hyphenated words get put both multiple listings.\r
109 \r
110     final Dictionary dict = new Dictionary("test", Language.DE, Language.EN);\r
111     dict.entries.addAll(entries);\r
112     DictionaryBuilder.createIndex(dict, Entry.LANG1);\r
113     DictionaryBuilder.createIndex(dict, Entry.LANG2);\r
114     \r
115     for (int lang = 0; lang <= 1; lang++) {\r
116       final LanguageData languageData = dict.languageDatas[lang];\r
117       System.out.println("\n" + languageData.language);\r
118       final Set<String> words = new LinkedHashSet<String>();\r
119       for (int i = 0; i < languageData.sortedIndex.size(); i++) {\r
120         final IndexEntry indexEntry = languageData.sortedIndex.get(i);\r
121         System.out.println(indexEntry);\r
122         words.add(indexEntry.word);\r
123       }\r
124       if (lang == 0) {\r
125         assertTrue(words.contains("CHRISTOS"));\r
126         assertTrue(words.contains("akuter"));\r
127       } else {\r
128         assertTrue(words.contains("6-1"));\r
129       }\r
130     }\r
131 \r
132   }\r
133   \r
134   public void testGermanSort() {\r
135     assertEquals("aüÄ", Language.DE.textNorm("aueAe"));\r
136     final List<String> words = Arrays.asList(\r
137         "erben",\r
138         "Erben",\r
139         "er-ben",\r
140         "Erbse",\r
141         "Erbsen",\r
142         "essen",\r
143         "Essen",\r
144         "Grosformat",\r
145         "Grosformats",\r
146         "Grossformat",\r
147         "Großformat",\r
148         "Grossformats",\r
149         "Großformats",\r
150         "Großpoo",\r
151         "Großpoos",\r
152         "hulle",\r
153         "Hulle",\r
154         "hülle",\r
155         "huelle",\r
156         "Hülle",\r
157         "Huelle",\r
158         "Hum"\r
159         );\r
160     assertEquals(0, Language.DE.sortComparator.compare("hülle", "huelle"));\r
161     assertEquals(0, Language.DE.sortComparator.compare("huelle", "hülle"));\r
162     \r
163     assertEquals(-1, Language.DE.sortComparator.compare("hülle", "Hülle"));\r
164     assertEquals(0, Language.DE.findComparator.compare("hülle", "Hülle"));\r
165     assertEquals(-1, Language.DE.findComparator.compare("hulle", "Hülle"));\r
166 \r
167     \r
168     for (final String s : words) {\r
169       System.out.println(s + "\t" + Language.DE.textNorm(s));\r
170     }\r
171     final List<String> sorted = new ArrayList<String>(words);\r
172 //    Collections.shuffle(shuffled, new Random(0));\r
173     Collections.sort(sorted, Language.DE.sortComparator);\r
174     System.out.println(sorted.toString());\r
175     for (int i = 0; i < words.size(); ++i) {\r
176       System.out.println(words.get(i) + "\t" + sorted.get(i));\r
177       assertEquals(words.get(i), sorted.get(i));\r
178     }\r
179   }\r
180 \r
181   public void testEnglishSort() {\r
182 \r
183     final List<String> words = Arrays.asList(\r
184         "preppie", \r
185         "preppy",\r
186         "pre-print", \r
187         "preprocess");\r
188     \r
189     final List<String> sorted = new ArrayList<String>(words);\r
190     Collections.sort(sorted, Language.EN.sortComparator);\r
191     for (int i = 0; i < words.size(); ++i) {\r
192       if (i > 0) {\r
193         assertTrue(Language.EN.sortComparator.compare(words.get(i-1), words.get(i)) < 0);\r
194       }\r
195       System.out.println(words.get(i) + "\t" + sorted.get(i));\r
196       assertEquals(words.get(i), sorted.get(i));\r
197     }\r
198     \r
199     assertTrue(Language.EN.sortCollator.compare("preppy", "pre-print") < 0);\r
200 \r
201   }\r
202 \r
203 }\r