async def METHOD_NAME(use_async):
    class TestClass:
        def __init__(self):
            self.arg_list = []
            self.kwarg_list = []
        @extensible
        @_wrap_async(use_async)
        def not_implemented_method(self, *args, **kw):
            raise NotImplementedError
        @extensible
        @_wrap_async(use_async)
        def method(self, *args, **kwargs):
            raise NotImplementedError
        @method.batch
        @_wrap_async(use_async)
        def method(self, args_list, kwargs_list):
            self.arg_list.extend(args_list)
            self.kwarg_list.extend(kwargs_list)
            return [len(self.kwarg_list)] * len(args_list)
    if use_async:
        assert asyncio.iscoroutinefunction(TestClass.method)
    test_inst = TestClass()
    ret = test_inst.method.batch()
    ret = await ret if use_async else ret
    assert ret == []
    test_inst = TestClass()
    ret = test_inst.method.batch(test_inst.method.delay(12))
    ret = await ret if use_async else ret
    assert ret == [1]
    test_inst = TestClass()
    ret = test_inst.method.batch(test_inst.method.delay(12), test_inst.method.delay(10))
    ret = await ret if use_async else ret
    assert ret == [2, 2]
    assert test_inst.arg_list == [(12,), (10,)]
    assert test_inst.kwarg_list == [{}, {}]
    test_inst = TestClass()
    for _ in range(2):
        with pytest.raises(NotImplementedError):
            ret = test_inst.not_implemented_method()
            await ret if use_async else ret
    ret = test_inst.method(12, kwarg=34)
    ret = await ret if use_async else ret
    assert ret == 1
    assert test_inst.arg_list == [(12,)]
    assert test_inst.kwarg_list == [{"kwarg": 34}]