테스트 된 함수가 올바르게 구현되지 않은 경우 무기한 실행될 수있는 무한 게으른 구조에 대한 몇 가지 테스트가 있지만 OUnit 문서에서 테스트에 시간 제한을 설정하는 방법을 찾을 수 없습니다.
나는 oUnit이이 기능을 제공한다고 생각하지 않습니다. 나는 이것을 한동안 수행해야했던 것을 기억하며 이것이 내가 생각해 낸 빠른 해킹입니다.
let race seconds ~f =
let ch = Event.new_channel () in
let timeout = Thread.create (fun () ->
Thread.delay seconds;
`Time_out |> Event.send ch |> Event.sync
) () in
let tf = Thread.create (fun () ->
`Result (f ()) |> Event.send ch |> Event.sync) () in
let res = ch |> Event.receive |> Event.sync in
try
Thread.kill timeout;
Thread.kill tf;
res
with _ -> res
let () =
let big_sum () =
let arr = Array.init 1_000_000 (fun x -> x) in
Array.fold_left (+) 0 arr in
match race 0.0001 ~f:big_sum with
| `Time_out -> print_endline "time to upgrade";
| `Result x -> Printf.printf "sum is: %d\n" x
이것은 내 사용 사례에 대해 충분히 잘 작동했지만 할당이나 호출이 수동으로 수행되지 않으면 race
예상대로 작동하지 않기 때문에 이것을 사용하는 것이 좋습니다 .~f
Thread.yield
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다