b29cd043ed27a8f65f9dd77edd62662f493e1283
[perl.git] / ext / File-Glob / t / rt131211.t
1 use strict;
2 use warnings;
3 use v5.16.0;
4 use File::Temp 'tempdir';
5 use File::Spec::Functions;
6 use Test::More;
7 use Time::HiRes qw(time);
8
9 plan tests => 13;
10
11 my $path = tempdir uc cleanup => 1;
12 my @files= (
13     "x".("a" x 50)."b", # 0
14     "abbbbbbbbbbbbc",   # 1
15     "abbbbbbbbbbbbd",   # 2
16     "aaabaaaabaaaabc",  # 3
17     "pq",               # 4
18     "r",                # 5
19     "rttiiiiiii",       # 6
20     "wewewewewewe",     # 7
21     "weeeweeeweee",     # 8
22     "weewweewweew",     # 9
23     "wewewewewewewewewewewewewewewewewq", # 10
24     "wtttttttetttttttwr", # 11
25 );
26
27
28 foreach (@files) {
29     open(my $f, ">", catfile $path, $_);
30 }
31
32 my $elapsed_fail= 0;
33 my $elapsed_match= 0;
34 my @got_files;
35 my @no_files;
36 my $count = 0;
37
38 while (++$count < 10) {
39     $elapsed_match -= time;
40     @got_files= glob catfile $path, "x".("a*" x $count) . "b";
41     $elapsed_match += time;
42
43     $elapsed_fail -= time;
44     @no_files= glob catfile $path, "x".("a*" x $count) . "c";
45     $elapsed_fail += time;
46     last if $elapsed_fail > $elapsed_match * 100;
47 }
48
49 is $count,10,
50     "tried all the patterns without bailing out";
51
52 SKIP: {
53     skip "unstable timing", 1 unless $elapsed_match && $elapsed_fail;
54     ok $elapsed_fail <= 10 * $elapsed_match,
55         "time to fail less than 10x the time to match"
56         or diag("elapsed_match=$elapsed_match elapsed_fail=$elapsed_fail");
57 }
58
59 is "@got_files", catfile($path, $files[0]),
60     "only got the expected file for xa*..b";
61 is "@no_files", "", "shouldnt have files for xa*..c";
62
63
64 @got_files= glob catfile $path, "a*b*b*b*bc";
65 is "@got_files", catfile($path, $files[1]),
66     "only got the expected file for a*b*b*b*bc";
67
68 @got_files= sort glob catfile $path, "a*b*b*bc";
69 is "@got_files", catfile($path, $files[3])." ".catfile($path,$files[1]),
70     "got the expected two files for a*b*b*bc";
71
72 @got_files= sort glob catfile $path, "p*";
73 is "@got_files", catfile($path, $files[4]),
74     "p* matches pq";
75
76 @got_files= sort glob catfile $path, "r*???????";
77 is "@got_files", catfile($path, $files[6]),
78     "r*??????? works as expected";
79
80 @got_files= sort glob catfile $path, "w*e*w??e";
81 is "@got_files", join(" ", sort map { catfile($path, $files[$_]) } (7,8)),
82     "w*e*w??e works as expected";
83
84 @got_files= sort glob catfile $path, "w*e*we??";
85 is "@got_files", join(" ", sort map { catfile($path, $files[$_]) } (7,8,9,10)),
86     "w*e*we?? works as expected";
87
88 @got_files= sort glob catfile $path, "w**e**w";
89 is "@got_files", join(" ", sort map { catfile($path, $files[$_]) } (9)),
90     "w**e**w works as expected";
91
92 @got_files= sort glob catfile $path, "*wee*";
93 is "@got_files", join(" ", sort map { catfile($path, $files[$_]) } (8,9)),
94     "*wee* works as expected";
95
96 @got_files= sort glob catfile $path, "we*";
97 is "@got_files", join(" ", sort map { catfile($path, $files[$_]) } (7,8,9,10)),
98     "we* works as expected";
99