From 4aca87515a5083ae0e31ce3177189fd43b6d05ac Mon Sep 17 00:00:00 2001 From: Andreas Baumann Date: Sat, 3 Jan 2015 13:58:15 +0100 Subject: patch to Vanilla Tomato 1.28 --- .../busybox/shell/ash_test/ash-arith/README.ash | 1 + .../shell/ash_test/ash-arith/arith-bash1.right | 2 + .../shell/ash_test/ash-arith/arith-bash1.tests | 5 + .../shell/ash_test/ash-arith/arith-for.right | 74 +++++ .../shell/ash_test/ash-arith/arith-for.testsx | 94 +++++++ .../busybox/shell/ash_test/ash-arith/arith.right | 138 ++++++++++ .../busybox/shell/ash_test/ash-arith/arith.tests | 302 +++++++++++++++++++++ .../busybox/shell/ash_test/ash-arith/arith1.sub | 40 +++ .../busybox/shell/ash_test/ash-arith/arith2.sub | 57 ++++ 9 files changed, 713 insertions(+) create mode 100644 release/src/router/busybox/shell/ash_test/ash-arith/README.ash create mode 100644 release/src/router/busybox/shell/ash_test/ash-arith/arith-bash1.right create mode 100755 release/src/router/busybox/shell/ash_test/ash-arith/arith-bash1.tests create mode 100644 release/src/router/busybox/shell/ash_test/ash-arith/arith-for.right create mode 100755 release/src/router/busybox/shell/ash_test/ash-arith/arith-for.testsx create mode 100644 release/src/router/busybox/shell/ash_test/ash-arith/arith.right create mode 100755 release/src/router/busybox/shell/ash_test/ash-arith/arith.tests create mode 100755 release/src/router/busybox/shell/ash_test/ash-arith/arith1.sub create mode 100755 release/src/router/busybox/shell/ash_test/ash-arith/arith2.sub (limited to 'release/src/router/busybox/shell/ash_test/ash-arith') diff --git a/release/src/router/busybox/shell/ash_test/ash-arith/README.ash b/release/src/router/busybox/shell/ash_test/ash-arith/README.ash new file mode 100644 index 00000000..7da22ef7 --- /dev/null +++ b/release/src/router/busybox/shell/ash_test/ash-arith/README.ash @@ -0,0 +1 @@ +there is no support for (( )) constructs in ash diff --git a/release/src/router/busybox/shell/ash_test/ash-arith/arith-bash1.right b/release/src/router/busybox/shell/ash_test/ash-arith/arith-bash1.right new file mode 100644 index 00000000..b261da18 --- /dev/null +++ b/release/src/router/busybox/shell/ash_test/ash-arith/arith-bash1.right @@ -0,0 +1,2 @@ +1 +0 diff --git a/release/src/router/busybox/shell/ash_test/ash-arith/arith-bash1.tests b/release/src/router/busybox/shell/ash_test/ash-arith/arith-bash1.tests new file mode 100755 index 00000000..b37b7302 --- /dev/null +++ b/release/src/router/busybox/shell/ash_test/ash-arith/arith-bash1.tests @@ -0,0 +1,5 @@ +# checks for [[ ]] + +# && and || +[[ a && "" ]]; echo $? +[[ a || "" ]]; echo $? diff --git a/release/src/router/busybox/shell/ash_test/ash-arith/arith-for.right b/release/src/router/busybox/shell/ash_test/ash-arith/arith-for.right new file mode 100644 index 00000000..88dbc15f --- /dev/null +++ b/release/src/router/busybox/shell/ash_test/ash-arith/arith-for.right @@ -0,0 +1,74 @@ +0 +1 +2 +0 +1 +2 +0 +1 +2 +0 +2 +4 +fx is a function +fx () +{ + i=0; + for ((1; i < 3; i++ )) + do + echo $i; + done; + for ((i=0; 1; i++ )) + do + if (( i >= 3 )); then + break; + fi; + echo $i; + done; + for ((i=0; i<3; 1)) + do + echo $i; + (( i++ )); + done; + i=0; + for ((1; 1; 1)) + do + if (( i > 2 )); then + break; + fi; + echo $i; + (( i++ )); + done; + i=0; + for ((1; 1; 1)) + do + if (( i > 2 )); then + break; + fi; + echo $i; + (( i++ )); + done +} +0 +1 +2 +0 +1 +2 +0 +1 +2 +0 +1 +2 +0 +1 +2 +./arith-for.tests: line 77: syntax error: arithmetic expression required +./arith-for.tests: line 77: syntax error: `(( i=0; "i < 3" ))' +2 +./arith-for.tests: line 83: syntax error: `;' unexpected +./arith-for.tests: line 83: syntax error: `(( i=0; i < 3; i++; 7 ))' +2 +20 +20 diff --git a/release/src/router/busybox/shell/ash_test/ash-arith/arith-for.testsx b/release/src/router/busybox/shell/ash_test/ash-arith/arith-for.testsx new file mode 100755 index 00000000..4fa30ff9 --- /dev/null +++ b/release/src/router/busybox/shell/ash_test/ash-arith/arith-for.testsx @@ -0,0 +1,94 @@ +fx() +{ +i=0 +for (( ; i < 3; i++ )) +do + echo $i +done + +for (( i=0; ; i++ )) +do + if (( i >= 3 )); then + break; + fi + echo $i +done + +for (( i=0; i<3; )) +do + echo $i + (( i++ )) +done + +i=0 +for (( ; ; )) +do + if (( i > 2 )); then + break; + fi + echo $i; + (( i++ )) +done + +i=0 +for ((;;)) +do + if (( i > 2 )); then + break; + fi + echo $i; + (( i++ )) +done +} + +for (( i=0; "i < 3" ; i++ )) +do + echo $i +done + +i=0 +for (( ; "i < 3"; i++ )) +do + echo $i +done + +for (( i=0; ; i++ )) +do + if (( i >= 3 )); then + break; + fi + echo $i +done + +for ((i = 0; ;i++ )) +do + echo $i + if (( i < 3 )); then + (( i++ )) + continue; + fi + break +done + +type fx +fx + +# errors +for (( i=0; "i < 3" )) +do + echo $i +done +echo $? + +for (( i=0; i < 3; i++; 7 )) +do + echo $i +done +echo $? + +# one-liners added in post-bash-2.04 +for ((i=0; i < 20; i++)) do : ; done +echo $i + +for ((i=0; i < 20; i++)) { : ; } +echo $i diff --git a/release/src/router/busybox/shell/ash_test/ash-arith/arith.right b/release/src/router/busybox/shell/ash_test/ash-arith/arith.right new file mode 100644 index 00000000..3ea7ce68 --- /dev/null +++ b/release/src/router/busybox/shell/ash_test/ash-arith/arith.right @@ -0,0 +1,138 @@ +Format: 'expected actual' +163 163 +4 4 +16 16 +8 8 +2 2 +4 4 +2 2 +2 2 +1 1 +0 0 +0 0 +0 0 +1 1 +1 1 +2 2 +-3 -3 +-2 -2 +1 1 +0 0 +2 2 +131072 131072 +29 29 +33 33 +49 49 +1 1 +1 1 +0 0 +0 0 +1 1 +1 1 +1 1 +2 2 +3 3 +1 1 +58 58 +2 2 +60 60 +1 1 +256 256 +16 16 +62 62 +4 4 +29 29 +5 5 +-4 -4 +4 4 +1 1 +32 32 +32 32 +1 1 +1 1 +32 32 +20 20 +30 30 +20 20 +30 30 +./arith.tests: line 117: syntax error: 1 ? 20 : x+=2 +6 6 +6,5,3 6,5,3 +263 263 +255 255 +40 40 +./arith.tests: line 163: syntax error: 7 = 43 +./arith.tests: line 165: divide by zero +./arith.tests: let: line 166: syntax error: jv += $iv +./arith.tests: line 167: syntax error: jv += $iv +./arith.tests: let: line 168: syntax error: rv = 7 + (43 * 6 +abc +def +ghi +./arith.tests: line 191: syntax error: ( 4 + A ) + 4 +16 16 +./arith.tests: line 196: syntax error: 4 ? : 3 + 5 +./arith.tests: line 197: syntax error: 1 ? 20 +./arith.tests: line 198: syntax error: 4 ? 20 : +9 9 +./arith.tests: line 205: syntax error: 0 && B=42 +./arith.tests: line 208: syntax error: 1 || B=88 +9 9 +9 9 +9 9 +7 7 +7 +4 4 +32767 32767 +32768 32768 +131072 131072 +2147483647 2147483647 +1 1 +4 4 +4 4 +5 5 +5 5 +4 4 +3 3 +3 3 +4 4 +4 4 +./arith.tests: line 257: syntax error: 7-- +./arith.tests: line 259: syntax error: --x=7 +./arith.tests: line 260: syntax error: ++x=7 +./arith.tests: line 262: syntax error: x++=7 +./arith.tests: line 263: syntax error: x--=7 +4 4 +7 7 +-7 -7 +./arith1.sub: line 2: syntax error: 4-- +./arith1.sub: line 3: syntax error: 4++ +./arith1.sub: line 4: syntax error: 4 -- +./arith1.sub: line 5: syntax error: 4 ++ +6 6 +3 3 +7 7 +4 4 +0 0 +3 3 +7 7 +2 2 +-2 -2 +1 1 +./arith1.sub: line 37: syntax error: +++7 +./arith2.sub: line 2: syntax error: --7 +./arith2.sub: line 3: syntax error: ++7 +./arith2.sub: line 4: syntax error: -- 7 +./arith2.sub: line 5: syntax error: ++ 7 +5 5 +1 1 +4 4 +0 0 +./arith2.sub: line 42: syntax error: -- - 7 +./arith2.sub: line 47: syntax error: ++ + 7 +8 12 +./arith.tests: line 290: syntax error: a b +42 +42 +42 +./arith.tests: line 302: a[b[c]d]=e: not found diff --git a/release/src/router/busybox/shell/ash_test/ash-arith/arith.tests b/release/src/router/busybox/shell/ash_test/ash-arith/arith.tests new file mode 100755 index 00000000..d65758e7 --- /dev/null +++ b/release/src/router/busybox/shell/ash_test/ash-arith/arith.tests @@ -0,0 +1,302 @@ +#ash# set +o posix +#ash# declare -i iv jv + +echo "Format: 'expected actual'" + +iv=$(( 3 + 5 * 32 )) +echo 163 $iv +#ash# iv=iv+3 +#ash# echo 166 $iv +iv=2 +jv=iv + +let "jv *= 2" +echo 4 $jv +jv=$(( $jv << 2 )) +echo 16 $jv + +let jv="$jv / 2" +echo 8 $jv +#ash# jv="jv >> 2" + let jv="jv >> 2" +echo 2 $jv + +iv=$((iv+ $jv)) +echo 4 $iv +echo 2 $((iv -= jv)) +echo 2 $iv +echo 1 $(( iv == jv )) +echo 0 $(( iv != $jv )) +echo 0 $(( iv < jv )) +echo 0 $(( $iv > $jv )) +echo 1 $(( iv <= $jv )) +echo 1 $(( $iv >= jv )) + +echo 2 $jv +echo -3 $(( ~$jv )) +echo -2 $(( ~1 )) +echo 1 $(( ! 0 )) + +echo 0 $(( jv % 2 )) +echo 2 $(( $iv % 4 )) + +echo 131072 $(( iv <<= 16 )) +echo 29 $(( iv %= 33 )) + +echo 33 $(( 33 & 55 )) +echo 49 $(( 33 | 17 )) + +echo 1 $(( iv && $jv )) +echo 1 $(( $iv || jv )) + +echo 0 $(( iv && 0 )) +echo 0 $(( iv & 0 )) +echo 1 $(( iv && 1 )) +echo 1 $(( iv & 1 )) + +echo 1 $(( $jv || 0 )) +echo 2 $(( jv | 0 )) +echo 3 $(( jv | 1 )) +echo 1 $(( $jv || 1 )) + +let 'iv *= jv' +echo 58 $iv +echo 2 $jv +let "jv += $iv" +echo 60 $jv + +echo 1 $(( jv /= iv )) +echo 256 $(( jv <<= 8 )) +echo 16 $(( jv >>= 4 )) + +echo 62 $(( iv |= 4 )) +echo 4 $(( iv &= 4 )) + +echo 29 $(( iv += (jv + 9))) +echo 5 $(( (iv + 4) % 7 )) + +# unary plus, minus +echo -4 $(( +4 - 8 )) +echo 4 $(( -4 + 8 )) + +# conditional expressions +echo 1 $(( 4<5 ? 1 : 32)) +echo 32 $(( 4>5 ? 1 : 32)) +echo 32 $(( 4>(2+3) ? 1 : 32)) +echo 1 $(( 4<(2+3) ? 1 : 32)) +echo 1 $(( (2+2)<(2+3) ? 1 : 32)) +echo 32 $(( (2+2)>(2+3) ? 1 : 32)) + +# check that the unevaluated part of the ternary operator does not do +# evaluation or assignment +x=i+=2 +y=j+=2 +#ash# declare -i i=1 j=1 + i=1 + j=1 +echo 20 $((1 ? 20 : (x+=2))) +#ash# echo $i,$x # ash mishandles this +echo 30 $((0 ? (y+=2) : 30)) +#ash# echo $j,$y # ash mishandles this + +x=i+=2 +y=j+=2 +#ash# declare -i i=1 j=1 + i=1 + j=1 +echo 20 $((1 ? 20 : (x+=2))) +#ash# echo $i,$x # ash mishandles this +echo 30 $((0 ? (y+=2) : 30)) +#ash# echo $i,$y # ash mishandles this + +# check precedence of assignment vs. conditional operator +# should be an error +#ash# declare -i x=2 + x=2 +#ashnote# bash reports error but continues, ash aborts - using subshell to 'emulate' bash: +( y=$((1 ? 20 : x+=2)) ) + +# check precedence of assignment vs. conditional operator +#ash# declare -i x=2 + x=2 +# ash says "line NNN: syntax error: 0 ? x+=2 : 20" +#ash# echo 20 $((0 ? x+=2 : 20)) + +# associativity of assignment-operator operator +#ash# declare -i i=1 j=2 k=3 +i=1 +j=2 +k=3 +echo 6 $((i += j += k)) +echo 6,5,3 $i,$j,$k + +# octal, hex +echo 263 $(( 0x100 | 007 )) +echo 255 $(( 0xff )) +#ash# echo 255 $(( 16#ff )) +#ash# echo 127 $(( 16#FF/2 )) +#ash# echo 36 $(( 8#44 )) + +echo 40 $(( 8 ^ 32 )) + +#ash# # other bases +#ash# echo 10 $(( 16#a )) +#ash# echo 10 $(( 32#a )) +#ash# echo 10 $(( 56#a )) +#ash# echo 10 $(( 64#a )) +#ash# +#ash# echo 10 $(( 16#A )) +#ash# echo 10 $(( 32#A )) +#ash# echo 36 $(( 56#A )) +#ash# echo 36 $(( 64#A )) +#ash# +#ash# echo 62 $(( 64#@ )) +#ash# echo 63 $(( 64#_ )) + +#ash# # weird bases (error) +#ash# echo $(( 3425#56 )) + +#ash# # missing number after base +#ash# echo 0 $(( 2# )) + +# these should generate errors +( echo $(( 7 = 43 )) ) +#ash# echo $(( 2#44 )) +( echo $(( 44 / 0 )) ) +( let 'jv += $iv' ) +( echo $(( jv += \$iv )) ) +( let 'rv = 7 + (43 * 6' ) + +#ash# # more errors +#ash# declare -i i +#ash# i=0#4 +#ash# i=2#110#11 + +((echo abc; echo def;); echo ghi) + +#ash# if (((4+4) + (4 + 7))); then +#ash# echo ok +#ash# fi + +#ash# (()) # make sure the null expression works OK + +#ash# a=(0 2 4 6) +#ash# echo 6 $(( a[1] + a[2] )) +#ash# echo 1 $(( (a[1] + a[2]) == a[3] )) +#ash# (( (a[1] + a[2]) == a[3] )) ; echo 0 $? + +# test pushing and popping the expression stack +unset A +A="4 + " +( echo A $(( ( 4 + A ) + 4 )) ) +A="3 + 5" +echo 16 $(( ( 4 + A ) + 4 )) + +# badly-formed conditional expressions +( echo $(( 4 ? : $A )) ) +( echo $(( 1 ? 20 )) ) +( echo $(( 4 ? 20 : )) ) + +# precedence and short-circuit evaluation +B=9 +echo 9 $B + +# error +( echo $(( 0 && B=42 )); echo 9 $B ) + +# error +( echo $(( 1 || B=88 )); echo 9 $B ) + +# ash mistakenly evaluates B=... below +#ash# echo 0 $(( 0 && (B=42) )) +echo 9 $B +#ash# echo 0 $(( (${$} - $$) && (B=42) )) +echo 9 $B +#ash# echo 1 $(( 1 || (B=88) )) +echo 9 $B + + +# until command with (( )) command +x=7 + +echo 7 $x +#ash# until (( x == 4 )) + until test "$x" = 4 +do + echo $x + x=4 +done + +echo 4 $x + +# exponentiation +echo 32767 $(( 2**15 - 1)) +echo 32768 $(( 2**(16-1))) +echo 131072 $(( 2**16*2 )) +echo 2147483647 $(( 2**31-1)) +echo 1 $(( 2**0 )) + +# {pre,post}-{inc,dec}rement and associated errors + +x=4 + +echo 4 $x +echo 4 $(( x++ )) +echo 5 $x +echo 5 $(( x-- )) +echo 4 $x + +echo 3 $(( --x )) +echo 3 $x + +echo 4 $(( ++x )) +echo 4 $x + +# bash 3.2 apparently thinks that ++7 is 7 +#ash# echo 7 $(( ++7 )) +( echo $(( 7-- )) ) + +( echo $(( --x=7 )) ) +( echo $(( ++x=7 )) ) + +( echo $(( x++=7 )) ) +( echo $(( x--=7 )) ) + +echo 4 $x + +echo 7 $(( +7 )) +echo -7 $(( -7 )) + +# bash 3.2 apparently thinks that ++7 is 7 +#ash# echo $(( ++7 )) +#ash# echo $(( --7 )) + +${THIS_SH} ./arith1.sub +${THIS_SH} ./arith2.sub + +x=4 +y=7 + +#ash# (( x=8 , y=12 )) + x=8 + y=12 +echo $x $y + +#ash# # should be an error +#ash# (( x=9 y=41 )) + +# These are errors +unset b +( echo $((a b)) ) +#ash# ((a b)) + +n=42 +printf "%d\n" $n +printf "%i\n" $n +#ash# echo $(( 8#$(printf "%o\n" $n) )) +printf "%u\n" $n +#ash# echo $(( 16#$(printf "%x\n" $n) )) +#ash# echo $(( 16#$(printf "%X\n" $n) )) + +# causes longjmp botches through bash-2.05b +a[b[c]d]=e diff --git a/release/src/router/busybox/shell/ash_test/ash-arith/arith1.sub b/release/src/router/busybox/shell/ash_test/ash-arith/arith1.sub new file mode 100755 index 00000000..80aa9992 --- /dev/null +++ b/release/src/router/busybox/shell/ash_test/ash-arith/arith1.sub @@ -0,0 +1,40 @@ +# test of redone post-increment and post-decrement code +( echo $(( 4-- )) ) +( echo $(( 4++ )) ) +( echo $(( 4 -- )) ) +( echo $(( 4 ++ )) ) + +#ash# (( array[0]++ )) +#ash# echo ${array} + +#ash# (( array[0] ++ )) +#ash# echo ${array} + +#ash# (( a++ )) +#ash# echo $a +#ash# (( a ++ )) +#ash# echo $a + a=2 + +echo 6 $(( a ++ + 4 )) +echo 3 $a + +echo 7 $(( a+++4 )) +echo 4 $a + +echo 0 $(( a---4 )) +echo 3 $a + +echo 7 $(( a -- + 4 )) +echo 2 $a + +echo -2 $(( a -- - 4 )) +echo 1 $a + +#ash# (( ++ + 7 )) + +#ash# (( ++ )) +( echo $(( +++7 )) ) +# bash 3.2 apparently thinks that ++ +7 is 7 +#ash# echo $(( ++ + 7 )) +#ash# (( -- )) diff --git a/release/src/router/busybox/shell/ash_test/ash-arith/arith2.sub b/release/src/router/busybox/shell/ash_test/ash-arith/arith2.sub new file mode 100755 index 00000000..f7e3c923 --- /dev/null +++ b/release/src/router/busybox/shell/ash_test/ash-arith/arith2.sub @@ -0,0 +1,57 @@ +# bash 3.2 apparently thinks that ++7 is 7 etc +( echo $(( --7 )) ) +( echo $(( ++7 )) ) +( echo $(( -- 7 )) ) +( echo $(( ++ 7 )) ) + +#ash# ((++array[0] )) +#ash# echo 1 $array +#ash# (( ++ array[0] )) +#ash# echo 2 $array + +#ash# (( ++a )) +#ash# echo 1 $a +#ash# (( ++ a )) +#ash# echo 2 $a + +#ash# (( --a )) +#ash# echo 1 $a +#ash# (( -- a )) +#ash# echo 0 $a + a=0 + +echo 5 $(( 4 + ++a )) +echo 1 $a + +# ash doesn't handle it right... +#ash# echo 6 $(( 4+++a )) +#ash# echo 2 $a + a=2 + +# ash doesn't handle it right... +#ash# echo 3 $(( 4---a )) +#ash# echo 1 $a + a=1 + +echo 4 $(( 4 - -- a )) +echo 0 $a + +#ash# (( -- )) +# bash 3.2 apparently thinks that ---7 is -7 +#ash# echo $(( ---7 )) +( echo $(( -- - 7 )) ) + +#ash# (( ++ )) +# bash 3.2: 7 +#ash# echo 7 $(( ++7 )) +( echo $(( ++ + 7 )) ) + +# bash 3.2: -7 +#ash# echo -7 $(( ++-7 )) +# bash 3.2: -7 +#ash# echo -7 $(( ++ - 7 )) + +# bash 3.2: 7 +#ash# echo 7 $(( +--7 )) +# bash 3.2: 7 +#ash# echo 7 $(( -- + 7 )) -- cgit v1.2.3-54-g00ecf