如何测试算法的实现?

fes*_*ast 5 language-agnostic testing algorithm

我正在考虑测试一些算法的实现

如果你考虑 TDD/BDD 焦点......测试将是

 Scenario: doubling search
 Given an ordered array "[2,3,4,5,6,7]"
 When I look for "4" with "doubling search" in it
 Then the result must be "2"
Run Code Online (Sandbox Code Playgroud)

我想确保我的算法运行良好......那么,您将如何测试算法实现?

cor*_*iKa 3

您可以以相同的方式测试算法的每个实现:获取输入,手动计算预期输出,并将其与算法提供的输出进行比较。

如果您使用带有接口的语言执行此操作,则可以使用通用测试来获取类型接口的参数,并由在实现中传递的实际测试调用它。这确保所有算法都根据其接口接受相同的测试。

// double search implemented by using the search and multiplying by 2
algorithm multDoubleSearch
   define input array
   define input search

   for each i in array
      if i = search * 2
           return index of i
   end
   return -1
end.

// double search implemented by dividing the values by 2
algorithm divDoubleSearch
    define input array
   define input search

   for each i in array
      if i / 2 = search
           return index of i
   end
   return -1
end.


test mytest
     define array {2 3 4 5 6 7}
     define search 2

     define resultMult = multDoubleSearch(array,search)
     assert resultMult == 2 // 4 is index 2, assuming 0 indexed

     define resultDiv = divDoubleSearch(array,search)
     assert resultDiv == 2 // 4 is index 2, assuming 0 indexed
end.
Run Code Online (Sandbox Code Playgroud)