def test_argument_specs() -> None:
    'Test providing specifications for arguments. '

    @argcomb(a='b', c='d')
    def f(a: Any=None, b: Any=None, c: Any=None, d: Any=None) -> None:
        ...
    f()
    f(d=1)
    f(c=1, d=1)
    f(b=1)
    f(b=1, d=1)
    f(b=1, c=1, d=1)
    f(a=1, b=1)
    f(a=1, b=1, d=1)
    f(a=1, b=1, c=1, d=1)
    with pytest.raises(InvalidArgumentCombination):
        f(c=1)
    with pytest.raises(InvalidArgumentCombination):
        f(b=1, c=1)
    with pytest.raises(InvalidArgumentCombination):
        f(a=1)
    with pytest.raises(InvalidArgumentCombination):
        f(a=1, d=1)
    with pytest.raises(InvalidArgumentCombination):
        f(a=1, c=1)
    with pytest.raises(InvalidArgumentCombination):
        f(a=1, c=1, d=1)
    with pytest.raises(InvalidArgumentCombination):
        f(a=1, b=1, c=1)
Test providing specifications for arguments.
def test_argument_specs() -> None:
    ' '

    @argcomb(a='b', c='d')
    def f(a: Any=None, b: Any=None, c: Any=None, d: Any=None) -> None:
        ...
    f()
    f(d=1)
    f(c=1, d=1)
    f(b=1)
    f(b=1, d=1)
    f(b=1, c=1, d=1)
    f(a=1, b=1)
    f(a=1, b=1, d=1)
    f(a=1, b=1, c=1, d=1)
    with pytest.raises(InvalidArgumentCombination):
        f(c=1)
    with pytest.raises(InvalidArgumentCombination):
        f(b=1, c=1)
    with pytest.raises(InvalidArgumentCombination):
        f(a=1)
    with pytest.raises(InvalidArgumentCombination):
        f(a=1, d=1)
    with pytest.raises(InvalidArgumentCombination):
        f(a=1, c=1)
    with pytest.raises(InvalidArgumentCombination):
        f(a=1, c=1, d=1)
    with pytest.raises(InvalidArgumentCombination):
        f(a=1, b=1, c=1)