diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-11 08:21:29 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-11 08:21:29 +0000 |
commit | 29cd838eab01ed7110f3ccb2e8c6a35c8a31dbcc (patch) | |
tree | 63ef546b10a81d461e5cf5ed9e98a68cd7dee1aa /src/kmk/tests/scripts/features/ifcond | |
parent | Initial commit. (diff) | |
download | kbuild-29cd838eab01ed7110f3ccb2e8c6a35c8a31dbcc.tar.xz kbuild-29cd838eab01ed7110f3ccb2e8c6a35c8a31dbcc.zip |
Adding upstream version 1:0.1.9998svn3589+dfsg.upstream/1%0.1.9998svn3589+dfsg
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/kmk/tests/scripts/features/ifcond')
-rw-r--r-- | src/kmk/tests/scripts/features/ifcond | 950 |
1 files changed, 950 insertions, 0 deletions
diff --git a/src/kmk/tests/scripts/features/ifcond b/src/kmk/tests/scripts/features/ifcond new file mode 100644 index 0000000..b492e77 --- /dev/null +++ b/src/kmk/tests/scripts/features/ifcond @@ -0,0 +1,950 @@ +# $Id: ifcond 2413 2010-09-11 17:43:04Z bird $ -*-perl-*- +## @file +# if conditionals. +# + +# +# Copyright (c) 2008-2010 knut st. osmundsen <bird-kBuild-spamx@anduin.net> +# +# This file is part of kBuild. +# +# kBuild is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# kBuild is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with kBuild. If not, see <http://www.gnu.org/licenses/> +# +# + +$description = "Tests the if conditionals"; + +$details = "..."; + +if ($is_kmk) { + + # TEST #0 - check that the feature is present. + # -------------------------------------------- + run_make_test(' +ifneq ($(if-expr 1+1,1,0),1) +$(error sub-test 0 failed) +endif +.PHONY: all +all: ; @: +', +'', +''); + + # TEST #1 - A more comprehensive, yet a bit large, test. + # ------------------------------------------------------ + run_make_test(' + +# +# Note! The testcase are ordered by ascending operator precedence +# with the exception of equal and not-equal because these +# are kind of useful for performing tests on non-logical ops. +# + +.PHONY: all +all: ; @: + +# +# Parenthesis +# +$(info unary operators: ( and )) +if (1) +else +$(error ) +endif + +if ((((1)))) +else +$(error ) +endif + + +# +# Equal and Not Equal w/ some fundamental bits thrown in. +# +$(info binary operators: == and !=) + +if 1 == 1 +else +$(error ) +endif + +if 2 == 3 +$(error ) +else +endif + +if 2 != 3 +else +$(error ) +endif + +if a != b +else +$(error ) +endif + +if asdf == asdf +else +$(error ) +endif + +if "asdf" == asdf +else +$(error ) +endif + +if \'asdf\' == asdf +else +$(error ) +endif + +if \'asdf\' == "asdf" +else +$(error ) +endif + +if \'asdf\' == \'asdf\' +else +$(error ) +endif + +if "asdf" == "asdf" +else +$(error ) +endif + +if 0x1 == 1 +else +$(error ) +endif + +if 0xfff == 4095 +else +$(error ) +endif + +if 0xfff == 4095 +else +$(error ) +endif + +if 0d10 == 10 +else +$(error ) +endif + +if 0d10 == 10 +else +$(error ) +endif + +if 0xa == 012 +else +$(error ) +endif + +if 0b1110 == 016 +else +$(error ) +endif + + +# +# Logical OR +# +$(info binary operator: ||) +if 1 +else +$(error busted) +endif + +if 1 || 1 +else +$(error ) +endif + +if 0 || 0 +$(error ) +else +endif + +if 1 || 0 +else +$(error ) +endif + +if 0 || 1 +else +$(error ) +endif + +if 0 || 0 || 0 || 0 || 0 || 0 || 0 +$(error ) +else +endif + +if 0 || 0 || 0 || 1 || 0 || 0 || 0 +else +$(error ) +endif + +if "asdf" || 0 +else +$(error ) +endif + +if 0 || "asdf" +else +$(error ) +endif + +if \'asdf\' || 0 +else +$(error ) +endif + +if "" || 0 +$(error ) +endif +if "" || 1 +else +$(error ) +endif +if \'\' || 0 +$(error ) +endif +if \'\' || 1 +else +$(error ) +endif + +if "" || \'\' +$(error ) +endif +if "1" || \'\' +else +$(error ) +endif +if "1" || \'1\' +else +$(error ) +endif +if "" || \'1\' +else +$(error ) +endif + + +# +# Logical AND +# +$(info binary operator: &&) +if 1 && 1 +else +$(error ) +endif +if 1 && 0 +$(error ) +endif +if 1234 && 0 +$(error ) +endif +if 123434 && 0 && 123435 && 1 +$(error ) +endif + +if "" && 1 +$(error ) +endif +if ("asdf" && 1) != 1 +$(error ) +endif +if "1" && \'asdf\' +else +$(error ) +endif +if "1" && \'asdf\' && 0 +$(error ) +endif + +if 0 || 1 && 0 +$(error ) +endif + + +# +# Bitwise OR +# +$(info binary operator: |) +if 1 | 0 +else +$(error ) +endif +if 1 | 1 +else +$(error ) +endif +if 11234 | 343423 +else +$(error ) +endif +if (1|2)!=3 +$(error ) +endif +if 1|2 != 3 +else +$(error ) +endif +if (1|2|4|8)!=0xf +$(error ) +endif + + +# +# Bitwise XOR +# +$(info binary operator: ^) +if 1 ^ 1 +$(error ) +endif + +if (2 ^ 1) != 3 +$(error ) +endif + +if 7 != (2 ^ 1 ^ 4) +$(error ) +endif + +if (2 ^ 1 | 2) != 3 +$(error ) +endif + + +# +# Bitwise AND +# +$(info binary operator: &) +if (4097 & 1) != 1 +$(error ) +endif +if (0xfff & 0x0f0) != 0xf0 +$(error ) +endif +if (0x1e3 & 0x100 | 3) != 0x103 +$(error ) +endif + + +# +# Greater than +# +$(info binary operator: >) +if 1 > 0 +else +$(error ) +endif + +if 1024 > 1023 +else +$(error ) +endif + +if 999 > 1023 +$(error ) +endif + +if (5 > 4 | 2) != 3 +$(error ) +endif + +if (1 & 8 > 4) != 1 +$(error ) +endif + +if (8 > 4 ^ 16) != 17 +$(error ) +endif + +if "b" > \'a\' +else +$(error ) +endif +if "abcdef" > \'ffdas\' +$(error ) +endif +if abcdef > ffdas +$(error ) +endif + + +# +# Greater or equal than +# +$(info binary operator: >=) +if 20 > 0 +else +$(error ) +endif + +if 20 >= 20 +else +$(error ) +endif + +if 19 >= 20 +$(error ) +endif + +if (1 & 8 >= 4) != 1 +$(error ) +endif + +if "x" >= \'x\' +else +$(error ) +endif +if "abdc" >= \'abcd\' +else +$(error ) +endif +if "ffdaaa" >= \'ffdasd\' +$(error ) +endif +if asdf >= asdf +else +$(error ) +endif + + +# +# Less than +# +if 1 < 1 +$(error ) +endif +if -123 < -134 +$(error ) +endif +if 123 <= 7777 +else +$(error ) +endif + +if "b" < \'a\' +$(error ) +endif +if b < a +$(error ) +endif +if \'foobar\' < \'a$\' +$(error ) +endif +if hhhh < ggggg +$(error ) +endif +if qwerty < qwerty0 +else +$(error ) +endif + + +# +# Less or equal than +# +$(info binary operator: >>) +if 1 <= 0 +$(error ) +endif +if 1 <= 1 +else +$(error ) +endif +if 123 <= 123 != 1 +$(error ) +endif +if 560 <= 456 +$(error ) +endif + +if "a" <= \'a\' +else +$(error ) +endif +if "abcdef" <= \'abcdef\' +else +$(error ) +endif +if q12345z6 <= q12345z +$(error ) +endif +if QWERTY <= ABCDE +$(error ) +endif + + +# +# Shift right +# +$(info binary operator: >>) +if 1 >> 0 != 1 +$(error ) +endif +if 1024 >> 2 != 256 +$(error ) +endif +if 102435 >> 4 > 1234 != 1 +$(error ) +endif + + +# +# Shift left +# +$(info binary operator: <<) +if 1 << 0 != 1 +$(error ) +endif +if 1 << 1 != 2 +$(error ) +endif +if 1 << 4 != 16 +$(error ) +endif +if 1 << 10 != 1024 +$(error ) +endif +if 34 << 10 != 0x8800 +$(error ) +endif +if 1099511627776 << 21 != 2305843009213693952 +$(error ) +endif +if 1 << 61 != 2305843009213693952 +$(error ) +endif + +if 2 << 60 > 123434323 != 1 +$(error ) +endif + + +# +# Subtraction +# +$(info binary operator: -) +if 1-1 != 0 +$(error ) +endif +if 1023-511 != 512 +$(error ) +endif +if 4 - 3 << 3 != 8 +$(error ) +endif + + +# +# Addition +# +$(info binary operator: +) +if 1+1 != 2 +$(error ) +endif +if 1234+1000 != 2234 +$(error ) +endif +if 2 + 2 << 4 != 64 +$(error ) +endif + + +# +# Modulus +# +$(info binary operator: %) +if 0%2 != 0 +$(error ) +endif +if 10%7 != 3 +$(error ) +endif +if 10 + 100%70 - 3 != 37 +$(error ) +endif + + +# +# Division +# +$(info binary operator: /) +if 0/1 != 0 +$(error ) +endif +if 1000/2 != 500 +$(error ) +endif +if 1000/2 + 4 != 504 +$(error ) +endif +if 5 + 1000/4 != 255 +$(error ) +endif + + +# +# Multiplication +# +$(info binary operator: *) +if 1*1 != 1 +$(error ) +endif +if 10*10 != 100 +$(error ) +endif +if 1024*64 != 65536 +$(error ) +endif +if 10*10 - 10 != 90 +$(error ) +endif +if 1000 - 10*10 != 900 +$(error ) +endif + + +# +# Logical NOT +# +$(info unary operator: !) +if !1 +$(error ) +endif + +if !42 == 0 +else +$(error ) +endif + +if !0 == 1 +else +$(error ) +endif + +if !!0 == 0 +else +$(error ) +endif + +if !0 * 123 != 123 +$(error ) +endif +if !!!0 * 512 != 512 +$(error ) +endif + + +# +# Bitwise NOT +# +$(info unary operator: ~) +if ~0xfff != 0xfffffffffffff000 +$(error ) +endif + + +# +# Pluss +# +$(info unary operator: +) +if +2 != 2 +$(error ) +endif +if 1++++++++++++2134 != 2135 +$(error ) +endif + + +# +# Minus (negation) +# +$(info unary operator: -) +if --2 != 2 +$(error ) +endif + +if 1 - -2 != 3 +$(error ) +endif + + +# +# target +# +trg_deps_only: foobar +trg_with_cmds: foobar + echo $@ + +$(info unary operator: target) # This flushes stuff in read.c + +if target trg_with_cmds +else +$(error target trg_with_cmds) +endif +if target(trg_deps_only) +$(error target trg_deps_only) +endif +if target ( foobar ) +$(error target foobar) +endif + + +# +# defined +# +$(info unary operator: defined) +var_defined := 1 +var_not_defined := + +if defined var_defined +else +$(error ) +endif +if defined(var_defined) +else +$(error ) +endif +if defined (var_defined) +else +$(error ) +endif +if !defined(var_defined) +$(error ) +endif +if defined (var_not_defined) +$(error ) +endif + + +# +# bool +# +$(info unary operator: bool) +if bool("Asdf") != 1 +$(error ) +endif +if bool("") != 0 +$(error ) +endif + + +# +# bool +# +$(info unary operator: num) +if num("1234") != 1235 - 1 +$(error ) +endif +if num(\'1234\') != 1233 + 1 +$(error ) +endif + + +# +# str +# +$(info unary operator: str) +if str(a < b) != 1 +$(error ) +endif +if str(a < b) != \'1\' +$(error ) +endif +if str( 1 ) != "1" +$(error ) +endif +if str( 1 ) != "1" +$(error ) +endif +if str( num(0x1000) ) != "4096" +$(error ) +endif +if str(0x1000) != 0x1000 +$(error ) +endif + + + +# +# Quick check of $(if-expr ) and $(expr ). +# +$(info $$(if-expr ,,)) +ifeq ($(if-expr 0 || 2,42,500),42) +else +$(error ) +endif +ifeq ($(if-expr 5+3 == 231,42,500),42) +$(error ) +endif + +$(info $$(expr )) +ifeq ($(expr 5+3),8) +else +$(error expr:$(expr 5+3) expected 8) +endif +ifeq ($(expr 25*25),625) +else +$(error expr:$(expr 25*25) expected 625) +endif +ifeq ($(expr 100/3),3) +$(error ) +endif +', +'', +'unary operators: ( and ) +binary operators: == and != +binary operator: || +binary operator: && +binary operator: | +binary operator: ^ +binary operator: & +binary operator: > +binary operator: >= +binary operator: >> +binary operator: >> +binary operator: << +binary operator: - +binary operator: + +binary operator: % +binary operator: / +binary operator: * +unary operator: ! +unary operator: ~ +unary operator: + +unary operator: - +unary operator: target +unary operator: defined +unary operator: bool +unary operator: num +unary operator: str +$(if-expr ,,) +$(expr ) +'); + +} + + + # TEST #2 - A bug. + # ------------------------------------------------------ + run_make_test(' +.PHONY: all +all: ; @: + +# +# Assert sanity first on simple strings. +# +if abcd != "abcd" +$(error ) +endif + +if \'abcd\' != abcd +$(error ) +endif + +if abcd != abcd +$(error ) +endif + + +# +# String by reference, start with a few simple cases. +# +STR1 = abcd + +if "$(STR1)" != "abcd" +$(error ) +endif + +if \'$(STR1)\' == "abcd" # not expanded. +$(error ) +endif + +if \'$(STR1)\' != \'$(STR1)\' +$(error ) +endif + +if "$(STR1)" != "$(STR1)" +$(error ) +endif + +# +# Now for the kmk 0.1.4 bug... +# +if $(STR1) != "$(STR1)" +$(error ) +endif + +if "$(STR1)" != $(STR1) +$(error ) +endif + +if $(STR1) != $(STR1) +$(error ) +endif + +# +# And some extra for good measure. +# +STR2 = STR +NUM1 = 1 + +if $($(STR2)$(NUM1)) != "abcd" +$(error ) +endif + +if "abcd" != $($(STR2)$(NUM1)) +$(error ) +endif + +if "abcd" != $(${STR2}$(NUM1)) +$(error ) +endif + +if "abcd" != ${$(STR2)$(NUM1)} +$(error ) +endif + +if "abcd" != ${${STR2}${NUM1}} +$(error ) +endif + +if ${${STR2}${NUM1}} != \'abcd\' +$(error ) +endif + +if "${${STR2}${NUM1}}" != \'abcd\' +$(error ) +endif + + +', +'', +''); + + + +# Indicate that we're done. +1; + + |