async def METHOD_NAME():
    cache = Cache(ram=RamCache(prefix='bar:'))
    calls = defaultdict(lambda: 0)
    @cache('bar')
    async def bar(*args, **kwargs):
        calls['bar'] += 1
        return 'bar'
    #: no arguments
    for _ in range(0, 2):
        await bar()
    assert len(cache._default_handler.data.keys()) == 1
    assert calls['bar'] == 1
    #: args change the cache key
    for _ in range(0, 2):
        await bar(1)
    assert len(cache._default_handler.data.keys()) == 2
    assert calls['bar'] == 2
    for _ in range(0, 2):
        await bar(1, 2)
    assert len(cache._default_handler.data.keys()) == 3
    assert calls['bar'] == 3
    #: kwargs change the cache key
    for _ in range(0, 2):
        await bar(1, a='foo', b='bar')
    assert len(cache._default_handler.data.keys()) == 4
    assert calls['bar'] == 4
    #: kwargs order won't change the cache key
    for _ in range(0, 2):
        await bar(1, b='bar', a='foo')
    assert len(cache._default_handler.data.keys()) == 4
    assert calls['bar'] == 4