def METHOD_NAME(w3, erc20, erc20_caller, assert_tx_failed):
    # Basic transfer.
    erc20.transfer(erc20_caller.address, 10, transact={})
    assert erc20.balanceOf(erc20_caller.address) == 10
    erc20_caller.transfer(w3.eth.accounts[1], 10, transact={})
    assert erc20.balanceOf(erc20_caller.address) == 0
    assert erc20.balanceOf(w3.eth.accounts[1]) == 10
    # more than allowed
    assert_tx_failed(lambda: erc20_caller.transfer(w3.eth.accounts[1], TOKEN_TOTAL_SUPPLY))
    # Negative transfer value.
    assert_tx_failed(
        function_to_test=lambda: erc20_caller.transfer(w3.eth.accounts[1], -1),
        exception=ValidationError,
    )