Exemple #1
0
def test_configurable__benchmark():
    """ Test if `@configurable` is within the ballpark of a native decorator in performance. """
    def baseline(function):
        @wraps(function)
        def decorator(*args, **kwargs):
            return function(*args, **kwargs)

        return decorator

    lambda_ = lambda arg: arg
    other_lambda_ = lambda arg: arg
    native = baseline(lambda_)
    configured = configurable(other_lambda_)

    add_config({configured: HParams(arg='')})

    samples = 10000

    # NOTE: The timer decisions are inspired by the native `timeit` module.
    gc.disable()
    iterator = itertools.repeat(None, samples)
    start = time.perf_counter()
    for _ in iterator:
        native('')
    native_elapsed = time.perf_counter() - start

    iterator = itertools.repeat(None, samples)
    start = time.perf_counter()
    for _ in iterator:
        configured()
    configured_elapsed = time.perf_counter() - start
    gc.enable()

    assert (configured_elapsed / samples) - (native_elapsed / samples) < 3e-05
Exemple #2
0
def test__resolve_configuration__external_internal_library():
    """ Test resolution for an internal api of an external library. """
    _pytest.python_api.approx = configurable(_pytest.python_api.approx)
    parsed = _parse_configuration({'pytest.approx': HParams(expected='')})
    function_signature = _get_function_signature(pytest.approx.__wrapped__)
    assert isinstance(
        _resolve_configuration(parsed)[function_signature], HParams)
Exemple #3
0
def test__resolve_configuration__external_library():
    """ Test resolution for an external library and with a none-empty `HParams`. """
    pytest.approx = configurable(pytest.approx)
    parsed = _parse_configuration({'pytest.approx': HParams(expected='')})
    function_signature = _get_function_signature(pytest.approx.__wrapped__)
    assert isinstance(
        _resolve_configuration(parsed)[function_signature], HParams)
Exemple #4
0
def test__resolve_configuration__built_in_function():
    """ Test resolution for an built in function. """
    builtins.open = configurable(builtins.open)
    function_name = 'builtins.open'
    parsed = _parse_configuration({function_name: HParams()})
    function_signature = _get_function_signature(builtins.open.__wrapped__)
    assert isinstance(_resolve_configuration(parsed)[function_signature], HParams)
Exemple #5
0
def test__resolve_configuration__lambda_function():
    """ Test resolution for an lambda function. """
    configured = configurable(lambda: None)
    function_name = ('tests.test_hparams.test__resolve_configuration__lambda_function'
                     '.<locals>.<lambda>')
    parsed = _parse_configuration({function_name: HParams()})
    function_signature = _get_function_signature(configured.__wrapped__)
    assert isinstance(_resolve_configuration(parsed)[function_signature], HParams)
Exemple #6
0
def test__configurable__regression():
    """ Test if `@configurable` fails with a none-overridden `__init__` function for a global class.

    TODO: Support this use case. Curiously, this works for none-global classes though.
    """

    _test__resolve_configuration__super_class.__init__ = configurable(
        _test__resolve_configuration__super_class.__init__)

    with pytest.raises(TypeError):
        add_config({_test__resolve_configuration__super_class.__init__: HParams()})
Exemple #7
0
def test__configurable__regression(warnings_mock):
    """ Test if `@configurable` fails with a none-overridden `__init__` function for a global class.

    TODO: Support this use case. Curiously, this works for none-global classes though.
    """

    _test__resolve_configuration__super_class.__init__ = configurable(
        _test__resolve_configuration__super_class.__init__)

    add_config({_test__resolve_configuration__super_class.__init__: HParams()})
    assert warnings_mock.warn.call_count == 1