# AUTOGENERATED: Run scripts/generate_overload_tests.py to update.
# Requires mypy extras
# To run: pip install mypy && mypy tests/typecheck

# alias some things so we can minimize test data size in source control
from typing import Any as A
from typing import Tuple as T
from typing import Union as U
from typing_extensions import assert_type as ck
from eth_typing import HexAddress as HA
from faster_eth_abi import abi

# more aliases to save a bunch more chars
bo = bool
by = bytes
i = int
s = str

TA = T[A, ...]

THA = T[HA, ...]
Tbo = T[bo, ...]
Tby = T[by, ...]
Ti = T[i, ...]
Ts = T[s, ...]
TUa_bo = T[U[HA, bo], ...]
TUa_by = T[U[HA, by], ...]
TUa_i = T[U[HA, i], ...]
TUa_s = T[U[HA, s], ...]
TUbo_by = T[U[bo, by], ...]
TUbo_i = T[U[bo, i], ...]
TUbo_s = T[U[bo, s], ...]
TUby_i = T[U[by, i], ...]
TUby_s = T[U[by, s], ...]
TUi_s = T[U[i, s], ...]
TUa_bo_by = T[U[bo, by, HA], ...]
TUbo_by_i = T[U[bo, by, i], ...]
TUbo_by_s = T[U[bo, by, s], ...]
TUa_bo_i = T[U[bo, i, HA], ...]
TUa_by_i = T[U[by, i, HA], ...]
TUby_i_s = T[U[by, i, s], ...]

# the callable we are checking
f = abi.decode

# input data
D = b"\x00" * 32
ck(f(['address'], D), THA)  # var case 0
ck(f(['address[]'], D), TA)  # var case 1
ck(f(['bool'], D), Tbo)  # var case 2
ck(f(['bool[]'], D), TA)  # var case 3
ck(f(['bytes'], D), Tby)  # var case 4
ck(f(['bytes1'], D), Tby)  # var case 5
ck(f(['bytes10'], D), Tby)  # var case 6
ck(f(['bytes11'], D), Tby)  # var case 7
ck(f(['bytes12'], D), Tby)  # var case 8
ck(f(['bytes13'], D), Tby)  # var case 9
ck(f(['bytes14'], D), Tby)  # var case 10
ck(f(['bytes15'], D), Tby)  # var case 11
ck(f(['bytes16'], D), Tby)  # var case 12
ck(f(['bytes17'], D), Tby)  # var case 13
ck(f(['bytes18'], D), Tby)  # var case 14
ck(f(['bytes19'], D), Tby)  # var case 15
ck(f(['bytes2'], D), Tby)  # var case 16
ck(f(['bytes20'], D), Tby)  # var case 17
ck(f(['bytes21'], D), Tby)  # var case 18
ck(f(['bytes22'], D), Tby)  # var case 19
ck(f(['bytes23'], D), Tby)  # var case 20
ck(f(['bytes24'], D), Tby)  # var case 21
ck(f(['bytes25'], D), Tby)  # var case 22
ck(f(['bytes26'], D), Tby)  # var case 23
ck(f(['bytes27'], D), Tby)  # var case 24
ck(f(['bytes28'], D), Tby)  # var case 25
ck(f(['bytes29'], D), Tby)  # var case 26
ck(f(['bytes3'], D), Tby)  # var case 27
ck(f(['bytes30'], D), Tby)  # var case 28
ck(f(['bytes31'], D), Tby)  # var case 29
ck(f(['bytes32'], D), Tby)  # var case 30
ck(f(['bytes4'], D), Tby)  # var case 31
ck(f(['bytes5'], D), Tby)  # var case 32
ck(f(['bytes6'], D), Tby)  # var case 33
ck(f(['bytes7'], D), Tby)  # var case 34
ck(f(['bytes8'], D), Tby)  # var case 35
ck(f(['bytes9'], D), Tby)  # var case 36
ck(f(['int104'], D), Ti)  # var case 37
ck(f(['int112'], D), Ti)  # var case 38
ck(f(['int120'], D), Ti)  # var case 39
ck(f(['int128'], D), Ti)  # var case 40
ck(f(['int136'], D), Ti)  # var case 41
ck(f(['int144'], D), Ti)  # var case 42
ck(f(['int152'], D), Ti)  # var case 43
ck(f(['int16'], D), Ti)  # var case 44
ck(f(['int160'], D), Ti)  # var case 45
ck(f(['int168'], D), Ti)  # var case 46
ck(f(['int176'], D), Ti)  # var case 47
ck(f(['int184'], D), Ti)  # var case 48
ck(f(['int192'], D), Ti)  # var case 49
ck(f(['int200'], D), Ti)  # var case 50
ck(f(['int208'], D), Ti)  # var case 51
ck(f(['int216'], D), Ti)  # var case 52
ck(f(['int224'], D), Ti)  # var case 53
ck(f(['int232'], D), Ti)  # var case 54
ck(f(['int24'], D), Ti)  # var case 55
ck(f(['int240'], D), Ti)  # var case 56
ck(f(['int248'], D), Ti)  # var case 57
ck(f(['int256'], D), Ti)  # var case 58
ck(f(['int32'], D), Ti)  # var case 59
ck(f(['int40'], D), Ti)  # var case 60
ck(f(['int48'], D), Ti)  # var case 61
ck(f(['int56'], D), Ti)  # var case 62
ck(f(['int64'], D), Ti)  # var case 63
ck(f(['int72'], D), Ti)  # var case 64
ck(f(['int8'], D), Ti)  # var case 65
ck(f(['int80'], D), Ti)  # var case 66
ck(f(['int88'], D), Ti)  # var case 67
ck(f(['int96'], D), Ti)  # var case 68
ck(f(['string'], D), Ts)  # var case 69
ck(f(['string[]'], D), TA)  # var case 70
ck(f(['uint104'], D), Ti)  # var case 71
ck(f(['uint112'], D), Ti)  # var case 72
ck(f(['uint120'], D), Ti)  # var case 73
ck(f(['uint128'], D), Ti)  # var case 74
ck(f(['uint136'], D), Ti)  # var case 75
ck(f(['uint144'], D), Ti)  # var case 76
ck(f(['uint152'], D), Ti)  # var case 77
ck(f(['uint16'], D), Ti)  # var case 78
ck(f(['uint160'], D), Ti)  # var case 79
ck(f(['uint168'], D), Ti)  # var case 80
ck(f(['uint176'], D), Ti)  # var case 81
ck(f(['uint184'], D), Ti)  # var case 82
ck(f(['uint192'], D), Ti)  # var case 83
ck(f(['uint200'], D), Ti)  # var case 84
ck(f(['uint208'], D), Ti)  # var case 85
ck(f(['uint216'], D), Ti)  # var case 86
ck(f(['uint224'], D), Ti)  # var case 87
ck(f(['uint232'], D), Ti)  # var case 88
ck(f(['uint24'], D), Ti)  # var case 89
ck(f(['uint240'], D), Ti)  # var case 90
ck(f(['uint248'], D), Ti)  # var case 91
ck(f(['uint256'], D), Ti)  # var case 92
ck(f(['uint32'], D), Ti)  # var case 93
ck(f(['uint40'], D), Ti)  # var case 94
ck(f(['uint48'], D), Ti)  # var case 95
ck(f(['uint56'], D), Ti)  # var case 96
ck(f(['uint64'], D), Ti)  # var case 97
ck(f(['uint72'], D), Ti)  # var case 98
ck(f(['uint8'], D), Ti)  # var case 99
ck(f(['uint80'], D), Ti)  # var case 100
ck(f(['uint88'], D), Ti)  # var case 101
ck(f(['uint96'], D), Ti)  # var case 102
ck(f(['?'], D), TA)  # var case 103
