def error_reported_bug() -> None: # example from https://github.com/python/typeshed/issues/4051 top: Optional[int] = None try: my.max(5, top) except TypeError as exc: print(exc)
def test_multi_with_key_params( first: LessT, rest: Iterable[LessT], key: Optional[KeyFun], expected: LessT, ) -> None: result = mymax.max(first, *rest, key=key) assert result == expected
def demo_args_iter_str() -> None: args = iter('banana kiwi mango apple'.split()) expected = 'mango' result = my.max(args) print(args, expected, result, sep='\n') assert result == expected if TYPE_CHECKING: reveal_type(args) reveal_type(expected) reveal_type(result)
def demo_args_iter_int() -> None: args = [30, 10, 20] expected = 30 result = my.max(args) print(args, expected, result, sep='\n') assert result == expected if TYPE_CHECKING: reveal_type(args) reveal_type(expected) reveal_type(result)
def demo_args_list_float() -> None: args = [2.5, 3.5, 1.5] expected = 3.5 result = my.max(*args) print(args, expected, result, sep='\n') assert result == expected if TYPE_CHECKING: reveal_type(args) reveal_type(expected) reveal_type(result)
def demo_args_fraction() -> None: a, b = Fraction(5, 8), Fraction(7, 12) expected = a result = my.max(a, b) assert result == expected print((a, b), '->', result) if TYPE_CHECKING: reveal_type(a) reveal_type(b) reveal_type(result)
def error_args_str() -> None: a, b = 'apple', 'banana' expected = b result = my.max(a, b) assert result == expected print((a, b), '->', result) print(result.upper()) if TYPE_CHECKING: reveal_type(a) reveal_type(b) reveal_type(result)
def demo_args_float_fraction() -> None: a, b = .9, Fraction(5, 8) expected = a result = my.max(a, b) assert result == expected print((a, b), '->', result) print(result.numerator, result.denominator, sep='/') if TYPE_CHECKING: reveal_type(a) reveal_type(b) reveal_type(result)
def demo_empty_iterable_with_default() -> None: args: List[float] = [] default = None expected = None result = my.max(args, default=default) print(args, default, expected, result, sep='\n') assert result == expected if TYPE_CHECKING: reveal_type(args) reveal_type(default) reveal_type(expected) reveal_type(result)
def demo_different_key_none() -> None: args = iter('banana kiwi mango apple'.split()) key = None expected = 'mango' result = my.max(args, key=key) print(args, key, expected, result, sep='\n') assert result == expected if TYPE_CHECKING: reveal_type(args) reveal_type(key) reveal_type(expected) reveal_type(result)
def demo_args_iter_not_comparable_with_key() -> None: args = [object(), object(), object()] key = id expected = max(args, key=id) result = my.max(args, key=key) print(args, key, expected, result, sep='\n') assert result == expected if TYPE_CHECKING: reveal_type(args) reveal_type(key) reveal_type(expected) reveal_type(result)
def error_args_iter_not_comparable() -> None: try: my.max([None, None]) except TypeError as exc: print(exc)
def test_two_complex(): a = 5 + 4j b = 3 + 5j result = mymax.max(a, b, key=abs) assert result == a
def test_multi_params(first: LessT, rest: Iterable[LessT], expected: LessT) -> None: result = mymax.max(first, *rest) assert result == expected
def test_two_comparables_params(a: LessT, b: LessT, expected: LessT) -> None: result = mymax.max(a, b) assert result == expected
def test_two_comparables_params(a: SupportsLessThan, b: SupportsLessThan, expected: SupportsLessThan) -> None: result = mymax.max(a, b) assert result == expected
def test_two_numbers_params(a: NumberT, b: NumberT, expected: NumberT) -> None: result = mymax.max(a, b) assert result == expected
def test_max_iterable(iterable, expected): result = my.max(iterable) assert result == expected
def test_max_args(args, expected): result = my.max(*args) assert result == expected
def test_two_numbers_params(a: Numeric, b: Numeric, expected: Numeric) -> None: result = my.max(a, b) assert result == expected
def test_two_floats(a: float, b: float, expected: float) -> None: result: float = my.max(a, b) assert result == expected
def test_two_ints(a: int, b: int, expected: int) -> None: result = mymax.max(a, b) assert result == expected
def test_two_numbers() -> None: result = mymax.max(Fraction(1, 3), Fraction(1, 4)) assert result == Fraction(1, 3)
def error_single_arg_not_iterable() -> None: try: my.max(1) except TypeError as exc: print(exc)
def test_two_comparables() -> None: result = mymax.max('a', 'B') assert result == 'a'
def test_max_empty_iterable_with_default(iterable, default, expected): result = my.max(iterable, default=default) assert result == expected
def test_max_single_arg_not_iterable(): msg = "'int' object is not iterable" with pytest.raises(TypeError) as exc: my.max(1) assert exc.value.args[0] == msg
def test_max_iterable_with_key(fruits: List[str], key: Callable[[str], str], expected: str) -> None: result = my.max(fruits, key=key) assert result == expected
def demo_args_float() -> None: a, b = 2.5, 3.5 expected = b result = my.max(a, b) assert result == expected print((a, b), '->', result)
def test_max_empty_iterable_no_default(): with pytest.raises(ValueError) as exc: my.max([]) assert exc.value.args[0] == my.EMPTY_MSG