1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
#
# make sure v6 is hidden and same in threads.
#
use strict;
use warnings;
use version 0.77;
use Config;
BEGIN {
unless ($Config{useithreads}) {
print "1..0 # SKIP no ithreads\n";
exit 0;
}
my $v = version->parse($Config{version});
if ($v >= '5.9.5' and $v < '5.10.1') {
# See note in t/5persist/threads.t.
print "1..0 # SKIP threads broken in Perl_parser_dup\n";
exit 0;
}
if ($Config{osname} eq 'openbsd' and $Config{osvers} eq '7.0') {
print "1..0 # SKIP OpenBSD 7.0 threads broken?\n";
exit 0;
}
}
use threads;
use threads::shared;
use Test::More;
use MyNote;
use vars qw(@OPTS);
BEGIN {
@OPTS = qw(:mac=unique);
ok 1, 'began';
}
use UUID @OPTS;
ok 1, 'loaded';
my %seen = ();
share(%seen);
my $uu = UUID::uuid6();
ok 1, 'got something';
note $uu;
# 2d2281bc-b455-11ee-8325-5526d7fe9526
is substr($uu, 14, 1), '6', 'its v6';
is substr(unpack("B*", pack("H*", substr($uu, 19, 2))), 0, 2), '10', 'its dce';
is substr(unpack("B*", pack("H*", substr($uu, 24, 2))), 7, 1), '1', 'mcast set';
my $node = substr $uu, 24;
note "parent: $node";
{ lock %seen; ++$seen{$node} }
# all same.
note 'spawning';
threads->create( \&doit, $_ )->join
for 1..9;
sub doit {
note "in doit()";
my ($i) = @_;
note "generating $i";
my $ut = UUID::uuid6();
note "uuid $i: $ut";
my $n1 = substr $ut, 24;
note "node $i: $n1";
lock %seen;
ok !exists($seen{$n1}), "unique $i";
++$seen{$n1};
}
done_testing;
|