def test__gcdn():
    """Test the _gcd2 function in samplefile"""
    from electrolib.sources.samplefile import _gcdn, _gcd2
    assert _gcdn(1) == 1
    assert _gcdn(12, 8) == 4
    assert _gcdn(7, 13, 5) == 1
    assert _gcdn(10, 50, 105) == 5
    for n in range(-10, 10):
        assert _gcdn(n) == abs(n)
        assert _gcdn(-n) == _gcdn(n)
    for n in range(-10, 10):
        for m in range(-10, 10):
            assert _gcdn(n, m) == _gcd2(m, n)
    for n in range(-10, 10):
        for m in range(-10, 10):
            for o in range(-10, 10):
                assert _gcdn(n, m, o) == _gcdn(m, n, o) == _gcdn(n, o, m) ==\
                       _gcdn(m, o, n) == _gcdn(o, n, m) == _gcdn(o, m, n)
                assert _gcdn( n, m, o) == _gcdn( n, m,-o) ==\
                       _gcdn( n,-m, o) == _gcdn( n,-m,-o) ==\
                       _gcdn(-n, m, o) == _gcdn(-n, m,-o) ==\
                       _gcdn(-n,-m, o) == _gcdn(-n,-m,-o)
            if not all([n, m, o]):
                assert n % _gcdn(n, m, o) == 0
            elif not n:
                assert _gcdn(n, m, o) == _gcdn(m, o)
            elif not any([n, m, o]):
                assert _gcdn(n, m, o) == 0
    with py.test.raises(TypeError):
        _gcdn()
def test__gcd2():
    """Test the _gcd2 function in samplefile"""
    from electrolib.sources.samplefile import _gcd2
    assert _gcd2(1, 1) == 1
    assert _gcd2(12, 8) == 4
    assert _gcd2(7, 13) == 1
    for n in range(-10, 10):
        for m in range(-10, 10):
            assert _gcd2(n, m) == _gcd2(m, n)
            assert _gcd2(n, m) == _gcd2(n, -m)
            if n and m:
                assert n % _gcd2(n, m) == 0
            elif not n:
                assert _gcd2(n, m) == abs(m)
            elif not m:
                assert _gcd2(n, m) == abs(n)
            else:
                assert _gcd2(n, m) == 0
    with py.test.raises(TypeError):
        _gcd2()
    with py.test.raises(TypeError):
        _gcd2(1)
    with py.test.raises(TypeError):
        _gcd2(1, 2, 3)