if (!window.N) {
    var N = 10000;
}

if (!window.log) {
    var log = function(message) {
        window.alert(message);
    };
}

if (!window.verbose) {
    var verbose = false;
}

var v1 = new RegExp('^[0-9a-f]{8}-[0-9a-f]{4}-1[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f][13579bdf][0-9a-f]{10}$');
var v4 = new RegExp('^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$');

var count = 0;

log('UUIDv4 test started.');
var hash = {};
for (var i = 0; i < N; i++) {
    var uuid = UUID.generate();
    if (v4.exec(uuid)) {
        if (hash[uuid]) {
            count++;
            log('Duplication happend: ' + uuid);
        } else {
            hash[uuid] = true;
            if (verbose) {
                log(uuid);
            }
        }
    } else {
        count++;
        log('Invalid format: ' + uuid);
    }
}
log('UUIDv4 test finished.');


log('UUIDv1 test started.');
var hash = {}, options = { version: 1 };
for (var i = 0; i < N; i++) {
    var uuid = UUID.generate(options);
    if (v1.exec(uuid)) {
        if (hash[uuid]) {
            count++;
            log('Duplication happend: ' + uuid);
        } else {
            hash[uuid] = true;
            if (verbose) {
                log(uuid);
            }
        }
    } else {
        count++;
        log('Invalid format: ' + uuid);
    }
}
log('UUIDv1 test finished.');

log(count + ' error(s) occurred.');
