summaryrefslogtreecommitdiff
path: root/dotfiles/system/.zsh/modules/Test/C01arith.ztst
diff options
context:
space:
mode:
Diffstat (limited to 'dotfiles/system/.zsh/modules/Test/C01arith.ztst')
-rw-r--r--dotfiles/system/.zsh/modules/Test/C01arith.ztst422
1 files changed, 0 insertions, 422 deletions
diff --git a/dotfiles/system/.zsh/modules/Test/C01arith.ztst b/dotfiles/system/.zsh/modules/Test/C01arith.ztst
deleted file mode 100644
index 61da763..0000000
--- a/dotfiles/system/.zsh/modules/Test/C01arith.ztst
+++ /dev/null
@@ -1,422 +0,0 @@
-# Tests corresponding to the texinfo node `Arithmetic Evaluation'
-
-%test
-
- integer light there
- (( light = 42 )) &&
- let 'there = light' &&
- print $(( there ))
-0:basic integer arithmetic
->42
-
- float light there
- integer rnd
- (( light = 3.1415 )) &&
- let 'there = light' &&
- print -- $(( rnd = there * 10000 ))
-# save rounding problems by converting to integer
-0:basic floating point arithmetic
->31415
-
- integer rnd
- (( rnd = ((29.1 % 13.0 * 10) + 0.5) ))
- print $rnd
-0:Test floating point modulo function
->31
-
- print $(( 0x10 + 0X01 + 2#1010 ))
-0:base input
->27
-
- float light
- (( light = 4 ))
- print $light
- typeset -F light
- print $light
-0:conversion to float
->4.000000000e+00
->4.0000000000
-
- integer i
- (( i = 32.5 ))
- print $i
-0:conversion to int
->32
-
- integer i
- (( i = 4 - - 3 * 7 << 1 & 7 ^ 1 | 16 ** 2 ))
- print $i
-0:precedence (arithmetic)
->1591
-
- fn() {
- setopt localoptions c_precedences
- integer i
- (( i = 4 - - 3 * 7 << 1 & 7 ^ 1 | 16 ** 2 ))
- print $i
- }
- fn
-0:precedence (arithmetic, with C_PRECEDENCES)
->259
-
- print $(( 1 < 2 || 2 < 2 && 3 > 4 ))
-0:precedence (logical)
->1
-
- print $(( 1 + 4 ? 3 + 2 ? 4 + 3 ? 5 + 6 ? 4 * 8 : 0 : 0 : 0 : 0 ))
-0:precedence (ternary)
->32
-
- print $(( 3 ? 2 ))
-1:parsing ternary (1)
-?(eval):1: bad math expression: ':' expected
-
- print $(( 3 ? 2 : 1 : 4 ))
-1:parsing ternary (2)
-?(eval):1: bad math expression: ':' without '?'
-
- print $(( 0, 4 ? 3 : 1, 5 ))
-0:comma operator
->5
-
- foo=000
- print $(( ##A + ##\C-a + #foo + $#foo ))
-0:#, ## and $#
->117
-
- print $((##))
-1:## without following character
-?(eval):1: bad math expression: character missing after ##
-
- print $((## ))
-0:## followed by a space
->32
-
- integer i
- (( i = 3 + 5 * 1.75 ))
- print $i
-0:promotion to float
->11
-
- typeset x &&
- (( x = 3.5 )) &&
- print $x &&
- (( x = 4 )) &&
- print $x
-0:use of scalars to store integers and floats
->3.5
->4
-
- (( newarray[unsetvar] = 1 ))
-2:error using unset variable as index
-?(eval):1: newarray: assignment to invalid subscript range
-
- integer setvar=1
- (( newarray[setvar]++ ))
- (( newarray[setvar]++ ))
- print ${(t)newarray} ${#newarray} ${newarray[1]}
-0:setting array elements in math context
->array 1 2
-
- xarr=()
- (( xarr = 3 ))
- print ${(t)xarr} $xarr
-0:converting type from array
->integer 3
-
- print $(( 13 = 42 ))
-1:bad lvalue
-?(eval):1: bad math expression: lvalue required
-
- x=/bar
- (( x = 32 ))
- print $x
-0:assigning to scalar which contains non-math string
->32
-
- print $(( ))
-0:empty math parse e.g. $(( )) acts like a zero
->0
-
- print $(( a = ))
-1:empty assignment
-?(eval):1: bad math expression: operand expected at end of string
-
- print $(( 3, ))
-1:empty right hand of comma
-?(eval):1: bad math expression: operand expected at end of string
-
- print $(( 3,,4 ))
-1:empty middle of comma
-?(eval):1: bad math expression: operand expected at `,4 '
-
- print $(( (3 + 7, 4), 5 ))
-0:commas and parentheses, part 1
->5
-
- print $(( 5, (3 + 7, 4) ))
-0:commas and parentheses, part 1
->4
-
- print $(( 07.5 ))
- (setopt octalzeroes; print $(( 09.5 )))
-0:leading zero doesn't affect floating point
->7.5
->9.5
-
- (setopt octalzeroes; print $(( 09 )))
-1:octalzeroes rejects invalid constants
-?(eval):1: bad math expression: operator expected at `9 '
-
- (setopt octalzeroes; print $(( 08#77 )))
-0:octalzeroes doesn't affect bases
->63
-
- print $(( 36#z ))
-0:bases up to 36 work
->35
-
- print $(( 37#z ))
-1:bases beyond 36 don't work
-?(eval):1: invalid base (must be 2 to 36 inclusive): 37
-
- print $(( 3 + "fail" ))
-1:parse failure in arithmetic
-?(eval):1: bad math expression: operand expected at `"fail" '
-
- alias 3=echo
- print $(( 3 + "OK"); echo "Worked")
-0:not a parse failure because not arithmetic
->+ OK Worked
-
- fn() {
- emulate -L zsh
- print $(( [#16] 255 ))
- print $(( [##16] 255 ))
- setopt cbases
- print $(( [#16] 255 ))
- print $(( [##16] 255 ))
- }
- fn
-0:doubled # in base removes radix
->16#FF
->FF
->0xFF
->FF
-
- array=(1)
- x=0
- (( array[++x]++ ))
- print $x
- print $#array
- print $array
-0:no double increment for subscript
->1
->1
->2
-
- # This is a bit naughty... the value of array
- # isn't well defined since there's no sequence point
- # between the increments of x, however we just want
- # to be sure that in this case, unlike the above,
- # x does get incremented twice.
- x=0
- array=(1 2)
- (( array[++x] = array[++x] + 1 ))
- print $x
-0:double increment for repeated expression
->2
-
- # Floating point. Default precision should take care of rounding errors.
- print $(( 1_0.000_000e0_1 ))
- # Integer.
- print $(( 0x_ff_ff_ ))
- # _ are parts of variable names that don't start with a digit
- __myvar__=42
- print $(( __myvar__ + $__myvar__ ))
- # _ is not part of variable name that does start with a digit
- # (which are substituted before math eval)
- set -- 6
- print $(( $1_000_000 ))
- # Underscores in expressions with no whitespace
- print $(( 3_000_+4_000_/2 ))
- # Underscores may appear in the base descriptor, for what it's worth...
- print $(( 1_6_#f_f_ ))
-0:underscores in math constants
->100.
->65535
->84
->6000000
->5000
->255
-
- # Force floating point.
- for expr in "3/4" "0x100/0x200" "0x30/0x10"; do
- print $(( $expr ))
- setopt force_float
- print $(( $expr ))
- unsetopt force_float
- done
-0:Forcing floating point constant evaluation, or not.
->0
->0.75
->0
->0.5
->3
->3.
-
- print $(( 0x30 + 0.5 ))
- print $(( 077 + 0.5 ))
- (setopt octalzeroes; print $(( 077 + 0.5 )) )
-0:Mixed float and non-decimal integer constants
->48.5
->77.5
->63.5
-
- underscore_integer() {
- setopt cbases localoptions
- print $(( [#_] 1000000 ))
- print $(( [#16_] 65536 ))
- print $(( [#16_4] 65536 * 32768 ))
- }
- underscore_integer
-0:Grouping output with underscores: integers
->1_000_000
->0x10_000
->0x8000_0000
-
- print $(( [#_] (5. ** 10) / 16. ))
-0:Grouping output with underscores: floating point
->610_351.562_5
-
- env SHLVL=1+RANDOM $ZTST_testdir/../Src/zsh -f -c 'print $SHLVL'
-0:Imported integer functions are not evaluated
->2
-
- print $(( 0b0 + 0b1 + 0b11 + 0b110 ))
-0:Binary input
->10
-
- print $(( 0b2 ))
-1:Binary numbers don't tend to have 2's in
-?(eval):1: bad math expression: operator expected at `2 '
-# ` for emacs shell mode
-
- integer varassi
- print $(( varassi = 5.5 / 2.0 ))
- print $varassi
-0:Integer variable assignment converts result to integer
->2
->2
-# It's hard to test for integer to float.
-
- integer ff1=3 ff2=4
- print $(( ff1/ff2 ))
- setopt force_float
- print $(( ff1/ff2 ))
- unsetopt force_float
-0:Variables are forced to floating point where necessary
-# 0.75 is exactly representable, don't expect rounding error.
->0
->0.75
-
- # The following tests for a bug that only happens when
- # backing up over input read a line at a time, so we'll
- # read the input from stdin.
- $ZTST_testdir/../Src/zsh -f <<<'
- print $((echo first command
- ); echo second command)
- print third command
- '
-0:Backing up a line of input when finding out it's not arithmetic
->first command second command
->third command
-
- $ZTST_testdir/../Src/zsh -f <<<'
- print $((3 +
- 4))
- print next line
- '
-0:Not needing to back up a line when reading multiline arithmetic
->7
->next line
-
- $ZTST_testdir/../Src/zsh -f <<<'
- print $((case foo in
- bar)
- echo not this no, no
- ;;
- foo)
- echo yes, this one
- ;;
- esac)
- print after case in subshell)
- '
-0:Non-arithmetic subst with command subsitution parse from hell
->yes, this one after case in subshell
-
- print "a$((echo one subst)
- (echo two subst))b"
-0:Another tricky case that is actually a command substitution
->aone subst
->two substb
-
- print "x$((echo one frob); (echo two frob))y"
-0:Same on a single line
->xone frob
->two froby
-
- # This case actually only works by accident: if it wasn't for the
- # unbalanced parenthesis this would be a valid math substitution.
- # Hence it's definitely not recommended code. However, it does give
- # the algorithm an extra check.
- print $((case foo in
- foo)
- print Worked OK
- ;;
- esac))
-0:Would-be math expansion with extra parenthesis making it a cmd subst
->Worked OK
-
- (setopt extendedglob
- set -- 32.463
- print ${$(( $1 * 100 ))%%.[0-9]#})
-0:Arithmetic substitution nested in parameter substitution
->3246
-
- print $((`:`))
-0:Null string in arithmetic evaluation after command substitution
->0
-
- print $(( 1 + $(( 2 + 3 )) ))
- print $(($((3+4))))
- print $((1*$((2*$((3))*4))*5))
-0:Nested math substitutions. Yes, I know, very useful.
->6
->7
->120
-
- foo="(1)"
- print $((foo))
- print $(($foo))
- print $(((2)))
- foo="3)"
- (print $((foo))) 2>&1
- (print $(($foo))) 2>&1
-1: Good and bad trailing parentheses
->1
->1
->2
->(eval):6: bad math expression: unexpected ')'
->(eval):7: bad math expression: unexpected ')'
-
- unset number
- (( number = 3 ))
- print ${(t)number}
- unset number
- (setopt posix_identifiers
- (( number = 3 ))
- print ${(t)number})
-0:type of variable when created in arithmetic context
->integer
->scalar