在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?您

我想为我用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

您可以使用模式匹配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
会像预期的那样失败

如果它没有失败,或者由于内存不足以外的异常而失败,则测试失败


因此:

  • 定义您的数据类型

  • 定义访问它的抽象接口

  • 测试抽象接口


  • 错误是什么?你能给我们一个最小的可重复的代码样本来解决这个问题吗?