Commit | Line | Data |
---|---|---|
60ccc62f A |
1 | #!./perl |
2 | # Tests counting number of FETCHes. | |
3 | # | |
4 | # See Bug #76814. | |
5 | ||
6 | BEGIN { | |
7 | chdir 't' if -d 't'; | |
8 | @INC = '../lib'; | |
9 | require './test.pl'; | |
a9984b10 | 10 | plan (tests => 94); |
60ccc62f A |
11 | } |
12 | ||
13 | use strict; | |
14 | use warnings; | |
15 | ||
16 | my $TODO = "Bug 76814"; | |
17 | ||
18 | my $count = 0; | |
19 | ||
20 | sub TIESCALAR {bless \do {my $var = $_ [1]} => $_ [0];} | |
21 | sub FETCH {$count ++; ${$_ [0]}} | |
22 | sub STORE {1;} | |
23 | ||
24 | ||
25 | sub check_count { | |
26 | my $op = shift; | |
79504a3e | 27 | is $count, 1, "FETCH called just once using '$op'"; |
60ccc62f A |
28 | $count = 0; |
29 | } | |
30 | ||
31 | my ($dummy, @dummy); | |
32 | ||
33 | tie my $var => 'main', 1; | |
34 | ||
35 | # Assignment. | |
36 | $dummy = $var ; check_count "="; | |
37 | ||
38 | # Unary +/- | |
39 | $dummy = +$var ; check_count "unary +"; | |
40 | $dummy = -$var ; check_count "unary -"; | |
41 | ||
42 | # Basic arithmetic and string operators. | |
43 | $dummy = $var + 1 ; check_count '+'; | |
44 | $dummy = $var - 1 ; check_count '-'; | |
45 | $dummy = $var / 1 ; check_count '/'; | |
46 | $dummy = $var * 1 ; check_count '*'; | |
47 | $dummy = $var % 1 ; check_count '%'; | |
48 | $dummy = $var ** 1 ; check_count '**'; | |
49 | $dummy = $var << 1 ; check_count '<<'; | |
50 | $dummy = $var >> 1 ; check_count '>>'; | |
51 | $dummy = $var x 1 ; check_count 'x'; | |
52 | @dummy = ($var) x 1 ; check_count 'x'; | |
53 | $dummy = $var . 1 ; check_count '.'; | |
54 | ||
55 | # Pre/post in/decrement | |
56 | $var ++ ; check_count 'post ++'; | |
57 | $var -- ; check_count 'post --'; | |
58 | ++ $var ; check_count 'pre ++'; | |
59 | -- $var ; check_count 'pre --'; | |
60 | ||
61 | # Numeric comparison | |
62 | $dummy = $var < 1 ; check_count '<'; | |
63 | $dummy = $var <= 1 ; check_count '<='; | |
64 | $dummy = $var == 1 ; check_count '=='; | |
65 | $dummy = $var >= 1 ; check_count '>='; | |
66 | $dummy = $var > 1 ; check_count '>'; | |
67 | $dummy = $var != 1 ; check_count '!='; | |
68 | $dummy = $var <=> 1 ; check_count '<=>'; | |
69 | ||
70 | # String comparison | |
078504b2 FC |
71 | $dummy = $var lt 1 ; check_count 'lt'; |
72 | $dummy = $var le 1 ; check_count 'le'; | |
73 | $dummy = $var eq 1 ; check_count 'eq'; | |
74 | $dummy = $var ge 1 ; check_count 'ge'; | |
75 | $dummy = $var gt 1 ; check_count 'gt'; | |
76 | $dummy = $var ne 1 ; check_count 'ne'; | |
77 | $dummy = $var cmp 1 ; check_count 'cmp'; | |
60ccc62f A |
78 | |
79 | # Bitwise operators | |
80 | $dummy = $var & 1 ; check_count '&'; | |
81 | $dummy = $var ^ 1 ; check_count '^'; | |
82 | $dummy = $var | 1 ; check_count '|'; | |
83 | $dummy = ~$var ; check_count '~'; | |
84 | ||
85 | # Logical operators | |
06c841cf | 86 | $dummy = !$var ; check_count '!'; |
60ccc62f A |
87 | TODO: { |
88 | local $::TODO = $TODO; | |
60ccc62f A |
89 | $dummy = $var || 1 ; check_count '||'; |
90 | $dummy = ($var or 1); check_count 'or'; | |
91 | } | |
92 | $dummy = $var && 1 ; check_count '&&'; | |
93 | $dummy = ($var and 1); check_count 'and'; | |
94 | $dummy = ($var xor 1); check_count 'xor'; | |
95 | $dummy = $var ? 1 : 1 ; check_count '?:'; | |
96 | ||
97 | # Overloadable functions | |
98 | $dummy = sin $var ; check_count 'sin'; | |
99 | $dummy = cos $var ; check_count 'cos'; | |
100 | $dummy = exp $var ; check_count 'exp'; | |
101 | $dummy = abs $var ; check_count 'abs'; | |
102 | $dummy = log $var ; check_count 'log'; | |
103 | $dummy = sqrt $var ; check_count 'sqrt'; | |
104 | $dummy = int $var ; check_count 'int'; | |
105 | $dummy = atan2 $var, 1 ; check_count 'atan2'; | |
106 | ||
107 | # Readline/glob | |
108 | tie my $var0, "main", \*DATA; | |
109 | $dummy = <$var0> ; check_count '<readline>'; | |
110 | $dummy = <${var}> ; check_count '<glob>'; | |
111 | ||
112 | # File operators | |
113 | $dummy = -r $var ; check_count '-r'; | |
114 | $dummy = -w $var ; check_count '-w'; | |
115 | $dummy = -x $var ; check_count '-x'; | |
116 | $dummy = -o $var ; check_count '-o'; | |
117 | $dummy = -R $var ; check_count '-R'; | |
118 | $dummy = -W $var ; check_count '-W'; | |
119 | $dummy = -X $var ; check_count '-X'; | |
120 | $dummy = -O $var ; check_count '-O'; | |
121 | $dummy = -e $var ; check_count '-e'; | |
122 | $dummy = -z $var ; check_count '-z'; | |
123 | $dummy = -s $var ; check_count '-s'; | |
124 | $dummy = -f $var ; check_count '-f'; | |
125 | $dummy = -d $var ; check_count '-d'; | |
126 | $dummy = -l $var ; check_count '-l'; | |
127 | $dummy = -p $var ; check_count '-p'; | |
128 | $dummy = -S $var ; check_count '-S'; | |
129 | $dummy = -b $var ; check_count '-b'; | |
130 | $dummy = -c $var ; check_count '-c'; | |
131 | $dummy = -t $var ; check_count '-t'; | |
132 | $dummy = -u $var ; check_count '-u'; | |
133 | $dummy = -g $var ; check_count '-g'; | |
134 | $dummy = -k $var ; check_count '-k'; | |
135 | $dummy = -T $var ; check_count '-T'; | |
136 | $dummy = -B $var ; check_count '-B'; | |
137 | $dummy = -M $var ; check_count '-M'; | |
138 | $dummy = -A $var ; check_count '-A'; | |
139 | $dummy = -C $var ; check_count '-C'; | |
140 | ||
141 | # Matching | |
142 | $_ = "foo"; | |
143 | $dummy = $var =~ m/ / ; check_count 'm//'; | |
144 | $dummy = $var =~ s/ //; check_count 's///'; | |
145 | $dummy = $var ~~ 1 ; check_count '~~'; | |
9138d6ca | 146 | $dummy = $var =~ y/ //; check_count 'y///'; |
a9984b10 FC |
147 | /$var/ ; check_count 'm/pattern/'; |
148 | /$var foo/ ; check_count 'm/$tied foo/'; | |
149 | s/$var// ; check_count 's/pattern//'; | |
150 | s/$var foo// ; check_count 's/$tied foo//'; | |
60ccc62f A |
151 | s/./$var/ ; check_count 's//replacement/'; |
152 | ||
153 | # Dereferencing | |
154 | tie my $var1 => 'main', \1; | |
155 | $dummy = $$var1 ; check_count '${}'; | |
156 | tie my $var2 => 'main', []; | |
157 | $dummy = @$var2 ; check_count '@{}'; | |
158 | tie my $var3 => 'main', {}; | |
159 | $dummy = %$var3 ; check_count '%{}'; | |
160 | { | |
161 | no strict 'refs'; | |
162 | tie my $var4 => 'main', **; | |
163 | $dummy = *$var4 ; check_count '*{}'; | |
164 | } | |
165 | ||
166 | tie my $var5 => 'main', sub {1}; | |
167 | $dummy = &$var5 ; check_count '&{}'; | |
168 | ||
169 | __DATA__ |