diff options
author | Bénédikt Tran <10796600+picnixz@users.noreply.github.com> | 2024-11-12 18:08:49 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-11-12 18:08:49 (GMT) |
commit | 03924b5deeb766fabd53ced28ba707e4dd08fb60 (patch) | |
tree | 89dc9d31d896f48c14cba4a7c2dc8ad749f0bfae /Lib/test/test_uuid.py | |
parent | a83472f49b958c55befd82c871be26afbf500306 (diff) | |
download | cpython-03924b5deeb766fabd53ced28ba707e4dd08fb60.zip cpython-03924b5deeb766fabd53ced28ba707e4dd08fb60.tar.gz cpython-03924b5deeb766fabd53ced28ba707e4dd08fb60.tar.bz2 |
gh-89083: add support for UUID version 8 (RFC 9562) (#123224)
Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com>
Diffstat (limited to 'Lib/test/test_uuid.py')
-rwxr-xr-x | Lib/test/test_uuid.py | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/Lib/test/test_uuid.py b/Lib/test/test_uuid.py index e177464..7bd26a8 100755 --- a/Lib/test/test_uuid.py +++ b/Lib/test/test_uuid.py @@ -8,8 +8,10 @@ import enum import io import os import pickle +import random import sys import weakref +from itertools import product from unittest import mock py_uuid = import_helper.import_fresh_module('uuid', blocked=['_uuid']) @@ -267,7 +269,7 @@ class BaseTestUUID: # Version number out of range. badvalue(lambda: self.uuid.UUID('00'*16, version=0)) - badvalue(lambda: self.uuid.UUID('00'*16, version=6)) + badvalue(lambda: self.uuid.UUID('00'*16, version=42)) # Integer value out of range. badvalue(lambda: self.uuid.UUID(int=-1)) @@ -681,6 +683,37 @@ class BaseTestUUID: equal(u, self.uuid.UUID(v)) equal(str(u), v) + def test_uuid8(self): + equal = self.assertEqual + u = self.uuid.uuid8() + + equal(u.variant, self.uuid.RFC_4122) + equal(u.version, 8) + + for (_, hi, mid, lo) in product( + range(10), # repeat 10 times + [None, 0, random.getrandbits(48)], + [None, 0, random.getrandbits(12)], + [None, 0, random.getrandbits(62)], + ): + u = self.uuid.uuid8(hi, mid, lo) + equal(u.variant, self.uuid.RFC_4122) + equal(u.version, 8) + if hi is not None: + equal((u.int >> 80) & 0xffffffffffff, hi) + if mid is not None: + equal((u.int >> 64) & 0xfff, mid) + if lo is not None: + equal(u.int & 0x3fffffffffffffff, lo) + + def test_uuid8_uniqueness(self): + # Test that UUIDv8-generated values are unique + # (up to a negligible probability of failure). + u1 = self.uuid.uuid8() + u2 = self.uuid.uuid8() + self.assertNotEqual(u1.int, u2.int) + self.assertEqual(u1.version, u2.version) + @support.requires_fork() def testIssue8621(self): # On at least some versions of OSX self.uuid.uuid4 generates |