我想使用Haskell的quickcheck库测试一些C代码。最简单的方法似乎是执行foreign import
并在生成的haskell函数之上写一个属性。这样做的问题是,如果C代码导致段错误或设法破坏内存,我的测试要么在没有输出的情况下崩溃,要么做一些完全不可预测的事情。
第二种方法是在C位上创建简单的可执行包装器,并通过System.Process
在测试过程之外执行它们。毋庸置疑,这样做需要大量的脚手架和序列化值,但另一方面,它可以处理段错误。
有没有办法让foreign import
策略像运行外部流程一样安全?
答案 0 :(得分:1)
您可以在当前进程中实现包装器,但然后使用System.Posix.Process.forkProcess
在其自己的进程中安全地运行,使用Haskell实现必要的通信。