2-SATisfiabilty问题测试用例

时间:2009-11-04 09:16:57

标签: algorithm testing 2-satisfiability

我已经为2-satisfiability问题编写了一个SAT求解器,有人请给我一个测试用例说10000个文字只有一个可满足的赋值,即只有一个解决方案

The format can be:(for 3 literals)
2            // No of clauses and then each clause
2 3
1 -2
corresponding to
(b+c).(a+!b)

2 个答案:

答案 0 :(得分:2)

测试覆盖率通常很难,大多数时候,你只是忘记了一个或另一个因素。

我通常只需几步:

  1. 确保它解决了一个小问题(或一些)
  2. 测试边缘情况/边界条件:例如0条款
  3. 测试错误案例:格式错误的输入,没有解决方案的问题
  4. 测试性能/质量注入(查看程序是否在负载下不崩溃,不泄漏,......)
  5. 2)和3)几乎可以互换,4)只有在你有办法研究这种信息时才会出现(基准测试,内存泄漏检测......)。

    重要的一点是,您不应该对代码进行反向工程来编写测试,因为您最终会测试代码,但不会测试它是否符合规范。

    如果它是一个家庭项目,规范通常是非正式的,但它们仍然存在(在你的头脑中),并且在它们之后你应该生成测试用例。

答案 1 :(得分:1)

这种方法有效吗?

 (a + b ).(a + !b) 

如果a为真,则只能满足。

 (a + !b).(!a + !b)

只有在b为假时才能满足。因此

  (a + b ).(a + !b).(a + !b).(!a + !b)

完全指定a和b的值。我们现在可以为任意数量的文字扩展它。

要测试您的应用,您可能还会指定相互矛盾的要求,因此无法解决问题。