def test_logical_format_uppercase():
    for w in range(0, 81):
        assert convert('L{}'.format(w), uppercase=True) == '{}'.format(w)
    with pytest.raises(ValueError):
        convert('L', uppercase=True)
    with pytest.raises(ValueError):
        convert('L4.2', uppercase=True)
    with pytest.raises(ValueError):
        convert('L4.2E3', uppercase=True)
def test_logical_format():
    for w in range(0, 81):
        assert convert('L{}'.format(w)) == '{}'.format(w)
    with pytest.raises(ValueError):
        convert('L')
    with pytest.raises(ValueError):
        convert('L4.2')
    with pytest.raises(ValueError):
        convert('L4.2E3')
def test_double_format():
    for d in range(0, 81):
        for w in range(d+1, 81):
            assert convert('D{}.{}'.format(w, d)) == '{}.{}f'.format(w, d)
    with pytest.raises(ValueError):
        convert('D')
    with pytest.raises(ValueError):
        convert('D6')
    with pytest.raises(ValueError):
        convert('D6.2E4')
def test_real_format():
    for d in range(0, 81):
        for w in range(d+1, 81):
            assert convert('F{}.{}'.format(w, d)) == '{}.{}f'.format(w, d)
    with pytest.raises(ValueError):
        convert('F')
    with pytest.raises(ValueError):
        convert('F6')
    with pytest.raises(ValueError):
        convert('F6.2E4')
def test_double_format_uppercase():
    for d in range(0, 81):
        for w in range(d+1, 81):
            assert (convert('D{}.{}'.format(w, d), uppercase=True) ==
                    '{}.{}F'.format(w, d))
    with pytest.raises(ValueError):
        convert('D', uppercase=True)
    with pytest.raises(ValueError):
        convert('D6', uppercase=True)
    with pytest.raises(ValueError):
        convert('D6.2E4', uppercase=True)
def test_hexadecimal_format_uppercase():
    for w in range(1, 81):
        assert convert('Z{}'.format(w), uppercase=True) == '{}X'.format(w)
    for d in range(1, 20):
        assert convert('Z20.{}'.format(d), uppercase=True) == '20X'
    for d in range(20, 41):
        assert convert('Z20.{}'.format(d), uppercase=True) == '020X'
    with pytest.raises(ValueError):
        convert('Z', uppercase=True)
    with pytest.raises(ValueError):
        convert('Z8.4E2', uppercase=True)
def test_octal_format_uppercase():
    for w in range(1, 81):
        assert convert('O{}'.format(w), uppercase=True) == '{}o'.format(w)
    for d in range(1, 20):
        assert convert('O20.{}'.format(d), uppercase=True) == '20o'
    for d in range(20, 41):
        assert convert('O20.{}'.format(d), uppercase=True) == '020o'
    with pytest.raises(ValueError):
        convert('O', uppercase=True)
    with pytest.raises(ValueError):
        convert('O8.4E2', uppercase=True)
def test_hexadecimal_format():
    for w in range(1, 81):
        assert convert('Z{}'.format(w)) == '{}x'.format(w)
    for d in range(1, 20):
        assert convert('Z20.{}'.format(d)) == '20x'
    for d in range(20, 41):
        assert convert('Z20.{}'.format(d)) == '020x'
    with pytest.raises(ValueError):
        convert('Z')
    with pytest.raises(ValueError):
        convert('Z8.4E2')
def test_integer_format():
    for w in range(1, 81):
        assert convert('I{}'.format(w)) == '{}d'.format(w)
    for d in range(1, 20):
        assert convert('I20.{}'.format(d)) == '20d'
    for d in range(20, 41):
        assert convert('I20.{}'.format(d)) == '020d'
    with pytest.raises(ValueError):
        convert('I')
    with pytest.raises(ValueError):
        convert('I8.4E2')
def test_binary_format_uppercase():
    for w in range(1, 81):
        assert convert('B{}'.format(w), uppercase=True) == '{}b'.format(w)
    for d in range(1, 20):
        assert convert('B20.{}'.format(d), uppercase=True) == '20b'
    for d in range(20, 41):
        assert convert('B20.{}'.format(d), uppercase=True) == '020b'
    with pytest.raises(ValueError):
        convert('B', uppercase=True)
    with pytest.raises(ValueError):
        convert('B8.4E2', uppercase=True)
def test_string_format():
    assert convert('A') == 's'
    for w in range(0, 81):
        assert convert('A{}'.format(w)) == '{}s'.format(w)
    with pytest.raises(ValueError):
        convert('A4.2')
    with pytest.raises(ValueError):
        convert('A4.2E3')
def test_string_format_uppercase():
    assert convert('A', uppercase=True) == 's'
    for w in range(0, 81):
        assert convert('A{}'.format(w), uppercase=True) == '{}s'.format(w)
    with pytest.raises(ValueError):
        convert('A4.2', uppercase=True)
    with pytest.raises(ValueError):
        convert('A4.2E3', uppercase=True)
def test_general_format():
    for d in range(0, 21):
        for w in range(d+1, 21):
            assert convert('G{}.{}'.format(w, d)) == '{}.{}g'.format(w, d)
    for d in range(0, 21):
        for w in range(d+1, 21):
            for e in range(1, 21):
                assert (convert('G{}.{}E{}'.format(w, d, e)) ==
                        '{}.{}g'.format(w, d))
    for d in range(0, 21):
        for w in range(d+1, 21):
            for e in range(1, 21):
                assert (convert('G{}.{}D{}'.format(w, d, e)) ==
                        '{}.{}g'.format(w, d))
    with pytest.raises(ValueError):
        convert('G')
    with pytest.raises(ValueError):
        convert('G6')
    with pytest.raises(ValueError):
        convert('G6.2A4')
def test_exponent_format():
    for d in range(0, 21):
        for w in range(d+1, 21):
            assert convert('E{}.{}'.format(w, d)) == '{}.{}e'.format(w, d)
    for d in range(0, 21):
        for w in range(d+1, 21):
            for e in range(1, 21):
                assert (convert('E{}.{}E{}'.format(w, d, e)) ==
                        '{}.{}e'.format(w, d))
    for d in range(0, 21):
        for w in range(d+1, 21):
            for e in range(1, 21):
                assert convert('E{}.{}D{}'.format(w, d, e)) ==\
                       '{}.{}e'.format(w, d)
    with pytest.raises(ValueError):
        convert('E')
    with pytest.raises(ValueError):
        convert('E6')
    with pytest.raises(ValueError):
        convert('E6.2A4')
def test_engineering_format():
    for d in range(0, 21):
        for w in range(d+1, 21):
            assert convert('EN{}.{}'.format(w, d)) == '{}.{}e'.format(w, d)
    for d in range(0, 21):
        for w in range(d+1, 21):
            for e in range(1, 21):
                assert (convert('EN{}.{}E{}'.format(w, d, e)) ==
                        '{}.{}e'.format(w, d))
    for d in range(0, 21):
        for w in range(d+1, 21):
            for e in range(1, 21):
                assert (convert('EN{}.{}D{}'.format(w, d, e)) ==
                        '{}.{}e'.format(w, d))
    with pytest.raises(ValueError):
        convert('EN')
    with pytest.raises(ValueError):
        convert('EN6')
    with pytest.raises(ValueError):
        convert('EN6.2A4')
def test_scientific_format():
    for d in range(0, 21):
        for w in range(d+1, 21):
            assert convert('ES{}.{}'.format(w, d)) == '{}.{}e'.format(w, d)
    for d in range(0, 21):
        for w in range(d+1, 21):
            for e in range(1, 21):
                assert (convert('ES{}.{}E{}'.format(w, d, e)) ==
                        '{}.{}e'.format(w, d))
    for d in range(0, 21):
        for w in range(d+1, 21):
            for e in range(1, 21):
                assert (convert('ES{}.{}D{}'.format(w, d, e)) ==
                        '{}.{}e'.format(w, d))
    with pytest.raises(ValueError):
        convert('ES')
    with pytest.raises(ValueError):
        convert('ES6')
    with pytest.raises(ValueError):
        convert('ES6.2A4')
def test_general_format_uppercase():
    for d in range(0, 21):
        for w in range(d+1, 21):
            assert (convert('G{}.{}'.format(w, d), uppercase=True) ==
                    '{}.{}G'.format(w, d))
    for d in range(0, 21):
        for w in range(d+1, 21):
            for e in range(1, 21):
                assert (convert('G{}.{}E{}'.format(w, d, e), uppercase=True) ==
                        '{}.{}G'.format(w, d))
    for d in range(0, 21):
        for w in range(d+1, 21):
            for e in range(1, 21):
                assert (convert('G{}.{}D{}'.format(w, d, e), uppercase=True) ==
                        '{}.{}G'.format(w, d))
    with pytest.raises(ValueError):
        convert('G', uppercase=True)
    with pytest.raises(ValueError):
        convert('G6', uppercase=True)
    with pytest.raises(ValueError):
        convert('G6.2A4', uppercase=True)
def test_engineering_format_uppercase():
    for d in range(0, 21):
        for w in range(d+1, 21):
            assert (convert('EN{}.{}'.format(w, d), uppercase=True) ==
                    '{}.{}E'.format(w, d))
    for d in range(0, 21):
        for w in range(d+1, 21):
            for e in range(1, 21):
                assert (convert('EN{}.{}E{}'.format(w, d, e), uppercase=True)
                        == '{}.{}E'.format(w, d))
    for d in range(0, 21):
        for w in range(d+1, 21):
            for e in range(1, 21):
                assert (convert('EN{}.{}D{}'.format(w, d, e), uppercase=True)
                        == '{}.{}E'.format(w, d))
    with pytest.raises(ValueError):
        convert('EN', uppercase=True)
    with pytest.raises(ValueError):
        convert('EN6', uppercase=True)
    with pytest.raises(ValueError):
        convert('EN6.2A4', uppercase=True)
def test_scientific_format_uppercase():
    for d in range(0, 21):
        for w in range(d+1, 21):
            assert (convert('ES{}.{}'.format(w, d), uppercase=True) ==
                    '{}.{}E'.format(w, d))
    for d in range(0, 21):
        for w in range(d+1, 21):
            for e in range(1, 21):
                assert (convert('ES{}.{}E{}'.format(w, d, e), uppercase=True)
                        == '{}.{}E'.format(w, d))
    for d in range(0, 21):
        for w in range(d+1, 21):
            for e in range(1, 21):
                assert (convert('ES{}.{}D{}'.format(w, d, e), uppercase=True)
                        == '{}.{}E'.format(w, d))
    with pytest.raises(ValueError):
        convert('ES', uppercase=True)
    with pytest.raises(ValueError):
        convert('ES6', uppercase=True)
    with pytest.raises(ValueError):
        convert('ES6.2A4', uppercase=True)
def test_invalid_type():
    with pytest.raises(ValueError):
        convert('Y')