#   This program 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.
#
#   This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
#
# expansion test cases from Posix interp 888

set "abc" "def ghi" "jkl"
unset novar
IFS=' ' # a space
printf '%s\n' $*
printf '%s\n' "$*"
printf '%s\n' xx$*yy
printf '%s\n' "xx$*yy"
printf '%s\n' $@
printf '%s\n' "$@"
printf '%s\n' ${1+"$@"}
printf '%s\n' ${novar-"$@"}
printf '%s\n' xx$@yy
printf '%s\n' "xx$@yy"
printf '%s\n' $@$@
printf '%s\n' "$@$@"
IFS=':'
printf '%s\n' "$*"
var=$*; printf '%s\n' "$var"
var="$*"; printf '%s\n' "$var"
unset var
printf '%s\n' ${var-$*}
printf '%s\n' "${var-$*}"
printf '%s\n' ${var-"$*"}
printf '%s\n' ${var=$*}
printf 'var=%s\n' "$var"
unset var
printf '%s\n' "${var=$*}"
printf 'var=%s\n' "$var"

IFS='' # null
printf '%s\n' "$*"
var=$*; printf '%s\n' "$var"
var="$*"; printf '%s\n' "$var"
unset var
printf '%s\n' ${var-$*}
printf '%s\n' "${var-$*}"
printf '%s\n' ${var-"$*"}
printf '%s\n' ${var=$*}
printf 'var=%s\n' "$var"
unset var
printf '%s\n' "${var=$*}"
printf 'var=%s\n' "$var"
printf '%s\n' "$@"

unset IFS
printf '%s\n' "$*"
var=$*; printf '%s\n' "$var"
var="$*"; printf '%s\n' "$var"
unset var
printf '%s\n' ${var-$*}
printf '%s\n' "${var-$*}"
printf '%s\n' ${var-"$*"}
printf '%s\n' ${var=$*}
printf 'var=%s\n' "$var"
unset var
printf '%s\n' "${var=$*}"
printf 'var=%s\n' "$var"
printf '%s\n' "$@"

set --
printf '[%s]\n' foo "$*"
printf '[%s]\n' foo "$novar$*$(echo)"
printf '[%s]\n' foo $@
printf '[%s]\n' foo "$@"
printf '[%s]\n' foo ''$@
printf '[%s]\n' foo ''"$@"
printf '[%s]\n' foo ''"$novar$@$(echo)"
