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