OCaml の Test::Simple を目コピしてみた
これ。
モジュール名は Test.Builder
にしておく。
module Test.Builder type status = | NotOk | Ok type directive = | Todo of string type diagnostic = | Diag of string list type node = | TestCaseNode of status * int * string * diagnostic option | TodoTestCaseNode of status * int * string * directive * diagnostic option | DiagnosticNode of diagnostic | PlanNode of int type test_document = | Document of node list
テストケースをノードとして管理?する。
test_document
が一番トップの型みたいだ。
let rec count_test_nodes nodes count = match nodes with | [] -> count | TestCaseNode(_, _, _, _)::xs | TodoTestCaseNode(_, _, _, _, _)::xs -> count_test_nodes xs count + 1 | DiagnosticNode(_)::xs | PlanNode(_)::xs -> count_test_nodes xs count
関数 count_test_nodes
はノードの数を数える。
具体的には TestCaseNode
と TodoTestCaseNode
を数える。
let count_tests = function Document(nodes) -> count_test_nodes nodes 0
count_tests
は引数が test_document
だった時用の count_test_nodes
だ。
function Document(nodes) ->
は Warning を発生させる。
この Warning をどうやって回避すれば良いのかは不明である。
let count_test_failures = function Document(nodes) -> let rec loop nodes count = match nodes with | [] -> count | TestCaseNode(Ok, _, _, _)::xs | TodoTestCaseNode(Ok, _, _, _, _)::xs | DiagnosticNode(_)::xs | PlanNode(_)::xs -> loop xs count | TestCaseNode(NotOk, _, _, _)::xs | TodoTestCaseNode(NotOk, _, _, _, _)::xs -> loop xs count + 1 in loop nodes 0
関数 count_test_failures
は指定されたノードリストの中から失敗したノードの数を数える。
書いたのは ここ に置いとく。