====== Lab 2 ====== * In your home directory create a directory named .jpf (note that the name of the directory starts with a dot). * In the created directory, create a file named site.properties with the following contents. # JPF site configuration jpf-core=/eecs/fac/pkg/jpf/jpf-core extensions=${jpf-core} * In your home directory create a directory name 4315. * In the created directory 4315, create a directory named lab2. * In the created directory lab2, create the class RandomFraction with the following content. import java.util.Random; public class RandomFraction { public static void run() { Random random = new Random(System.currentTimeMillis()); System.out.println(1 / random.nextInt(1000000)); } } * Compile the RandomFraction class. * In the created directory lab2, create the class RandomFractionTest with the following content. public class RandomFractionTest { public static void main(String[] args) { RandomFraction.run(); } } * Compile the RandomFractionTest class. * Run the RandomFractionTest class. * Create the file RandomFractionTest.jpf with the following content. target=RandomFractionTest classpath=. * Run Java PathFinder (JPF) on RandomFractionTest by running jpf RandomFractionTest.jpf It should produce output similar to the following. JavaPathfinder core system v8.0 (rev 29) - (C) 2005-2014 United States Government. All rights reserved. ====================================================== system under test RandomFractionTest.main() ====================================================== search started: 1/14/17 12:06 PM 0 ====================================================== results no errors detected ====================================================== statistics elapsed time: 00:00:00 states: new=1,visited=0,backtracked=1,end=1 search: maxDepth=1,constraints=0 choice generators: thread=1 (signal=0,lock=1,sharedRef=0,threadApi=0,reschedule=0), data=0 heap: new=353,released=12,maxLive=0,gcCycles=1 instructions: 3181 max memory: 299MB loaded code: classes=62,methods=1334 ====================================================== search finished: 1/14/17 12:06 PM * To the file RandomFractionTest.jpf add the following. cg.enumerate_random=true * Run JPF on RandomFractionTest again. It should produce output similar to the following. JavaPathfinder core system v8.0 (rev 29) - (C) 2005-2014 United States Government. All rights reserved. ====================================================== system under test RandomFractionTest.main() ====================================================== search started: 1/14/17 12:19 PM ====================================================== error 1 gov.nasa.jpf.vm.NoUncaughtExceptionsProperty java.lang.ArithmeticException: division by zero at RandomFraction.run(RandomFraction.java:8) at RandomFractionTest.main(RandomFractionTest.java:5) ====================================================== snapshot #1 thread java.lang.Thread:{id:0,name:main,status:RUNNING,priority:5,isDaemon:false,lockCount:0,suspendCount:0} call stack: at RandomFraction.run(RandomFraction.java:8) at RandomFractionTest.main(RandomFractionTest.java:5) ====================================================== results error #1: gov.nasa.jpf.vm.NoUncaughtExceptionsProperty "java.lang.ArithmeticException: division by zero a..." ====================================================== statistics elapsed time: 00:00:00 states: new=2,visited=0,backtracked=0,end=0 search: maxDepth=2,constraints=0 choice generators: thread=1 (signal=0,lock=1,sharedRef=0,threadApi=0,reschedule=0), data=1 heap: new=369,released=2,maxLive=0,gcCycles=1 instructions: 3175 max memory: 299MB loaded code: classes=66,methods=1364 ====================================================== search finished: 1/14/17 12:19 PM