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