1f2a19305Safresh1#!./perl 2f2a19305Safresh1# 3f2a19305Safresh1# This is a home for regular expression tests that don't fit into 4f2a19305Safresh1# the format supported by re/regexp.t. If you want to add a test 5f2a19305Safresh1# that does fit that format, add it to re/re_tests, not here. 6f2a19305Safresh1 7f2a19305Safresh1use strict; 8f2a19305Safresh1use warnings; 9f2a19305Safresh1 10f2a19305Safresh1sub run_tests; 11f2a19305Safresh1 12f2a19305Safresh1$| = 1; 13f2a19305Safresh1 14f2a19305Safresh1BEGIN { 15f2a19305Safresh1 chdir 't' if -d 't'; 16f2a19305Safresh1 require './test.pl'; 17f2a19305Safresh1 set_up_inc('../lib', '.', '../ext/re'); 18*5486feefSafresh1 require Config; Config->import; 19f2a19305Safresh1} 20f2a19305Safresh1 21f2a19305Safresh1skip_all_without_config('useithreads'); 22f2a19305Safresh1skip_all_if_miniperl("no dynamic loading on miniperl, no threads"); 23f2a19305Safresh1 24f2a19305Safresh1plan tests => 6; # Update this when adding/deleting tests. 25f2a19305Safresh1 26f2a19305Safresh1run_tests() unless caller; 27f2a19305Safresh1 28f2a19305Safresh1# 29f2a19305Safresh1# Tests start here. 30f2a19305Safresh1# 31f2a19305Safresh1sub run_tests { 32f2a19305Safresh1 my @res; 33f2a19305Safresh1 for my $len (10,100,1000) { 34f2a19305Safresh1 my $result1= fresh_perl(sprintf(<<'EOF_CODE', $len), 35f2a19305Safresh1 use threads; 36f2a19305Safresh1 use re 'debug'; 37f2a19305Safresh1 38f2a19305Safresh1 sub start_thread { 39f2a19305Safresh1 warn "===\n"; 40f2a19305Safresh1 split /[.;]+[\'\"]+/, $_[0]; 41f2a19305Safresh1 warn "===\n"; 42f2a19305Safresh1 } 43f2a19305Safresh1 44f2a19305Safresh1 my $buffer = '.' x %d; 45f2a19305Safresh1 46f2a19305Safresh1 start_thread $buffer; 47f2a19305Safresh1EOF_CODE 48f2a19305Safresh1 {}); 49f2a19305Safresh1 my $result2= fresh_perl(sprintf(<<'EOF_CODE', $len), 50f2a19305Safresh1 use threads; 51f2a19305Safresh1 use re 'debug'; 52f2a19305Safresh1 53f2a19305Safresh1 sub start_thread { 54f2a19305Safresh1 warn "\n===\n"; 55f2a19305Safresh1 split /[.;]+[\'\"]+/, $_[0]; 56f2a19305Safresh1 warn "\n===\n"; 57f2a19305Safresh1 } 58f2a19305Safresh1 59f2a19305Safresh1 my $buffer = '.' x %d; 60f2a19305Safresh1 my $thr = threads->create('start_thread', $buffer); 61f2a19305Safresh1 $thr->join(); 62f2a19305Safresh1EOF_CODE 63f2a19305Safresh1 {}); 64f2a19305Safresh1 for ($result1, $result2) { 65f2a19305Safresh1 (undef,$_,undef)= split /\n===\n/, $_; 66f2a19305Safresh1 } 67f2a19305Safresh1 my @l1= split /\n/, $result1; 68f2a19305Safresh1 my @l2= split /\n/, $result2; 69f2a19305Safresh1 push @res, 0+@l2; 70f2a19305Safresh1 is(0+@l2,0+@l1, sprintf 71f2a19305Safresh1 "Threaded and unthreaded stclass behavior matches (n=%d)", 72f2a19305Safresh1 $len); 73f2a19305Safresh1 } 74f2a19305Safresh1 my $n10= $res[0]/10; 75f2a19305Safresh1 my $n100= $res[1]/100; 76f2a19305Safresh1 my $n1000= $res[2]/1000; 77f2a19305Safresh1 ok(abs($n10-$n100)<1,"Behavior appears to be sub quadratic ($n10, $n100)"); 78f2a19305Safresh1 ok(abs($n100-$n1000)<0.1,"Behavior is linear and not quadratic ($n100, $n1000)"); 79f2a19305Safresh1 ok(abs(3-$n1000)<0.1,"Behavior is linear as expected"); 80f2a19305Safresh1} 81f2a19305Safresh1# 82