如何在IntelliGen中解决无限的回溯

时间:2014-05-13 08:10:23

标签: specman

我写了以下代码:

struct packet {
    x:int;
    y:int;

    x >= 0 => y==1;
    x < 0 => y==2;
};

虽然它在Specman中解决得非常快,但对于某些种子,Gen Debugger会显示生成器尝试将y分配给不同于1和2的值,甚至是“y:回滚集”。 我做错了什么?

4 个答案:

答案 0 :(得分:3)

由于生成引擎不知道y值的有效空间,它可能会尝试通过在[MIN_INT..MAX_INT]中为y分配随机值来解决它,然后只为x导致无限循环。 您可以通过选项解决它:

  1. 添加

    在[1,2]

  2. 中保持y
  3. 替换约束

    保持y ==(x> = 0)? 1:0

答案 1 :(得分:0)

在这种情况下使用三元构造,生成器可以轻松解决约束。

答案 2 :(得分:0)

在这种情况下,生成引擎需要从2个不同的约束中推断出关于y的信息,这是昂贵的。尝试合并单个约束和/或添加您已知的信息以帮助它。

答案 3 :(得分:0)

您可以根据意图减少解决方案的状态空间来帮助生成器。 它可以通过两种方式完成 1.保持[1..2]; 2.巩固约束 保持y ==(x> 0)? 1:2;