source: trunk/src/kmk/testcase-ifcond.kmk@ 2020

Last change on this file since 2020 was 2019, checked in by bird, 17 years ago

GPLv2 -> GPLv3. See Ticket #44 for clarifications. Fixes #44.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 8.2 KB
Line 
1# $Id: testcase-ifcond.kmk 2019 2008-11-02 00:21:05Z bird $
2## @file
3# kBuild - testcase for the if conditionals.
4#
5
6#
7# Copyright (c) 2008 knut st. osmundsen <bird-src-spam@anduin.net>
8#
9# This file is part of kBuild.
10#
11# kBuild is free software; you can redistribute it and/or modify
12# it under the terms of the GNU General Public License as published by
13# the Free Software Foundation; either version 3 of the License, or
14# (at your option) any later version.
15#
16# kBuild is distributed in the hope that it will be useful,
17# but WITHOUT ANY WARRANTY; without even the implied warranty of
18# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19# GNU General Public License for more details.
20#
21# You should have received a copy of the GNU General Public License
22# along with kBuild. If not, see <http://www.gnu.org/licenses/>
23#
24#
25
26DEPTH = ../..
27include $(KBUILD_PATH)/header.kmk
28
29#
30# Note! The testcase are ordered by ascending operator precedence
31# with the exception of equal and not-equal because these
32# are kind of useful for performing tests on non-logical ops.
33#
34
35#
36# Parenthesis
37#
38$(warning unary operators: ( and ) )
39if (1)
40else
41$(error )
42endif
43
44if ((((1))))
45else
46$(error )
47endif
48
49
50#
51# Equal and Not Equal w/ some fundamental bits thrown in.
52#
53$(warning binary operators: == and != )
54
55if 1 == 1
56else
57$(error )
58endif
59
60if 2 == 3
61$(error )
62else
63endif
64
65if 2 != 3
66else
67$(error )
68endif
69
70if a != b
71else
72$(error )
73endif
74
75if asdf == asdf
76else
77$(error )
78endif
79
80if "asdf" == asdf
81else
82$(error )
83endif
84
85if 'asdf' == asdf
86else
87$(error )
88endif
89
90if 'asdf' == "asdf"
91else
92$(error )
93endif
94
95if 'asdf' == 'asdf'
96else
97$(error )
98endif
99
100if "asdf" == "asdf"
101else
102$(error )
103endif
104
105if 0x1 == 1
106else
107$(error )
108endif
109
110if 0xfff == 4095
111else
112$(error )
113endif
114
115if 0xfff == 4095
116else
117$(error )
118endif
119
120if 0d10 == 10
121else
122$(error )
123endif
124
125if 0d10 == 10
126else
127$(error )
128endif
129
130if 0xa == 012
131else
132$(error )
133endif
134
135if 0b1110 == 016
136else
137$(error )
138endif
139
140
141#
142# Logical OR
143#
144$(warning binary operator: || )
145if 1
146else
147$(error busted)
148endif
149
150if 1 || 1
151else
152$(error )
153endif
154
155if 0 || 0
156$(error )
157else
158endif
159
160if 1 || 0
161else
162$(error )
163endif
164
165if 0 || 1
166else
167$(error )
168endif
169
170if 0 || 0 || 0 || 0 || 0 || 0 || 0
171$(error )
172else
173endif
174
175if 0 || 0 || 0 || 1 || 0 || 0 || 0
176else
177$(error )
178endif
179
180if "asdf" || 0
181else
182$(error )
183endif
184
185if 0 || "asdf"
186else
187$(error )
188endif
189
190if 'asdf' || 0
191else
192$(error )
193endif
194
195if "" || 0
196$(error )
197endif
198if "" || 1
199else
200$(error )
201endif
202if '' || 0
203$(error )
204endif
205if '' || 1
206else
207$(error )
208endif
209
210if "" || ''
211$(error )
212endif
213if "1" || ''
214else
215$(error )
216endif
217if "1" || '1'
218else
219$(error )
220endif
221if "" || '1'
222else
223$(error )
224endif
225
226
227#
228# Logical AND
229#
230$(warning binary operator: && )
231if 1 && 1
232else
233$(error )
234endif
235if 1 && 0
236$(error )
237endif
238if 1234 && 0
239$(error )
240endif
241if 123434 && 0 && 123435 && 1
242$(error )
243endif
244
245if "" && 1
246$(error )
247endif
248if ("asdf" && 1) != 1
249$(error )
250endif
251if "1" && 'asdf'
252else
253$(error )
254endif
255if "1" && 'asdf' && 0
256$(error )
257endif
258
259if 0 || 1 && 0
260$(error )
261endif
262
263
264#
265# Bitwise OR
266#
267$(warning binary operator: | )
268if 1 | 0
269else
270$(error )
271endif
272if 1 | 1
273else
274$(error )
275endif
276if 11234 | 343423
277else
278$(error )
279endif
280if (1|2)!=3
281$(error )
282endif
283if 1|2 != 3
284else
285$(error )
286endif
287if (1|2|4|8)!=0xf
288$(error )
289endif
290
291
292#
293# Bitwise XOR
294#
295$(warning binary operator: ^ )
296if 1 ^ 1
297$(error )
298endif
299
300if (2 ^ 1) != 3
301$(error )
302endif
303
304if 7 != (2 ^ 1 ^ 4)
305$(error )
306endif
307
308if (2 ^ 1 | 2) != 3
309$(error )
310endif
311
312
313#
314# Bitwise AND
315#
316$(warning binary operator: & )
317if (4097 & 1) != 1
318$(error )
319endif
320if (0xfff & 0x0f0) != 0xf0
321$(error )
322endif
323if (0x1e3 & 0x100 | 3) != 0x103
324$(error )
325endif
326
327
328#
329# Greater than
330#
331$(warning binary operator: > )
332if 1 > 0
333else
334$(error )
335endif
336
337if 1024 > 1023
338else
339$(error )
340endif
341
342if 999 > 1023
343$(error )
344endif
345
346if (5 > 4 | 2) != 3
347$(error )
348endif
349
350if (1 & 8 > 4) != 1
351$(error )
352endif
353
354if (8 > 4 ^ 16) != 17
355$(error )
356endif
357
358if "b" > 'a'
359else
360$(error )
361endif
362if "abcdef" > 'ffdas'
363$(error )
364endif
365if abcdef > ffdas
366$(error )
367endif
368
369
370#
371# Greater or equal than
372#
373$(warning binary operator: >= )
374if 20 > 0
375else
376$(error )
377endif
378
379if 20 >= 20
380else
381$(error )
382endif
383
384if 19 >= 20
385$(error )
386endif
387
388if (1 & 8 >= 4) != 1
389$(error )
390endif
391
392if "x" >= 'x'
393else
394$(error )
395endif
396if "abdc" >= 'abcd'
397else
398$(error )
399endif
400if "ffdaaa" >= 'ffdasd'
401$(error )
402endif
403if asdf >= asdf
404else
405$(error )
406endif
407
408
409#
410# Less than
411#
412if 1 < 1
413$(error )
414endif
415if -123 < -134
416$(error )
417endif
418if 123 <= 7777
419else
420$(error )
421endif
422
423if "b" < 'a'
424$(error )
425endif
426if b < a
427$(error )
428endif
429if 'foobar' < 'a$'
430$(error )
431endif
432if hhhh < ggggg
433$(error )
434endif
435if qwerty < qwerty0
436else
437$(error )
438endif
439
440
441#
442# Less or equal than
443#
444$(warning binary operator: >> )
445if 1 <= 0
446$(error )
447endif
448if 1 <= 1
449else
450$(error )
451endif
452if 123 <= 123 != 1
453$(error )
454endif
455if 560 <= 456
456$(error )
457endif
458
459if "a" <= 'a'
460else
461$(error )
462endif
463if "abcdef" <= 'abcdef'
464else
465$(error )
466endif
467if q12345z6 <= q12345z
468$(error )
469endif
470if QWERTY <= ABCDE
471$(error )
472endif
473
474
475#
476# Shift right
477#
478$(warning binary operator: >> )
479if 1 >> 0 != 1
480$(error )
481endif
482if 1024 >> 2 != 256
483$(error )
484endif
485if 102435 >> 4 > 1234 != 1
486$(error )
487endif
488
489
490#
491# Shift left
492#
493$(warning binary operator: << )
494if 1 << 0 != 1
495$(error )
496endif
497if 1 << 1 != 2
498$(error )
499endif
500if 1 << 4 != 16
501$(error )
502endif
503if 1 << 10 != 1024
504$(error )
505endif
506if 34 << 10 != 0x8800
507$(error )
508endif
509if 1099511627776 << 21 != 2305843009213693952
510$(error )
511endif
512if 1 << 61 != 2305843009213693952
513$(error )
514endif
515
516if 2 << 60 > 123434323 != 1
517$(error )
518endif
519
520
521#
522# Subtraction
523#
524$(warning binary operator: - )
525if 1-1 != 0
526$(error )
527endif
528if 1023-511 != 512
529$(error )
530endif
531if 4 - 3 << 3 != 8
532$(error )
533endif
534
535
536#
537# Addition
538#
539$(warning binary operator: + )
540if 1+1 != 2
541$(error )
542endif
543if 1234+1000 != 2234
544$(error )
545endif
546if 2 + 2 << 4 != 64
547$(error )
548endif
549
550
551#
552# Modulus
553#
554$(warning binary operator: % )
555if 0%2 != 0
556$(error )
557endif
558if 10%7 != 3
559$(error )
560endif
561if 10 + 100%70 - 3 != 37
562$(error )
563endif
564
565
566#
567# Division
568#
569$(warning binary operator: / )
570if 0/1 != 0
571$(error )
572endif
573if 1000/2 != 500
574$(error )
575endif
576if 1000/2 + 4 != 504
577$(error )
578endif
579if 5 + 1000/4 != 255
580$(error )
581endif
582
583
584#
585# Multiplication
586#
587$(warning binary operator: * )
588if 1*1 != 1
589$(error )
590endif
591if 10*10 != 100
592$(error )
593endif
594if 1024*64 != 65536
595$(error )
596endif
597if 10*10 - 10 != 90
598$(error )
599endif
600if 1000 - 10*10 != 900
601$(error )
602endif
603
604
605#
606# Logical NOT
607#
608$(warning unary operator: ! )
609if !1
610$(error )
611endif
612
613if !42 == 0
614else
615$(error )
616endif
617
618if !0 == 1
619else
620$(error )
621endif
622
623if !!0 == 0
624else
625$(error )
626endif
627
628if !0 * 123 != 123
629$(error )
630endif
631if !!!0 * 512 != 512
632$(error )
633endif
634
635
636#
637# Bitwise NOT
638#
639$(warning unary operator: ~ )
640if ~0xfff != 0xfffffffffffff000
641$(error )
642endif
643
644
645#
646# Pluss
647#
648$(warning unary operator: + )
649if +2 != 2
650$(error )
651endif
652if 1++++++++++++2134 != 2135
653$(error )
654endif
655
656
657#
658# Minus (negation)
659#
660$(warning unary operator: - )
661if --2 != 2
662$(error )
663endif
664
665if 1 - -2 != 3
666$(error )
667endif
668
669
670#
671# target
672#
673trg_deps_only: foobar
674trg_with_cmds: foobar
675 echo $@
676
677$(warning unary operator: target ) # This flushes stuff in read.c
678
679if target trg_with_cmds
680else
681$(error target trg_with_cmds)
682endif
683if target(trg_deps_only)
684$(error target trg_deps_only)
685endif
686if target ( foobar )
687$(error target foobar)
688endif
689
690
691#
692# defined
693#
694$(warning unary operator: defined )
695var_defined := 1
696var_not_defined :=
697
698if defined var_defined
699else
700$(error )
701endif
702if defined(var_defined)
703else
704$(error )
705endif
706if defined (var_defined)
707else
708$(error )
709endif
710if !defined(var_defined)
711$(error )
712endif
713if defined (var_not_defined)
714$(error )
715endif
716
717
718#
719# bool
720#
721$(warning unary operator: bool )
722if bool("Asdf") != 1
723$(error )
724endif
725if bool("") != 0
726$(error )
727endif
728
729
730#
731# bool
732#
733$(warning unary operator: num )
734if num("1234") != 1235 - 1
735$(error )
736endif
737if num('1234') != 1233 + 1
738$(error )
739endif
740
741
742#
743# str
744#
745$(warning unary operator: str )
746if str(a < b) != 1
747$(error )
748endif
749if str(a < b) != '1'
750$(error )
751endif
752if str( 1 ) != "1"
753$(error )
754endif
755if str( 1 ) != "1"
756$(error )
757endif
758if str( num(0x1000) ) != "4096"
759$(error )
760endif
761if str(0x1000) != 0x1000
762$(error )
763endif
764
765
766
767#
768# Quick check of $(if-expr ) and $(expr ).
769#
770$(warning $$(if-expr ,,) )
771ifeq ($(if-expr 0 || 2,42,500),42)
772else
773$(error )
774endif
775ifeq ($(if-expr 5+3 == 231,42,500),42)
776$(error )
777endif
778
779$(warning $$(expr ) )
780ifeq ($(expr 5+3),8)
781else
782$(error expr:$(expr 5+3) expected 8)
783endif
784ifeq ($(expr 25*25),625)
785else
786$(error expr:$(expr 25*25) expected 625)
787endif
788ifeq ($(expr 100/3),3)
789$(error )
790endif
791
792
793
794all_recursive:
795 $(ECHO) "if works fine"
796
Note: See TracBrowser for help on using the repository browser.