【问题标题】:SML signature with multiple structures具有多种结构的 SML 签名
【发布时间】:2015-10-19 11:20:29
【问题描述】:

假设我有一个 SML 签名 ALPHA。但我也有多个结构/函子 alpha1、alpha2 等我希望与 ALPHA 一起使用。

我的问题是,如果我有一个在这些模块之外执行单元测试的结构,我将如何单独测试 ALPHA 签名而不必指定我使用的结构?

为了让事情更清楚,这里有一些代码:

signature ALPHA = 
sig
   val func1
   val func2
end


structure alpha1 :> ALPHA =
struct
     fun func1 = (* Implementation *)
     fun func1 = (* Implementation *)
end

functor alpha2 (D: DATA) :> ALPHA = 
struct
      fun func1 = D.x
      fun func2 = D.y
end

(** Unit testing module **)

structure Tester = 
struct 

      (** What test cases do I put here? **)

end

【问题讨论】:

    标签: unit-testing functional-programming sml smlnj


    【解决方案1】:

    您可以将Tester 设为一个函子,将带有签名ALPHA 的结构作为输入。例如:

    signature TESTSUITE =
    sig
        val tests : bool list
    end
    
    functor AlphaTester (Alpha : ALPHA) :> TESTSUITE =
    struct
        val func1_test_1 = Alpha.func1 ... = expected1
        val func2_test_2 = Alpha.func2 ... = expected2
        val tests = [ func1_test_1
                    , func2_test_1 ]
    end
    
    structure Alpha1Tester = AlphaTester(Alpha1)
    structure Alpha2Tester = AlphaTester(Alpha2(SomeD))
    structure AllTests :> TESTSUITE =
    struct
        val tests = AlphaTester1.tests @ AlphaTester2.tests
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-25
      • 2017-10-20
      • 2014-08-08
      • 2023-01-13
      • 1970-01-01
      • 2011-11-09
      • 1970-01-01
      相关资源
      最近更新 更多