在SML中创建数据类型测试
我想为我用SML编写的程序创建单元测试 考虑一个函数在SML中创建数据类型测试,sml,Sml,我想为我用SML编写的程序创建单元测试 考虑一个函数 val foo = fn : int -> int seq 对于foo5它将返回:valit=foo(5,fn):int-seq。(seq是一些数据类型) 它做什么并不重要,我只是对创建检查元组左项的测试感兴趣 我试过: val test = ((foo 5) = (seq (5,_))); val test = ((foo 5) = (seq (5,fn))); 但它们没有起作用。我是否可以编写一行测试来验证左元组是否包含5?您
val foo = fn : int -> int seq
对于foo5
它将返回:valit=foo(5,fn):int-seq
。(seq
是一些数据类型)
它做什么并不重要,我只是对创建检查元组左项的测试感兴趣
我试过:
val test = ((foo 5) = (seq (5,_)));
val test = ((foo 5) = (seq (5,fn)));
但它们没有起作用。我是否可以编写一行测试来验证左元组是否包含
5
?您可以使用模式匹配let绑定
val test = let val seq (x,_) = foo 5 in x = 5 end;
您可能需要测试访问此数据类型的抽象接口。对于
'a seq
(我假设这是'a
的惰性流),您可以使用获取
函数并测试它。比如说,
datatype 'a seq = Cons of 'a * (unit -> 'a seq)
fun from n = Cons (n, fn () => from (n+1))
fun take 0 _ = []
| take n (Cons (x, f)) = x :: take (n-1) (f ())
而take
的测试可能如下所示:
val nats = from 0
val test_take_1 = take 0 nats = []
val test_take_2 = take 1 nats = [0]
val test_take_3 = take 3 nats = [0,1,2]
val test_take_4 = ( take ~1 nats ; false )
handle Out_of_memory => true
| _ => false
在这里,我正在测试当n
为负值时,take
会像预期的那样失败
如果它没有失败,或者由于内存不足以外的异常而失败,则测试失败
因此:
错误是什么?你能给我们一个最小的可重复的代码样本来解决这个问题吗?