import sys
vi = sys.version_info
assert vi == vi
assert vi in [vi]
assert [vi].count(vi) == 1
vi2 = sys.version_info
assert vi == vi2
t = (vi.major, vi.minor, vi.micro, vi.releaselevel, vi.serial)
assert vi == t
assert t == vi
assert vi != (3,)
assert (3,) != vi
assert vi != (0, 0, 0, 'final', 0)
assert vi != 42
assert vi != 'hello'
assert vi != None
assert vi != [3, 14]
r = repr(vi)
assert r.startswith('sys.version_info(major='), f'namedtuple repr starts with type name, {r!r}'
assert ', minor=' in r, f'namedtuple repr has minor field, {r!r}'
assert r.endswith(')'), f'namedtuple repr ends with paren, {r!r}'
assert vi.major in vi
assert vi.minor in vi
assert 9999 not in vi
assert vi.micro in vi
assert 'not-a-field-value' not in vi
assert vi.releaselevel in vi
assert vi.serial in vi
assert None not in vi
assert (vi.major, vi.minor) not in vi
assert [vi.major] not in vi
for _name in ('_fields', '_field_defaults', '_asdict', '_replace', '_make'):
try:
getattr(vi, _name)
assert False, f'expected sys.version_info to have no {_name}'
except AttributeError as e:
assert str(e) == f"'sys.version_info' object has no attribute '{_name}'", f'{_name} message'
try:
vi._asdict()
assert False, 'expected _asdict() to raise'
except AttributeError as e:
assert str(e) == "'sys.version_info' object has no attribute '_asdict'", '_asdict() message'
try:
vi._replace(major=9)
assert False, 'expected _replace() to raise'
except AttributeError as e:
assert str(e) == "'sys.version_info' object has no attribute '_replace'", '_replace() message'
try:
vi._make([1, 2, 3, 'f', 0])
assert False, 'expected _make() to raise'
except AttributeError as e:
assert str(e) == "'sys.version_info' object has no attribute '_make'", '_make() message'
assert vi[1:3] == t[1:3], 'structseq slice matches the equivalent tuple slice'
assert type(vi[1:3]) is tuple, 'slicing a structseq yields a plain tuple'
assert vi[:] == t, 'full slice reproduces the values'
assert vi[::-1] == t[::-1], 'reversed slice'
assert vi + (1,) == t + (1,), 'structseq + tuple'
assert type(vi + (1,)) is tuple, 'concatenation yields a plain tuple'
assert (1,) + vi == (1,) + t, 'tuple + structseq'
assert vi * 2 == t * 2, 'structseq repetition'
assert vi * 0 == (), 'repetition by zero'
assert vi.__getnewargs__() == (t,), '__getnewargs__ wraps the values in a 1-tuple'
assert len(vi.__getnewargs__()) == 1, '__getnewargs__ has exactly one element'