def test_value_dependent_specs() -> None:
    'Test specifications which depend on argument value. '

    @argcomb(a={1: 'b', 2: 'c', 3: 'd'})
    def f(a: Any=None, b: Any=None, c: Any=None, d: Any=None) -> None:
        ...
    f()
    f(a=1, b=4)
    f(a=2, c=5)
    f(a=3, d=6)
    f(a=1, b=4, c=5)
    f(a=1, b=4, c=5, d=6)
    f(a=1, b=4, d=6)
    f(a=2, c=5, d=6)
    f(a=4)
    f(b=4, c=5)
    f(d=6)
    with pytest.raises(InvalidArgumentCombination):
        f(a=1, c=5)
    with pytest.raises(InvalidArgumentCombination):
        f(a=1, c=5, d=6)
    with pytest.raises(InvalidArgumentCombination):
        f(a=1)
    with pytest.raises(InvalidArgumentCombination):
        f(a=2, b=3)
    with pytest.raises(InvalidArgumentCombination):
        f(a=2, d=4)
    with pytest.raises(InvalidArgumentCombination):
        f(a=3, b=3, c=4)
    with pytest.raises(InvalidArgumentCombination):
        f(a=3)
Test specifications which depend on argument value.
def test_value_dependent_specs() -> None:
    ' '

    @argcomb(a={1: 'b', 2: 'c', 3: 'd'})
    def f(a: Any=None, b: Any=None, c: Any=None, d: Any=None) -> None:
        ...
    f()
    f(a=1, b=4)
    f(a=2, c=5)
    f(a=3, d=6)
    f(a=1, b=4, c=5)
    f(a=1, b=4, c=5, d=6)
    f(a=1, b=4, d=6)
    f(a=2, c=5, d=6)
    f(a=4)
    f(b=4, c=5)
    f(d=6)
    with pytest.raises(InvalidArgumentCombination):
        f(a=1, c=5)
    with pytest.raises(InvalidArgumentCombination):
        f(a=1, c=5, d=6)
    with pytest.raises(InvalidArgumentCombination):
        f(a=1)
    with pytest.raises(InvalidArgumentCombination):
        f(a=2, b=3)
    with pytest.raises(InvalidArgumentCombination):
        f(a=2, d=4)
    with pytest.raises(InvalidArgumentCombination):
        f(a=3, b=3, c=4)
    with pytest.raises(InvalidArgumentCombination):
        f(a=3)