java - JPF 符号字符串未生成预期 PC 的 [Java 路径查找器]
问题描述
我正在尝试在符号字符串上运行 Jpf,但它没有生成预期的输出。以下是我正在尝试的玩具程序。
import gov.nasa.jpf.symbc.Debug;
import static org.junit.Assert.*;
public class Toy {
public static void main(String args[]) {
String s1,s2,s3;
s1=Debug.makeSymbolicString("s1");
s2=Debug.makeSymbolicString("s2");
s3=Debug.makeSymbolicString("s3");
checkEqual(s1,s2,s3);
}
static void checkEqual(String s1,String s2,String s3) {
if(!s1.equals(s3))
{
if(!s2.equals(s3)) {
System.out.println("s1.equals(s3)="+s1.equals(s3)+"\n");
System.out.println("s2.equals(s3)="+s2.equals(s3)+"\n");
}
}
System.out.println(Debug.getSolvedPC());
}
}
.jpf 文件如下:
target=Toy
classpath=${jpf-symbc}/build/examples
sourcepath=${jpf-symbc}/src/examples
symbolic.strings = true
symbolic.debug=true
在嵌套的 if 条件中,我正在打印字符串比较的值,只有当字符串 s1,s2 不等于 s3 时,才应该打印打印语句。我还使用 symbolic.debug=true 打印了 PC
以下是我有疑问的输出片段。这里的输出表明 s1,s2 同时与 s3 相等且不相等。这怎么可能?打印语句也显示“s2.equals(s3)=true”,那么程序不应该进入 if 块。
string analysis: SPC # = 4
(s2 equals s3) && (s1 equals s3) && (s2 notequals s3) && (s1 notequals s3)
NPC constraint # = 0
s2.equals(s3)=true
string analysis: SPC # = 4
(s2 equals s3) && (s1 equals s3) && (s2 notequals s3) && (s1 notequals s3)
NPC constraint # = 0
constraint # = 0
## Warning: empty path condition
### PCs: total:9 sat:9 unsat:0
当我使用 int 而不是 String 时,代码可以工作。如果你能帮助我,那就太好了。如果我的 jpf 配置中缺少某些内容,请告诉我。先感谢您
解决方案
推荐阅读
- scala - 表不使用休眠创建
- php - yii2 Basic - 如何使用其他表中的 id 在网格视图列中显示数据?
- bash - bashrc 不会自动运行
- sql - 如果在 R 中失败,则移至下一个代码行
- accessibility - 如何通过屏幕阅读器使 li tababble 和可读?
- javascript - 事件侦听器中的函数仅在其初始化时触发
- java - 如何从地图中的对象中找到键?
- javascript - 使用超链接字段导出到 Excel
- go - 从 C 获取结构到 Golang
- android - 当我们去另一个活动并回到同一个活动时,是否可以防止 webView 刷新/重新加载?