我必须找到一些例子来说明内置的Haskell函数" unlines"与"行",即
完全相反unlines.lines x != x
其中x是包含换行符的String。我找到了一个例子:
"aa\nbb"
将成为
"aa\nbb\n"
有没有人知道其他任何不显示相同缺陷的示例(即,unlines总是会在最后一行之后添加换行符)?
要澄清:根据自动化测试,我已经解决了这项任务 - 我只是使用了以上三次。如果还有其他根本不同的解决方案,我感兴趣。
答案 0 :(得分:9)
如果使用快速检查,您可以找到较小的一个:
import Test.QuickCheck
main = quickCheck $ \x -> (unlines . lines) x == x
它会自动缩小反例,因此它通常只会报告找到的"a"
最小的一个。
我们可以更改属性以仅测试以\n
结尾的字符串:
import Test.QuickCheck
main = quickCheck $ \x0 -> let x = x0 ++ "\n" in (unlines . lines) x == x
我没有找到任何反例。
您可能也有兴趣测试另一个方向(lines . unlines)
。排除其中一个字符串包含换行符的情况,此属性成立。