我写了以下代码:
struct packet {
x:int;
y:int;
x >= 0 => y==1;
x < 0 => y==2;
};
虽然它在Specman中解决得非常快,但对于某些种子,Gen Debugger会显示生成器尝试将y分配给不同于1和2的值,甚至是“y:回滚集”。 我做错了什么?
答案 0 :(得分:3)
由于生成引擎不知道y值的有效空间,它可能会尝试通过在[MIN_INT..MAX_INT]中为y分配随机值来解决它,然后只为x导致无限循环。 您可以通过选项解决它:
添加
在[1,2]
用
替换约束保持y ==(x> = 0)? 1:0
答案 1 :(得分:0)
在这种情况下使用三元构造,生成器可以轻松解决约束。
答案 2 :(得分:0)
在这种情况下,生成引擎需要从2个不同的约束中推断出关于y的信息,这是昂贵的。尝试合并单个约束和/或添加您已知的信息以帮助它。
答案 3 :(得分:0)
您可以根据意图减少解决方案的状态空间来帮助生成器。 它可以通过两种方式完成 1.保持[1..2]; 2.巩固约束 保持y ==(x> 0)? 1:2;