Lab 4

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