#
#              Chronos Unittest2 Helpers
#             (c) Copyright 2022-Present
#         Status Research & Development GmbH
#
#              Licensed under either of
#  Apache License, version 2.0, (LICENSE-APACHEv2)
#              MIT license (LICENSE-MIT)
import std/tables
import unittest2
import ../../chronos

export unittest2, chronos

template asyncTest*(name: string, body: untyped): untyped =
  test name:
    waitFor((
      proc() {.async, gcsafe.} =
        body
    )())

template checkLeaks*(name: string): untyped =
  let counter = getTrackerCounter(name)
  checkpoint:
    "[" & name & "] opened = " & $counter.opened &
         ", closed = " & $ counter.closed
  check counter.opened == counter.closed

proc checkLeaks*() =
  for key in getThreadDispatcher().trackerCounterKeys():
    checkLeaks(key)
  GC_fullCollect()
