You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

RunWeaveTests.java 10KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. /* *******************************************************************
  2. * Copyright (c) 2004 IBM Corporation
  3. * All rights reserved.
  4. * This program and the accompanying materials are made available
  5. * under the terms of the Eclipse Public License v1.0
  6. * which accompanies this distribution and is available at
  7. * http://www.eclipse.org/legal/epl-v10.html
  8. *
  9. * Contributors:
  10. * Noel Markham, Matthew Webster initial implementation
  11. * ******************************************************************/
  12. import java.io.BufferedOutputStream;
  13. import java.io.FileOutputStream;
  14. import java.io.IOException;
  15. import java.util.ArrayList;
  16. import java.util.Calendar;
  17. import java.util.List;
  18. import java.util.StringTokenizer;
  19. /**
  20. * @author Noel Markham
  21. */
  22. public class RunWeaveTests {
  23. private static boolean RUN_SMALL = true;
  24. private static boolean RUN_MED = true;
  25. private static boolean RUN_LARGE = true;
  26. private static final String SMALL_PROGRAM_ARGS = "-c 8 -m 100 -l 10 "; // must end on a space in case any more arguments are added later in the script
  27. private static final String MEDIUM_PROGRAM_ARGS = "-c 64 -m 100 -l 10 ";
  28. private static final String LARGE_PROGRAM_ARGS = "-c 512 -m 100 -l 10 ";
  29. private static final String WARMUP_ARGS = "-c 3 -m 100 -l 10 ";
  30. private static final int ITERATIONS = 3;
  31. private static String filename;
  32. private static long[][] times = new long[7][3 * ITERATIONS];
  33. public static void main(String[] args) throws IOException {
  34. parseArgs(args);
  35. // Purely as a warm-up...
  36. System.out.println("Warming up...");
  37. WeaveTests.main(split(WARMUP_ARGS + "-i " + ITERATIONS));
  38. if (RUN_SMALL) {
  39. WeaveTests.main(
  40. split(SMALL_PROGRAM_ARGS + "-echo -i " + ITERATIONS));
  41. for (int i = 0; i < ITERATIONS; i++)
  42. times[0][i] = WeaveTests.compileTimes[i];
  43. for (int i = 0; i < ITERATIONS; i++)
  44. times[1][i] = WeaveTests.executionFastTimes[i];
  45. for (int i = 0; i < ITERATIONS; i++)
  46. times[2][i] = WeaveTests.executionMedTimes[i];
  47. for (int i = 0; i < ITERATIONS; i++)
  48. times[3][i] = WeaveTests.executionSlowTimes[i];
  49. for (int i = 0; i < ITERATIONS; i++)
  50. times[4][i] = WeaveTests.getFastTimes[i];
  51. for (int i = 0; i < ITERATIONS; i++)
  52. times[5][i] = WeaveTests.getMedTimes[i];
  53. for (int i = 0; i < ITERATIONS; i++)
  54. times[6][i] = WeaveTests.getSlowTimes[i];
  55. }
  56. if (RUN_MED) {
  57. WeaveTests.main(
  58. split(MEDIUM_PROGRAM_ARGS + "-echo -i " + ITERATIONS));
  59. for (int i = ITERATIONS; i < (2 * ITERATIONS); i++)
  60. times[0][i] = WeaveTests.compileTimes[i - ITERATIONS];
  61. for (int i = ITERATIONS; i < (2 * ITERATIONS); i++)
  62. times[1][i] = WeaveTests.executionFastTimes[i - ITERATIONS];
  63. for (int i = ITERATIONS; i < (2 * ITERATIONS); i++)
  64. times[2][i] = WeaveTests.executionMedTimes[i - ITERATIONS];
  65. for (int i = ITERATIONS; i < (2 * ITERATIONS); i++)
  66. times[3][i] = WeaveTests.executionSlowTimes[i - ITERATIONS];
  67. for (int i = ITERATIONS; i < (2 * ITERATIONS); i++)
  68. times[4][i] = WeaveTests.getFastTimes[i - ITERATIONS];
  69. for (int i = ITERATIONS; i < (2 * ITERATIONS); i++)
  70. times[5][i] = WeaveTests.getMedTimes[i - ITERATIONS];
  71. for (int i = ITERATIONS; i < (2 * ITERATIONS); i++)
  72. times[6][i] = WeaveTests.getSlowTimes[i - ITERATIONS];
  73. }
  74. if (RUN_LARGE) {
  75. WeaveTests.main(
  76. split(LARGE_PROGRAM_ARGS + "-echo -i " + ITERATIONS));
  77. for (int i = (2 * ITERATIONS); i < (3 * ITERATIONS); i++)
  78. times[0][i] = WeaveTests.compileTimes[i - (2 * ITERATIONS)];
  79. for (int i = (2 * ITERATIONS); i < (3 * ITERATIONS); i++)
  80. times[1][i] =
  81. WeaveTests.executionFastTimes[i - (2 * ITERATIONS)];
  82. for (int i = (2 * ITERATIONS); i < (3 * ITERATIONS); i++)
  83. times[2][i] =
  84. WeaveTests.executionMedTimes[i - (2 * ITERATIONS)];
  85. for (int i = (2 * ITERATIONS); i < (3 * ITERATIONS); i++)
  86. times[3][i] =
  87. WeaveTests.executionSlowTimes[i - (2 * ITERATIONS)];
  88. for (int i = (2 * ITERATIONS); i < (3 * ITERATIONS); i++)
  89. times[4][i] = WeaveTests.getFastTimes[i - (2 * ITERATIONS)];
  90. for (int i = (2 * ITERATIONS); i < (3 * ITERATIONS); i++)
  91. times[5][i] = WeaveTests.getMedTimes[i - (2 * ITERATIONS)];
  92. for (int i = (2 * ITERATIONS); i < (3 * ITERATIONS); i++)
  93. times[6][i] = WeaveTests.getSlowTimes[i - (2 * ITERATIONS)];
  94. }
  95. createCSV();
  96. }
  97. /* Compatibility with JDK 1.3.1 */
  98. public static String[] split (String s) {
  99. List list = new ArrayList();
  100. StringTokenizer st = new StringTokenizer(s," ");
  101. while (st.hasMoreTokens()) {
  102. list.add(st.nextToken());
  103. }
  104. String[] result = new String[list.size()];
  105. list.toArray(result);
  106. return result;
  107. }
  108. private static void parseArgs(String args[]) {
  109. if(args == null || args.length <= 0) {
  110. System.out.println("Running all program tests");
  111. return;
  112. }
  113. if(args[0].equals("-small")) {
  114. System.out.println("Running small-sized program test only");
  115. RUN_SMALL = true;
  116. RUN_MED = false;
  117. RUN_LARGE = false;
  118. }
  119. else if(args[0].equals("-medium")) {
  120. System.out.println("Running small- and medium -sized program tests");
  121. RUN_SMALL = true;
  122. RUN_MED = true;
  123. RUN_LARGE = false;
  124. }
  125. else if(args[0].equals("-large")) {
  126. System.out.println("Running all program tests");
  127. RUN_SMALL = true;
  128. RUN_MED = true;
  129. RUN_LARGE = true;
  130. }
  131. else usage();
  132. }
  133. private static void usage() {
  134. System.err.println("Usage:");
  135. System.err.println("\tjava RunWeaveTests [-small|-medium|-large]");
  136. System.exit(-1);
  137. }
  138. private static void createCSV() {
  139. String NL = System.getProperty("line.separator", "\n");
  140. StringBuffer csv = new StringBuffer(1000);
  141. csv.append("Test Results");
  142. if(RUN_SMALL) for(int i = 0; i < ITERATIONS; i++) csv.append("," + SMALL_PROGRAM_ARGS);
  143. if(RUN_MED) for(int i = 0; i < ITERATIONS; i++) csv.append("," + MEDIUM_PROGRAM_ARGS);
  144. if(RUN_LARGE) for(int i = 0; i < ITERATIONS; i++) csv.append("," + LARGE_PROGRAM_ARGS);
  145. csv.append(NL);
  146. csv.append("Compile");
  147. if(RUN_SMALL) for(int i = 0; i < ITERATIONS; i++) csv.append("," + times[0][i]);
  148. if(RUN_MED) for(int i = ITERATIONS; i < (2 * ITERATIONS); i++) csv.append("," + times[0][i]);
  149. if(RUN_LARGE) for(int i = (2 * ITERATIONS); i < (3 * ITERATIONS); i++) csv.append("," + times[0][i]);
  150. csv.append(NL);
  151. csv.append(WeaveTests.EXECUTION_FAST);
  152. if(RUN_SMALL) for(int i = 0; i < ITERATIONS; i++) csv.append("," + times[1][i]);
  153. if(RUN_MED) for(int i = ITERATIONS; i < (2 * ITERATIONS); i++) csv.append("," + times[1][i]);
  154. if(RUN_LARGE) for(int i = (2 * ITERATIONS); i < (3 * ITERATIONS); i++) csv.append("," + times[1][i]);
  155. csv.append(NL);
  156. csv.append(WeaveTests.EXECUTION_MED);
  157. if(RUN_SMALL) for(int i = 0; i < ITERATIONS; i++) csv.append("," + times[2][i]);
  158. if(RUN_MED) for(int i = ITERATIONS; i < (2 * ITERATIONS); i++) csv.append("," + times[2][i]);
  159. if(RUN_LARGE) for(int i = (2 * ITERATIONS); i < (3 * ITERATIONS); i++) csv.append("," + times[2][i]);
  160. csv.append(NL);
  161. csv.append(WeaveTests.EXECUTION_SLOW);
  162. if(RUN_SMALL) for(int i = 0; i < ITERATIONS; i++) csv.append("," + times[3][i]);
  163. if(RUN_MED) for(int i = ITERATIONS; i < (2 * ITERATIONS); i++) csv.append("," + times[3][i]);
  164. if(RUN_LARGE) for(int i = (2 * ITERATIONS); i < (3 * ITERATIONS); i++) csv.append("," + times[3][i]);
  165. csv.append(NL);
  166. csv.append(WeaveTests.GET_FAST);
  167. if(RUN_SMALL) for(int i = 0; i < ITERATIONS; i++) csv.append("," + times[4][i]);
  168. if(RUN_MED) for(int i = ITERATIONS; i < (2 * ITERATIONS); i++) csv.append("," + times[4][i]);
  169. if(RUN_LARGE) for(int i = (2 * ITERATIONS); i < (3 * ITERATIONS); i++) csv.append("," + times[4][i]);
  170. csv.append(NL);
  171. csv.append(WeaveTests.GET_MED);
  172. if(RUN_SMALL) for(int i = 0; i < ITERATIONS; i++) csv.append("," + times[5][i]);
  173. if(RUN_MED) for(int i = ITERATIONS; i < (2 * ITERATIONS); i++) csv.append("," + times[5][i]);
  174. if(RUN_LARGE) for(int i = (2 * ITERATIONS); i < (3 * ITERATIONS); i++) csv.append("," + times[5][i]);
  175. csv.append(NL);
  176. csv.append(WeaveTests.GET_SLOW);
  177. if(RUN_SMALL) for(int i = 0; i < ITERATIONS; i++) csv.append("," + times[6][i]);
  178. if(RUN_MED) for(int i = ITERATIONS; i < (2 * ITERATIONS); i++) csv.append("," + times[6][i]);
  179. if(RUN_LARGE) for(int i = (2 * ITERATIONS); i < (3 * ITERATIONS); i++) csv.append("," + times[6][i]);
  180. csv.append(NL);
  181. filename = createFilename();
  182. try {
  183. FileOutputStream fos = new FileOutputStream(filename);
  184. BufferedOutputStream bos = new BufferedOutputStream(fos);
  185. bos.write(new String(csv).getBytes());
  186. bos.close();
  187. fos.close();
  188. } catch (IOException e) {
  189. System.err.println("Could not print to file " + filename);
  190. System.err.println(csv);
  191. }
  192. System.out.println("Written: " + filename);
  193. }
  194. private static String createFilename() {
  195. return (getVMInfo() + "_" + getDateAndTime()).replace('.', '_') + ".csv";
  196. }
  197. private static StringBuffer getDateAndTime() {
  198. Calendar c = Calendar.getInstance();
  199. StringBuffer sb = new StringBuffer(15);
  200. sb.append(c.get(Calendar.YEAR));
  201. int month = (c.get(Calendar.MONTH)) + 1;
  202. if(month < 10) sb.append(0);
  203. sb.append(month);
  204. int date = c.get(Calendar.DAY_OF_MONTH);
  205. if(date < 10) sb.append(0);
  206. sb.append(date);
  207. sb.append("_");
  208. int hour = c.get(Calendar.HOUR_OF_DAY);
  209. if(hour < 10) sb.append(0);
  210. sb.append(hour);
  211. int minute = c.get(Calendar.MINUTE);
  212. if(minute < 10) sb.append(0);
  213. sb.append(minute);
  214. int second = c.get(Calendar.SECOND);
  215. if(second < 10) sb.append(0);
  216. sb.append(second);
  217. return sb;
  218. }
  219. private static StringBuffer getVMInfo() {
  220. StringBuffer sb = new StringBuffer(40);
  221. String vm = System.getProperty("java.vm.vendor");
  222. if(vm.equals("IBM Corporation")) {
  223. String vminfo = System.getProperty("java.vm.info");
  224. String[] vminfoComponents = split(vminfo);
  225. sb.append(vminfoComponents[2] + ("_"));
  226. sb.append(vminfoComponents[3] + ("_"));
  227. sb.append(vminfoComponents[4] + ("_"));
  228. sb.append(vminfoComponents[6]);
  229. }
  230. else if(vm.equals("Sun Microsystems Inc.")) {
  231. String vminfo = System.getProperty("java.vm.name");
  232. String[] vminfoComponents = split(vminfo);
  233. sb.append("Sun_");
  234. sb.append(System.getProperty("java.vm.version") + "_");
  235. sb.append(vminfoComponents[2]);
  236. }
  237. return sb;
  238. }
  239. }