// META: global=window,worker,shadowrealm

// Run for enough iterations that we're likely to catch edge-cases, like
// failing to set a reserved bit:
const iterations = 256;
// Track all the UUIDs generated during test run, bail if we ever collide:
const uuids = new Set()
function randomUUID() {
    const uuid = self.crypto.randomUUID();
    if (uuids.has(uuid)) {
        throw new Error(`uuid collision ${uuid}`)
    }
    uuids.add(uuid);
    return uuid;
}

// UUID is in namespace format (16 bytes separated by dashes):
test(function() {
    const UUIDRegex = /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/
    for (let i = 0; i < iterations; i++) {
        assert_true(UUIDRegex.test(randomUUID()));
    }
}, "namespace format");

// Set the 4 most significant bits of array[6], which represent the UUID
// version, to 0b0100:
test(function() {
    for (let i = 0; i < iterations; i++) {
        let value = parseInt(randomUUID().split('-')[2].slice(0, 2), 16);
        value &= 0b11110000;
        assert_true(value === 0b01000000);
    }
}, "version set");

// Set the 2 most significant bits of array[8], which represent the UUID
// variant, to 0b10:
test(function() {
    for (let i = 0; i < iterations; i++) {
        // Grab the byte representing array[8]:
        let value = parseInt(randomUUID().split('-')[3].slice(0, 2), 16);
        value &= 0b11000000
        assert_true(value === 0b10000000);
    }
}, "variant set");
