Implement a listener, named StateFrequency, that prints the IDs of the states and the number of times the state has been visited. A sample run can be found below. It shows what type of output your listener should produce. Here are some hints that may be useful for implementing your listener.
To compile your listener, use
javac -cp /cs/fac/packages/jpf/jpf-core/build/jpf.jar:. StateFrequency.java
or add /cs/fac/packages/jpf/jpf-core/build/jpf.jar as an external library to Eclipse.
To test your listener, you may want to use the following app.
import java.util.Random; public class Traversal { public static void main(String[] args) { Random random = new Random(); System.out.println("0"); if (random.nextBoolean()) { System.out.println("2"); } else { System.out.println("1"); if (random.nextBoolean()) { System.out.println("4"); } else { System.out.println("3"); if (random.nextBoolean()) { System.out.println("6"); } else { System.out.println("5"); } } } } }
To run JPF on the above app, use the following configuration file.
target=Template classpath=<path to the directory containing Traversal.class> native_classpath=<path to the directory containing StateFrequency.class> cg.enumerate_random=true listener=StateFrequency
If the above configuration file is used with the above app, JPF should produce output similar to the following.
JavaPathfinder core system v8.0 (rev d772dfa80ea692f916aa6718d04c4f7bfb2a746b) - (C) 2005-2014 United States Government. All rights reserved. ====================================================== system under test Traversal.main() ====================================================== search started: 1/28/19 8:09 PM 0 1 3 5 6 4 2 ====================================================== frequencies state frequency 0 3 1 3 2 3 3 4 ====================================================== results no errors detected ====================================================== statistics elapsed time: 00:00:00 states: new=4,visited=3,backtracked=7,end=4 search: maxDepth=4,constraints=0 choice generators: thread=1 (signal=0,lock=1,sharedRef=0,threadApi=0,reschedule=0), data=3 heap: new=368,released=42,maxLive=358,gcCycles=7 instructions: 3247 max memory: 240MB loaded code: classes=62,methods=1341 ====================================================== search finished: 1/28/19 8:09 PM
To receive feedback, submit your listener using the submit command before Tuesday February 5: submit 4315 lab4 StateFrequency.java