source: vendor/automake/1.9.6/lib/Automake/tests/Condition.pl@ 3086

Last change on this file since 3086 was 3086, checked in by bird, 19 years ago

automake 1.9.6

File size: 8.5 KB
Line 
1# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
2#
3# This file is part of GNU Automake.
4#
5# GNU Automake is free software; you can redistribute it and/or modify
6# it under the terms of the GNU General Public License as published by
7# the Free Software Foundation; either version 2, or (at your option)
8# any later version.
9#
10# GNU Automake is distributed in the hope that it will be useful,
11# but WITHOUT ANY WARRANTY; without even the implied warranty of
12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13# GNU General Public License for more details.
14#
15# You should have received a copy of the GNU General Public License
16# along with autoconf; see the file COPYING. If not, write to
17# the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18# Boston, MA 02110-1301, USA.
19
20use Automake::Condition qw/TRUE FALSE/;
21
22sub test_basics ()
23{
24 my @tests = (# [[Conditions], is_true?, is_false?, string, subst-string]
25 [[], 1, 0, 'TRUE', ''],
26 [['TRUE'], 1, 0, 'TRUE', ''],
27 [['FALSE'], 0, 1, 'FALSE', '#'],
28 [['A_TRUE'], 0, 0, 'A_TRUE', '@A_TRUE@'],
29 [['A_TRUE', 'B_FALSE'],
30 0, 0, 'A_TRUE B_FALSE', '@A_TRUE@@B_FALSE@'],
31 [['B_TRUE', 'FALSE'], 0, 1, 'FALSE', '#'],
32 [['B_TRUE', 'B_FALSE'], 0, 1, 'FALSE', '#']);
33
34 for (@tests)
35 {
36 my $a = new Automake::Condition @{$_->[0]};
37 return 1 if $_->[1] != $a->true;
38 return 1 if $_->[1] != ($a == TRUE);
39 return 1 if $_->[2] != $a->false;
40 return 1 if $_->[2] != ($a == FALSE);
41 return 1 if $_->[3] ne $a->string;
42 return 1 if $_->[4] ne $a->subst_string;
43 }
44 return 0;
45}
46
47sub test_true_when ()
48{
49 my $failed = 0;
50
51 my @tests = (# [When,
52 # [Implied-Conditions],
53 # [Not-Implied-Conditions]]
54 [['TRUE'],
55 [['TRUE']],
56 [['A_TRUE'], ['A_TRUE', 'B_FALSE'], ['FALSE']]],
57 [['A_TRUE'],
58 [['TRUE'], ['A_TRUE']],
59 [['A_TRUE', 'B_FALSE'], ['FALSE']]],
60 [['A_TRUE', 'B_FALSE'],
61 [['TRUE'], ['A_TRUE'], ['B_FALSE'], ['A_TRUE', 'B_FALSE']],
62 [['FALSE'], ['C_FALSE'], ['C_FALSE', 'A_TRUE']]]);
63
64 for my $t (@tests)
65 {
66 my $a = new Automake::Condition @{$t->[0]};
67 for my $u (@{$t->[1]})
68 {
69 my $b = new Automake::Condition @$u;
70 if (! $b->true_when ($a))
71 {
72 print "`" . $b->string .
73 "' not implied by `" . $a->string . "'?\n";
74 $failed = 1;
75 }
76 }
77 for my $u (@{$t->[2]})
78 {
79 my $b = new Automake::Condition @$u;
80 if ($b->true_when ($a))
81 {
82 print "`" . $b->string .
83 "' implied by `" . $a->string . "'?\n";
84 $failed = 1;
85 }
86
87 return 1 if $b->true_when ($a);
88 }
89 }
90 return $failed;
91}
92
93sub test_reduce_and ()
94{
95 my @tests = (# If no conditions are given, TRUE should be returned
96 [[], ["TRUE"]],
97 # An empty condition is TRUE
98 [[""], ["TRUE"]],
99 # A single condition should be passed through unchanged
100 [["FOO"], ["FOO"]],
101 [["FALSE"], ["FALSE"]],
102 [["TRUE"], ["TRUE"]],
103 # TRUE and false should be discarded and overwhelm
104 # the result, respectively
105 [["FOO", "TRUE"], ["FOO"]],
106 [["FOO", "FALSE"], ["FALSE"]],
107 # Repetitions should be removed
108 [["FOO", "FOO"], ["FOO"]],
109 [["TRUE", "FOO", "FOO"], ["FOO"]],
110 [["FOO", "TRUE", "FOO"], ["FOO"]],
111 [["FOO", "FOO", "TRUE"], ["FOO"]],
112 # Two different conditions should be preserved,
113 # but TRUEs should be removed
114 [["FOO", "BAR"], ["BAR,FOO"]],
115 [["TRUE", "FOO", "BAR"], ["BAR,FOO"]],
116 [["FOO", "TRUE", "BAR"], ["BAR,FOO"]],
117 [["FOO", "BAR", "TRUE"], ["BAR,FOO"]],
118 # A condition implied by another condition should be removed.
119 [["FOO BAR", "BAR"], ["FOO BAR"]],
120 [["BAR", "FOO BAR"], ["FOO BAR"]],
121 [["TRUE", "FOO BAR", "BAR"], ["FOO BAR"]],
122 [["FOO BAR", "TRUE", "BAR"], ["FOO BAR"]],
123 [["FOO BAR", "BAR", "TRUE"], ["FOO BAR"]],
124
125 [["BAR FOO", "BAR"], ["BAR FOO"]],
126 [["BAR", "BAR FOO"], ["BAR FOO"]],
127 [["TRUE", "BAR FOO", "BAR"], ["BAR FOO"]],
128 [["BAR FOO", "TRUE", "BAR"], ["BAR FOO"]],
129 [["BAR FOO", "BAR", "TRUE"], ["BAR FOO"]],
130
131 # Check that reduction happens even when there are
132 # two conditions to remove.
133 [["FOO", "FOO BAR", "BAR"], ["FOO BAR"]],
134 [["FOO", "FOO BAR", "BAZ", "FOO BAZ"], ["FOO BAR", "FOO BAZ"]],
135 [["FOO", "FOO BAR", "BAZ", "FOO BAZ", "FOO BAZ BAR"],
136 ["FOO BAZ BAR"]],
137
138 # Duplicated conditionals should be removed.
139 [["FOO", "BAR", "BAR"], ["BAR,FOO"]],
140
141 # Equivalent conditions in different forms should be
142 # reduced: which one is left is unfortunately order
143 # dependent.
144 [["BAR FOO", "FOO BAR"], ["FOO BAR"]],
145 [["FOO BAR", "BAR FOO"], ["BAR FOO"]]);
146
147 my $failed = 0;
148 foreach (@tests)
149 {
150 my ($inref, $outref) = @$_;
151 my @inconds = map { new Automake::Condition $_ } @$inref;
152 my @outconds = map { (new Automake::Condition $_)->string } @$outref;
153 my @res =
154 map { $_->string } (Automake::Condition::reduce_and (@inconds));
155 my $result = join (",", sort @res);
156 my $exresult = join (",", @outconds);
157
158 if ($result ne $exresult)
159 {
160 print '"' . join(",", @$inref) . '" => "' .
161 $result . '" expected "' .
162 $exresult . '"' . "\n";
163 $failed = 1;
164 }
165 }
166 return $failed;
167}
168
169sub test_reduce_or ()
170{
171 my @tests = (# If no conditions are given, FALSE should be returned
172 [[], ["FALSE"]],
173 # An empty condition is TRUE
174 [[""], ["TRUE"]],
175 # A single condition should be passed through unchanged
176 [["FOO"], ["FOO"]],
177 [["FALSE"], ["FALSE"]],
178 [["TRUE"], ["TRUE"]],
179 # FALSE and TRUE should be discarded and overwhelm
180 # the result, respectively
181 [["FOO", "TRUE"], ["TRUE"]],
182 [["FOO", "FALSE"], ["FOO"]],
183 # Repetitions should be removed
184 [["FOO", "FOO"], ["FOO"]],
185 [["FALSE", "FOO", "FOO"], ["FOO"]],
186 [["FOO", "FALSE", "FOO"], ["FOO"]],
187 [["FOO", "FOO", "FALSE"], ["FOO"]],
188 # Two different conditions should be preserved,
189 # but FALSEs should be removed
190 [["FOO", "BAR"], ["BAR,FOO"]],
191 [["FALSE", "FOO", "BAR"], ["BAR,FOO"]],
192 [["FOO", "FALSE", "BAR"], ["BAR,FOO"]],
193 [["FOO", "BAR", "FALSE"], ["BAR,FOO"]],
194 # A condition implying another condition should be removed.
195 [["FOO BAR", "BAR"], ["BAR"]],
196 [["BAR", "FOO BAR"], ["BAR"]],
197 [["FALSE", "FOO BAR", "BAR"], ["BAR"]],
198 [["FOO BAR", "FALSE", "BAR"], ["BAR"]],
199 [["FOO BAR", "BAR", "FALSE"], ["BAR"]],
200
201 [["BAR FOO", "BAR"], ["BAR"]],
202 [["BAR", "BAR FOO"], ["BAR"]],
203 [["FALSE", "BAR FOO", "BAR"], ["BAR"]],
204 [["BAR FOO", "FALSE", "BAR"], ["BAR"]],
205 [["BAR FOO", "BAR", "FALSE"], ["BAR"]],
206
207 # Check that reduction happens even when there are
208 # two conditions to remove.
209 [["FOO", "FOO BAR", "BAR"], ["BAR,FOO"]],
210 [["FOO", "FOO BAR", "BAZ", "FOO BAZ"], ["BAZ,FOO"]],
211 [["FOO", "FOO BAR", "BAZ", "FOO BAZ", "FOO BAZ BAR"],
212 ["BAZ,FOO"]],
213
214 # Duplicated conditionals should be removed.
215 [["FOO", "BAR", "BAR"], ["BAR,FOO"]],
216
217 # Equivalent conditions in different forms should be
218 # reduced: which one is left is unfortunately order
219 # dependent.
220 [["BAR FOO", "FOO BAR"], ["FOO BAR"]],
221 [["FOO BAR", "BAR FOO"], ["BAR FOO"]]);
222
223 my $failed = 0;
224 foreach (@tests)
225 {
226 my ($inref, $outref) = @$_;
227 my @inconds = map { new Automake::Condition $_ } @$inref;
228 my @outconds = map { (new Automake::Condition $_)->string } @$outref;
229 my @res =
230 map { $_->string } (Automake::Condition::reduce_or (@inconds));
231 my $result = join (",", sort @res);
232 my $exresult = join (",", @outconds);
233
234 if ($result ne $exresult)
235 {
236 print '"' . join(",", @$inref) . '" => "' .
237 $result . '" expected "' .
238 $exresult . '"' . "\n";
239 $failed = 1;
240 }
241 }
242 return $failed;
243}
244
245exit (test_basics || test_true_when || test_reduce_and || test_reduce_or);
246
247### Setup "GNU" style for perl-mode and cperl-mode.
248## Local Variables:
249## perl-indent-level: 2
250## perl-continued-statement-offset: 2
251## perl-continued-brace-offset: 0
252## perl-brace-offset: 0
253## perl-brace-imaginary-offset: 0
254## perl-label-offset: -2
255## cperl-indent-level: 2
256## cperl-brace-offset: 0
257## cperl-continued-brace-offset: 0
258## cperl-label-offset: -2
259## cperl-extra-newline-before-brace: t
260## cperl-merge-trailing-else: nil
261## cperl-continued-statement-offset: 2
262## End:
Note: See TracBrowser for help on using the repository browser.