1
15
16 package gate.util;
17
18 import java.util.Collection;
19
20 import junit.framework.*;
21
22 import gate.*;
23 import gate.creole.ResourceData;
24
25
27 public class TestBumpyStack extends TestCase
28 {
29
30 private static final boolean DEBUG = false;
31
32
33 public TestBumpyStack(String name) { super(name); }
34
35
36 public void setUp() {
37 }
39
40 public static Test suite() {
41 return new TestSuite(TestBumpyStack.class);
42 }
44 public static void callGC(){
45 Runtime runtime = Runtime.getRuntime();
46 long memory;
47 do {
48 memory = runtime.totalMemory() - runtime.freeMemory();
49 runtime.gc();
50 try {
51 Thread.currentThread().wait(300);
52 } catch (Exception e) {}
53 runtime.gc();
54 } while (memory < runtime.totalMemory() - runtime.freeMemory());
55 }
56
57
58 public void testBumpiness() throws Exception {
59 WeakBumpyStack bumper = new WeakBumpyStack();
60
61 String s1 = new String("s1");
62 String s2 = new String("s2");
63 String s3 = new String("s3");
64
65 bumper.push(s3);
66 bumper.push(s2);
67 bumper.push(s1);
68
69 assertTrue(
70 "managed to bump non-existent element",
71 ! bumper.bump(new String("something"))
72 );
73
74 assertTrue("stack wrong length (I): " + bumper.size(), bumper.size() == 3);
75 assertTrue("couldn't bump s2", bumper.bump(s2));
76 assertTrue("s2 not front of stack", ((String) bumper.pop()).equals("s2"));
77 assertTrue("stack wrong length (II)" + bumper.size(), bumper.size() == 2);
78 }
80
84 public void testSelfCleaning() throws Exception {
85 Collection instances = ((ResourceData)
87 Gate.getCreoleRegister().
88 get("gate.corpora.DocumentImpl")).
89 getInstantiations();
90 int docCnt = instances == null ? 0: instances.size();
91
92 instances = ((ResourceData)
93 Gate.getCreoleRegister().
94 get("gate.corpora.CorpusImpl")).
95 getInstantiations();
96 int corpusCnt = instances == null ? 0: instances.size();
97
98 instances = ((ResourceData)
99 Gate.getCreoleRegister().
100 get("gate.creole.tokeniser.DefaultTokeniser")).
101 getInstantiations();
102 int tokCnt = instances == null ? 0: instances.size();
103
104 instances = ((ResourceData)
105 Gate.getCreoleRegister().
106 get("gate.creole.ANNIETransducer")).
107 getInstantiations();
108 int japeCnt = instances == null ? 0: instances.size();
109
110 instances = ((ResourceData)
111 Gate.getCreoleRegister().
112 get("gate.creole.SerialController")).
113 getInstantiations();
114 int serctlCnt = instances == null ? 0: instances.size();
115
116 instances = null;
117
120 Resource res = Factory.newCorpus("corpus1");
121 res.getFeatures().put("large", new byte[500000]);
122 res = Factory.newCorpus("corpus2");
123 res.getFeatures().put("large", new byte[500000]);
124 res = Factory.newCorpus("corpus3");
125 res.getFeatures().put("large", new byte[500000]);
126
127 res = Factory.newDocument("content");
128 res.getFeatures().put("large", new byte[500000]);
129 res = Factory.newDocument(Gate.getUrl("tests/doc0.html"));
130 res.getFeatures().put("large", new byte[500000]);
131 res = Factory.newDocument(Gate.getUrl("tests/doc0.html"));
132 res.getFeatures().put("large", new byte[500000]);
133 res = Factory.newDocument(Gate.getUrl("tests/doc0.html"));
134 res.getFeatures().put("large", new byte[500000]);
135
136 res = Factory.createResource("gate.creole.tokeniser.DefaultTokeniser");
138 res.getFeatures().put("large", new byte[500000]);
139 res = Factory.createResource("gate.creole.tokeniser.DefaultTokeniser");
140 res.getFeatures().put("large", new byte[500000]);
141 res = Factory.createResource("gate.creole.tokeniser.DefaultTokeniser");
142 res.getFeatures().put("large", new byte[500000]);
143
144 res = Factory.createResource("gate.creole.ANNIETransducer");
145 res.getFeatures().put("large", new byte[500000]);
146
147 res = Factory.createResource("gate.creole.SerialController");
149 res.getFeatures().put("large", new byte[500000]);
150 res = Factory.createResource("gate.creole.SerialController");
151 res.getFeatures().put("large", new byte[500000]);
152 res = Factory.createResource("gate.creole.SerialController");
153 res.getFeatures().put("large", new byte[500000]);
154 res = null;
155
156
157 callGC();
159
160 int newDocCnt = ((ResourceData)
162 Gate.getCreoleRegister().
163 get("gate.corpora.DocumentImpl")).
164 getInstantiations().size();
165
166 int newCorpusCnt = ((ResourceData)
167 Gate.getCreoleRegister().
168 get("gate.corpora.CorpusImpl")).
169 getInstantiations().size();
170 int newTokCnt = ((ResourceData)
171 Gate.getCreoleRegister().
172 get("gate.creole.tokeniser.DefaultTokeniser")).
173 getInstantiations().size();
174 int newJapeCnt = ((ResourceData)
175 Gate.getCreoleRegister().
176 get("gate.creole.ANNIETransducer")).
177 getInstantiations().size();
178 int newSerctlCnt = ((ResourceData)
179 Gate.getCreoleRegister().
180 get("gate.creole.SerialController")).
181 getInstantiations().size();
182
183 String message =
184 "\nWARNING: testSelfCleaning: GC didn't run:" +
185 "\nDocs expected: " + docCnt + ", got: " + newDocCnt +
186 "\nCorpora expected: " + corpusCnt + ", got: " + newCorpusCnt +
187 "\nTokenisers expected: " + tokCnt + ", got: " + newTokCnt +
188 "\nJapes expected: " + japeCnt + ", got: " + newJapeCnt +
189 "\nSerCtls expected: " + serctlCnt + ", got: " + newSerctlCnt;
190
191 if(! (
195 docCnt + 4 > newDocCnt &&
196 corpusCnt + 3 > newCorpusCnt &&
197 tokCnt + 3 > newTokCnt &&
198 japeCnt + 1 > newJapeCnt &&
199 serctlCnt + 3 > newSerctlCnt
200 ) && DEBUG)
201 Err.prln(message);
202 }
203 }