Upgrade to threads-shared-1.03
[p5sagit/p5-mst-13.2.git] / ext / threads / shared / t / hv_simple.t
index 81d0b88..9ea9b9e 100644 (file)
@@ -1,34 +1,45 @@
+use strict;
+use warnings;
 
 BEGIN {
-#    chdir 't' if -d 't';
-#    push @INC ,'../lib';
-    require Config; import Config;
-    unless ($Config{'useithreads'}) {
-        print "1..0 # Skip: no useithreads\n";
-        exit 0;
+    if ($ENV{'PERL_CORE'}){
+        chdir 't';
+        unshift @INC, '../lib';
+    }
+    use Config;
+    if (! $Config{'useithreads'}) {
+        print("1..0 # Skip: Perl not compiled with 'useithreads'\n");
+        exit(0);
     }
 }
 
+use ExtUtils::testlib;
 
 sub ok {
     my ($id, $ok, $name) = @_;
 
     # You have to do it this way or VMS will get confused.
-    print $ok ? "ok $id - $name\n" : "not ok $id - $name\n";
-
-    printf "# Failed test at line %d\n", (caller)[2] unless $ok;
+    if ($ok) {
+        print("ok $id - $name\n");
+    } else {
+        print("not ok $id - $name\n");
+        printf("# Failed test at line %d\n", (caller)[2]);
+    }
 
-    return $ok;
+    return ($ok);
 }
 
+BEGIN {
+    $| = 1;
+    print("1..16\n");   ### Number of tests that will be run ###
+};
 
-
-use ExtUtils::testlib;
-use strict;
-BEGIN { print "1..21\n" };
 use threads;
 use threads::shared;
-ok(1,1,"loaded");
+ok(1, 1, 'Loaded');
+
+### Start of Testing ###
+
 my %hash;
 share(%hash);
 $hash{"foo"} = "bar";
@@ -39,15 +50,15 @@ threads->create(sub { ok(3,$hash{"bar"} eq "thread1", "Check thread get and writ
     my $foo = delete($hash{"bar"});
     ok(4, $foo eq "thread1", "Check delete, want 'thread1' got '$foo'");
     $foo = delete($hash{"bar"});
-    ok(5, $foo == undef, "Check delete on empty value");
+    ok(5, !defined $foo, "Check delete on empty value");
 }
 ok(6, keys %hash == 1, "Check keys");
 $hash{"1"} = 1;
 $hash{"2"} = 2;
 $hash{"3"} = 3;
 ok(7, keys %hash == 4, "Check keys");
-ok(8, exists($hash{"1"}) == 1, "Exist on existing key");
-ok(9, exists($hash{"4"}) == undef, "Exists on non existing key");
+ok(8, exists($hash{"1"}), "Exist on existing key");
+ok(9, !exists($hash{"4"}), "Exists on non existing key");
 my %seen;
 foreach my $key ( keys %hash) {
     $seen{$key}++;
@@ -56,21 +67,14 @@ ok(10, $seen{1} == 1, "Keys..");
 ok(11, $seen{2} == 1, "Keys..");
 ok(12, $seen{3} == 1, "Keys..");
 ok(13, $seen{"foo"} == 1, "Keys..");
+
+# bugid #24407: the stringification of the numeric 1 got allocated to the
+# wrong thread memory pool, which crashes on Windows.
+ok(14, exists $hash{1}, "Check numeric key");
+
 threads->create(sub { %hash = () })->join();
-ok(14, keys %hash == 0, "Check clear");
-ok(15, threads::shared::_thrcnt(\%hash) == 1, "thrcnt");
-threads->create(sub { ok(16, threads::shared::_thrcnt(\%hash) == 2, "thrcnt is up")})->join();
-ok(17, threads::shared::_thrcnt(\%hash) == 1, "thrcnt is down");
-{ 
-       my $test;
-       my $test2;
-       share($test);
-       $test = \%hash;
-       $test2 = \%hash;
-       ok(18, threads::shared::_thrcnt(\%hash) == 2, "thrcnt is up on shared reference");
-       $test = "bar";
-       ok(19 , threads::shared::_thrcnt(\%hash) == 1, "thrcnt is down when shared reference is dropped");
-       $test = $test2;
-       ok(20, threads::shared::_thrcnt(\%hash) == 2, "thrcnt is up on shared reference");
-}
-ok(21 , threads::shared::_thrcnt(\%hash) == 1, "thrcnt is down when shared reference is killed");
+ok(15, keys %hash == 0, "Check clear");
+
+ok(16, is_shared(%hash), "Check for sharing");
+
+# EOF