return require('lib/tap')(function (test)

  test("test pass async between threads", function(p, p, expect, uv)
    local before = os.time()
    local async
    async = uv.new_async(expect(function (a,b,c)
      p('in async notify callback')
      p(a,b,c)
      assert(a=='a')
      assert(b==true)
      assert(c==250)
      uv.close(async)
    end))
    local args = {500, 'string', nil, false, 5, "helloworld",async}
    local unpack = unpack or table.unpack
    uv.new_thread(function(num,s,null,bool,five,hw,asy)
      local uv = require'luv'
      assert(type(num) == "number")
      assert(type(s) == "string")
      assert(null == nil)
      assert(bool == false)
      assert(five == 5)
      assert(hw == 'helloworld')
      assert(type(asy)=='userdata')
      assert(uv.async_send(asy,'a',true,250)==0)
      uv.sleep(1000)
    end, unpack(args)):join()
    local elapsed = (os.time() - before) * 1000
    assert(elapsed >= 1000, "elapsed should be at least delay ")
  end)

end)
