1 package net.sf.cglib.util;
2
3 import net.sf.cglib.CodeGenTestCase;
4 import junit.framework.*;
5
6 public class TestXmlParsing extends CodeGenTestCase {
7 private static final String ATTRIBUTE_STR = "attribute";
8 private static final String ATTRIBUTE_DIRECTIVE_STR = "directive.attribute";
9 private static final String BODY_STR = "body";
10 private static final String DECLARATION_STR = "declaration";
11 private static final String DOBODY_STR = "doBody";
12 private static final String ELEMENT_STR = "element";
13 private static final String FALLBACK_STR = "fallback";
14 private static final String FORWARD_STR = "forward";
15 private static final String GET_PROPERTY_STR = "getProperty";
16 private static final String INCLUDE_STR = "include";
17 private static final String INCLUDE_DIRECTIVE_STR = "directive.include";
18 private static final String INVOKE_STR = "invoke";
19 private static final String OUTPUT_STR = "output";
20 private static final String PAGE_DIRECTIVE_STR = "directive.page";
21 private static final String PARAMS_STR = "params";
22 private static final String PARAM_STR = "param";
23 private static final String PLUGIN_STR = "plugin";
24 private static final String ROOT_STR = "root";
25 private static final String SET_PROPERTY_STR = "setProperty";
26 private static final String TAG_DIRECTIVE_STR = "directive.tag";
27 private static final String TEXT_STR = "text";
28 private static final String USE_BEAN_STR = "useBean";
29 private static final String VARIABLE_DIRECTIVE_STR = "variable";
30
31 private static final int ATTRIBUTE_IDX = 0;
32 private static final int ATTRIBUTE_DIRECTIVE_IDX = 1;
33 private static final int BODY_IDX = 2;
34 private static final int DECLARATION_IDX = 3;
35 private static final int DOBODY_IDX = 4;
36 private static final int ELEMENT_IDX = 5;
37 private static final int FALLBACK_IDX = 6;
38 private static final int FORWARD_IDX = 7;
39 private static final int GET_PROPERTY_IDX = 8;
40 private static final int INCLUDE_IDX = 9;
41 private static final int INCLUDE_DIRECTIVE_IDX = 10;
42 private static final int INVOKE_IDX = 11;
43 private static final int OUTPUT_IDX = 12;
44 private static final int PAGE_DIRECTIVE_IDX = 13;
45 private static final int PARAMS_IDX = 14;
46 private static final int PARAM_IDX = 15;
47 private static final int PLUGIN_IDX = 16;
48 private static final int ROOT_IDX = 17;
49 private static final int SET_PROPERTY_IDX = 18;
50 private static final int TAG_DIRECTIVE_IDX = 19;
51 private static final int TEXT_IDX = 20;
52 private static final int USE_BEAN_IDX = 21;
53 private static final int VARIABLE_DIRECTIVE_IDX = 22;
54
55 private static final String[] M1 = {
56 ATTRIBUTE_STR,
57 ATTRIBUTE_DIRECTIVE_STR,
58 BODY_STR,
59 DECLARATION_STR,
60 DOBODY_STR,
61 ELEMENT_STR,
62 FALLBACK_STR,
63 FORWARD_STR,
64 GET_PROPERTY_STR,
65 INCLUDE_STR,
66 INCLUDE_DIRECTIVE_STR,
67 INVOKE_STR,
68 OUTPUT_STR,
69 PAGE_DIRECTIVE_STR,
70 PARAMS_STR,
71 PARAM_STR,
72 PLUGIN_STR,
73 ROOT_STR,
74 SET_PROPERTY_STR,
75 TAG_DIRECTIVE_STR,
76 TEXT_STR,
77 USE_BEAN_STR,
78 VARIABLE_DIRECTIVE_STR
79 };
80
81 private static final int[] M2 = {
82 ATTRIBUTE_IDX,
83 ATTRIBUTE_DIRECTIVE_IDX,
84 BODY_IDX,
85 DECLARATION_IDX,
86 DOBODY_IDX,
87 ELEMENT_IDX,
88 FALLBACK_IDX,
89 FORWARD_IDX,
90 GET_PROPERTY_IDX,
91 INCLUDE_IDX,
92 INCLUDE_DIRECTIVE_IDX,
93 INVOKE_IDX,
94 OUTPUT_IDX,
95 PAGE_DIRECTIVE_IDX,
96 PARAMS_IDX,
97 PARAM_IDX,
98 PLUGIN_IDX,
99 ROOT_IDX,
100 SET_PROPERTY_IDX,
101 TAG_DIRECTIVE_IDX,
102 TEXT_IDX,
103 USE_BEAN_IDX,
104 VARIABLE_DIRECTIVE_IDX
105 };
106
107 private static final StringSwitcher SWITCHER = StringSwitcher.create(M1, M2, true);
108
109 public int switcher(String s) {
110 return SWITCHER.intValue(s);
111 }
112
113 public int interned(String s) {
114 if (s == ATTRIBUTE_STR) {
115 return ATTRIBUTE_IDX;
116 } else if (s == ATTRIBUTE_DIRECTIVE_STR) {
117 return ATTRIBUTE_DIRECTIVE_IDX;
118 } else if (s == BODY_STR) {
119 return BODY_IDX;
120 } else if (s == DECLARATION_STR) {
121 return DECLARATION_IDX;
122 } else if (s == DOBODY_STR) {
123 return DOBODY_IDX;
124 } else if (s == ELEMENT_STR) {
125 return ELEMENT_IDX;
126 } else if (s == FALLBACK_STR) {
127 return FALLBACK_IDX;
128 } else if (s == FORWARD_STR) {
129 return FORWARD_IDX;
130 } else if (s == GET_PROPERTY_STR) {
131 return GET_PROPERTY_IDX;
132 } else if (s == INCLUDE_STR) {
133 return INCLUDE_IDX;
134 } else if (s == INCLUDE_DIRECTIVE_STR) {
135 return INCLUDE_DIRECTIVE_IDX;
136 } else if (s == INVOKE_STR) {
137 return INVOKE_IDX;
138 } else if (s == OUTPUT_STR) {
139 return OUTPUT_IDX;
140 } else if (s == PAGE_DIRECTIVE_STR) {
141 return PAGE_DIRECTIVE_IDX;
142 } else if (s == PARAMS_STR) {
143 return PARAMS_IDX;
144 } else if (s == PARAM_STR) {
145 return PARAM_IDX;
146 } else if (s == PLUGIN_STR) {
147 return PLUGIN_IDX;
148 } else if (s == ROOT_STR) {
149 return ROOT_IDX;
150 } else if (s == SET_PROPERTY_STR) {
151 return SET_PROPERTY_IDX;
152 } else if (s == TAG_DIRECTIVE_STR) {
153 return TAG_DIRECTIVE_IDX;
154 } else if (s == TEXT_STR) {
155 return TEXT_IDX;
156 } else if (s == USE_BEAN_STR) {
157 return USE_BEAN_IDX;
158 } else if (s == VARIABLE_DIRECTIVE_STR) {
159 return VARIABLE_DIRECTIVE_IDX;
160 }
161 return -1;
162 }
163
164 public int elseIf(String s) {
165 if (s.equals(ATTRIBUTE_STR)) {
166 return ATTRIBUTE_IDX;
167 } else if (s.equals(ATTRIBUTE_DIRECTIVE_STR)) {
168 return ATTRIBUTE_DIRECTIVE_IDX;
169 } else if (s.equals(BODY_STR)) {
170 return BODY_IDX;
171 } else if (s.equals(DECLARATION_STR)) {
172 return DECLARATION_IDX;
173 } else if (s.equals(DOBODY_STR)) {
174 return DOBODY_IDX;
175 } else if (s.equals(ELEMENT_STR)) {
176 return ELEMENT_IDX;
177 } else if (s.equals(FALLBACK_STR)) {
178 return FALLBACK_IDX;
179 } else if (s.equals(FORWARD_STR)) {
180 return FORWARD_IDX;
181 } else if (s.equals(GET_PROPERTY_STR)) {
182 return GET_PROPERTY_IDX;
183 } else if (s.equals(INCLUDE_STR)) {
184 return INCLUDE_IDX;
185 } else if (s.equals(INCLUDE_DIRECTIVE_STR)) {
186 return INCLUDE_DIRECTIVE_IDX;
187 } else if (s.equals(INVOKE_STR)) {
188 return INVOKE_IDX;
189 } else if (s.equals(OUTPUT_STR)) {
190 return OUTPUT_IDX;
191 } else if (s.equals(PAGE_DIRECTIVE_STR)) {
192 return PAGE_DIRECTIVE_IDX;
193 } else if (s.equals(PARAMS_STR)) {
194 return PARAMS_IDX;
195 } else if (s.equals(PARAM_STR)) {
196 return PARAM_IDX;
197 } else if (s.equals(PLUGIN_STR)) {
198 return PLUGIN_IDX;
199 } else if (s.equals(ROOT_STR)) {
200 return ROOT_IDX;
201 } else if (s.equals(SET_PROPERTY_STR)) {
202 return SET_PROPERTY_IDX;
203 } else if (s.equals(TAG_DIRECTIVE_STR)) {
204 return TAG_DIRECTIVE_IDX;
205 } else if (s.equals(TEXT_STR)) {
206 return TEXT_IDX;
207 } else if (s.equals(USE_BEAN_STR)) {
208 return USE_BEAN_IDX;
209 } else if (s.equals(VARIABLE_DIRECTIVE_STR)) {
210 return VARIABLE_DIRECTIVE_IDX;
211 }
212 return -1;
213 }
214
215 public void testStartElement() throws Throwable {
216 int numWords = 10000;
217 int reps = 1000;
218
219 String[] words = new String[numWords];
220 String[] interned = new String[numWords];
221 for (int i = 0; i < words.length; i++) {
222 interned[i] = M1[(int)(Math.random() * M1.length)].intern();
223 words[i] = new String(interned[i]);
224 }
225 long total1 = 0;
226 long total2 = 0;
227 long total3 = 0;
228 // warm-up
229 for (int i = 0; i < reps; i++) {
230 for (int j = 0; j < numWords; j++) {
231 total1 += elseIf(words[j]);
232 total2 += interned(interned[j]);
233 total3 += switcher(words[j]);
234 }
235 }
236 if (total1 != total2 || total1 != total3) {
237 fail("totals are not equal");
238 }
239
240 long t0 = System.currentTimeMillis();
241 for (int i = 0; i < reps; i++) {
242 for (int j = 0; j < numWords; j++) {
243 elseIf(words[j]);
244 }
245 }
246 long t1 = System.currentTimeMillis();
247 for (int i = 0; i < reps; i++) {
248 for (int j = 0; j < numWords; j++) {
249 interned(interned[j]);
250 }
251 }
252 long t2 = System.currentTimeMillis();
253 for (int i = 0; i < reps; i++) {
254 for (int j = 0; j < numWords; j++) {
255 switcher(words[j]);
256 }
257 }
258 long t3 = System.currentTimeMillis();
259
260 System.err.println("elseif: " + (t1 - t0) + "ms");
261 System.err.println("intern: " + (t2 - t1) + "ms");
262 System.err.println("switch: " + (t3 - t2) + "ms");
263 }
264
265 public TestXmlParsing(String testName) {
266 super(testName);
267 }
268
269 public static void main(String[] args) {
270 junit.textui.TestRunner.run(suite());
271 }
272
273 public static Test suite() {
274 return new TestSuite(TestXmlParsing.class);
275 }
276 }
This page was automatically generated by Maven