====== Lab 3 ======
Implement value search, that is, implement the class lab.ValueSearch. The API of this class and related classes can be found [[http://www.eecs.yorku.ca/course_archive/2019-20/W/4315/api/search/|here]]. In your implementation, you do not have to keep track of the depth, nor do you have not notify that depth or space limits have been hit. A jar file containing the remaining classes can be found [[http://www.eecs.yorku.ca/course_archive/2019-20/W/4315/jars/search.jar|here]].
As an example, consider the following class.
public class Account {
private double balance;
public Account() {
this.balance = 0.0;
}
public double getBalance() {
return this.balance;
}
public void deposit(double amount) {
this.balance += amount;
}
public void withdraw(double amount) {
this.balance -= amount;
}
}
The above class is used in the following app.
import java.util.Random;
public class Finances {
public static void main(String[] args) {
Account account = new Account();
final int LOW = 2;
final int MEDIUM = 3;
final int HIGH = 4;
Random random = new Random();
account.deposit(random.nextInt(HIGH));
if (!random.nextBoolean()) {
account.deposit(random.nextInt(LOW));
if (random.nextBoolean()) {
// do nothing
} else {
account.withdraw(random.nextInt(MEDIUM));
}
} else {
account.deposit(random.nextInt(MEDIUM));
if (random.nextBoolean()) {
// do nothing
} else {
account.deposit(random.nextInt(LOW));
}
}
System.out.println("Balance: " + account.getBalance());
}
}
To apply JPF to the above app, use the following application properties file.
# paths
classpath =
native_classpath =
# application
target = Finances
cg.enumerate_random = true
# search strategy
search.class = lab.FieldValueSearch
search.value.classname = lab.Account
search.value.fieldname = balance
# listener
listener = lab.ValuedStateSpaceDot
When JPF is run on the above application properties file, it produces output similar to the following.
JavaPathfinder core system v8.0 (rev 32+) - (C) 2005-2014 United States Government. All rights reserved.
====================================================== system under test
Traversal.main()
====================================================== search started: 2/3/20 12:44 PM
Balance: 0.0
Balance: 0.0
Balance: 0.0
Balance: -1.0
Balance: -2.0
Balance: 0.0
Balance: 1.0
Balance: 1.0
Balance: 1.0
Balance: 2.0
Balance: 1.0
Balance: 1.0
Balance: 0.0
Balance: -1.0
Balance: 2.0
Balance: 2.0
Balance: 1.0
Balance: 0.0
Balance: 2.0
Balance: 2.0
Balance: 3.0
Balance: 3.0
Balance: 3.0
Balance: 4.0
Balance: 3.0
Balance: 3.0
Balance: 2.0
Balance: 1.0
Balance: 4.0
Balance: 4.0
Balance: 4.0
Balance: 3.0
Balance: 2.0
Balance: 4.0
Balance: 5.0
Balance: 5.0
Balance: 5.0
Balance: 6.0
====================================================== results
no errors detected
====================================================== statistics
elapsed time: 00:00:00
states: new=36,visited=46,backtracked=82,end=38
search: maxDepth=0,constraints=0
choice generators: thread=1 (signal=0,lock=1,sharedRef=0,threadApi=0,reschedule=0), data=35
heap: new=810,released=572,maxLive=352,gcCycles=82
instructions: 4892
max memory: 123MB
loaded code: classes=64,methods=1486
====================================================== search finished: 2/3/20 12:44 PM
It also generates a file named statespace.dot that represents the following state space.
{{:value-search.jpg|}}
To receive feedback, submit your search class using the submit command //before// Tuesday February 11:\\
submit 4315 lab3 ValueSearch.java