summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_uuid.py
diff options
context:
space:
mode:
authorBénédikt Tran <10796600+picnixz@users.noreply.github.com>2024-11-12 18:08:49 (GMT)
committerGitHub <noreply@github.com>2024-11-12 18:08:49 (GMT)
commit03924b5deeb766fabd53ced28ba707e4dd08fb60 (patch)
tree89dc9d31d896f48c14cba4a7c2dc8ad749f0bfae /Lib/test/test_uuid.py
parenta83472f49b958c55befd82c871be26afbf500306 (diff)
downloadcpython-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-xLib/test/test_uuid.py35
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