import java.io.FileNotFoundException; import java.io.PrintWriter; import java.util.Random; /** * Generates Java code. * * @author Franck van Breugel */ public class Generate { /** * Generates Java code. * * @param args[0] name of the file in which the generated code is stored. * @param args[1] number of states of the JPF model of the generated code. */ public static void main(String[] args) { if (args.length != 2) { System.out.println("Use: java Generate "); } else { try { final Random RANDOM = new Random(System.currentTimeMillis()); final int NUMBER = Integer.parseInt(args[1]); // number of states PrintWriter writer = new PrintWriter(args[0]); writer.println("import java.util.Random;"); writer.println(); writer.println("public class Sample {"); writer.println(" public static void main(String[] args) {"); writer.println(" final Random RANDOM = new Random();"); writer.println(" boolean done = false;"); writer.println(" int state = 0;"); writer.println(" while (!done) {"); writer.println(" switch (state) {"); for (int i = 0; i < NUMBER; i++) { int successors = RANDOM.nextInt((int) Math.pow(2, NUMBER)); String bits = Integer.toBinaryString(successors); int number = 0; for (int j = 1; j < bits.length(); j++) { if (bits.charAt(j) == '1') { number++; } } writer.printf(" case %d:%n", i); if (number == 0) { writer.println(" done = true;"); writer.println(" break;"); } else { writer.printf(" switch (RANDOM.nextInt(%d)) {%n", number); int j = 1; for (int n = 0; n < number; n++) { while (bits.charAt(j) == '0') { j++; } writer.printf(" case %d:%n", n); writer.printf(" state = %d;%n", j); writer.println(" break;"); j++; } writer.println(" };"); writer.println(" break;"); } } writer.println(" }"); writer.println(" }"); writer.println(" }"); writer.println("}"); writer.close(); } catch (FileNotFoundException e) { System.out.println("Something went wrong with the file"); } } } }