summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorStefan Eßer <se@FreeBSD.org>2020-06-27 15:03:19 +0000
committerStefan Eßer <se@FreeBSD.org>2020-06-27 15:03:19 +0000
commit1f958cfad78842ab9a1193471589231e25596cb3 (patch)
tree4bbff8044605fcfff11c9d322bb6f53495e4faa7 /tests
Diffstat (limited to 'tests')
-rwxr-xr-xtests/afl.py176
-rwxr-xr-xtests/all.sh301
-rw-r--r--tests/all.txt2
-rw-r--r--tests/bc/abs.txt7
-rw-r--r--tests/bc/abs_results.txt7
-rw-r--r--tests/bc/add.txt146
-rw-r--r--tests/bc/add_results.txt158
-rw-r--r--tests/bc/all.txt44
-rw-r--r--tests/bc/arctangent.txt27
-rw-r--r--tests/bc/arctangent_results.txt26
-rw-r--r--tests/bc/arrays.txt10
-rw-r--r--tests/bc/arrays_results.txt3
-rw-r--r--tests/bc/assignments.txt122
-rw-r--r--tests/bc/assignments_results.txt61
-rw-r--r--tests/bc/boolean.txt184
-rw-r--r--tests/bc/boolean_results.txt184
-rw-r--r--tests/bc/comp.txt132
-rw-r--r--tests/bc/comp_results.txt131
-rw-r--r--tests/bc/cosine.txt44
-rw-r--r--tests/bc/cosine_results.txt41
-rw-r--r--tests/bc/decimal.txt61
-rw-r--r--tests/bc/decimal_results.txt75
-rw-r--r--tests/bc/divide.txt62
-rw-r--r--tests/bc/divide_results.txt61
-rw-r--r--tests/bc/engineering.txt19
-rw-r--r--tests/bc/engineering_results.txt18
-rw-r--r--tests/bc/errors.txt258
-rw-r--r--tests/bc/errors/01.txt368
-rw-r--r--tests/bc/errors/02.txt16
-rw-r--r--tests/bc/errors/03.txt2
-rw-r--r--tests/bc/errors/04.txt1
-rw-r--r--tests/bc/errors/05.txt1
-rw-r--r--tests/bc/errors/06.txt1
-rw-r--r--tests/bc/errors/07.txt36
-rw-r--r--tests/bc/errors/08.txt3
-rw-r--r--tests/bc/errors/09.txt18
-rw-r--r--tests/bc/errors/10.txt13
-rw-r--r--tests/bc/errors/11.txt408
-rw-r--r--tests/bc/errors/12.txt3
-rw-r--r--tests/bc/errors/13.txt57
-rw-r--r--tests/bc/errors/14.txt1
-rw-r--r--tests/bc/errors/15.txt3
-rw-r--r--tests/bc/errors/16.txt1
-rw-r--r--tests/bc/errors/17.txt313
-rw-r--r--tests/bc/errors/18.txt7
-rw-r--r--tests/bc/errors/19.txt16
-rw-r--r--tests/bc/errors/20.txt68
-rw-r--r--tests/bc/errors/21.txtbin0 -> 4892 bytes
-rw-r--r--tests/bc/errors/22.txt5
-rw-r--r--tests/bc/exponent.txt22
-rw-r--r--tests/bc/exponent_results.txt25
-rw-r--r--tests/bc/functions.txt13
-rw-r--r--tests/bc/functions_results.txt5
-rw-r--r--tests/bc/globals.txt21
-rw-r--r--tests/bc/globals_results.txt6
-rw-r--r--tests/bc/length.txt129
-rw-r--r--tests/bc/length_results.txt127
-rw-r--r--tests/bc/letters.txt53
-rw-r--r--tests/bc/letters_results.txt51
-rw-r--r--tests/bc/lib2.txt463
-rw-r--r--tests/bc/lib2_results.txt698
-rw-r--r--tests/bc/log.txt22
-rw-r--r--tests/bc/log_results.txt22
-rw-r--r--tests/bc/misc.txt13
-rw-r--r--tests/bc/misc1.txt76
-rw-r--r--tests/bc/misc1_results.txt57
-rw-r--r--tests/bc/misc2.txt109
-rw-r--r--tests/bc/misc2_results.txt63
-rw-r--r--tests/bc/misc3.txt12
-rw-r--r--tests/bc/misc3_results.txt30
-rw-r--r--tests/bc/misc4.txt2
-rw-r--r--tests/bc/misc4_results.txt1
-rw-r--r--tests/bc/misc5.txt20
-rw-r--r--tests/bc/misc5_results.txt4
-rw-r--r--tests/bc/misc_results.txt4
-rw-r--r--tests/bc/modulus.txt70
-rw-r--r--tests/bc/modulus_results.txt69
-rw-r--r--tests/bc/multiply.txt64
-rw-r--r--tests/bc/multiply_results.txt78
-rw-r--r--tests/bc/pi.txt4
-rw-r--r--tests/bc/pi_results.txt135
-rw-r--r--tests/bc/places.txt20
-rw-r--r--tests/bc/places_results.txt18
-rw-r--r--tests/bc/posix_errors.txt31
-rw-r--r--tests/bc/power.txt43
-rw-r--r--tests/bc/power_results.txt72
-rw-r--r--tests/bc/print2.txt194
-rw-r--r--tests/bc/print2_results.txt79
-rw-r--r--tests/bc/rand.txt323
-rw-r--r--tests/bc/rand_results.txt616
-rw-r--r--tests/bc/read.txt1
-rw-r--r--tests/bc/read_errors.txt2
-rw-r--r--tests/bc/read_results.txt1
-rw-r--r--tests/bc/scale.txt57
-rw-r--r--tests/bc/scale_results.txt57
-rw-r--r--tests/bc/scientific.txt51
-rw-r--r--tests/bc/scientific_results.txt50
-rw-r--r--tests/bc/scripts/add.bc17
-rwxr-xr-xtests/bc/scripts/array.bc60
-rw-r--r--tests/bc/scripts/array.txt428
-rwxr-xr-xtests/bc/scripts/atan.bc11
-rw-r--r--tests/bc/scripts/atan.txt301
-rwxr-xr-xtests/bc/scripts/bessel.bc43
-rw-r--r--tests/bc/scripts/divide.bc22
-rw-r--r--tests/bc/scripts/functions.bc7
-rw-r--r--tests/bc/scripts/functions.txt2
-rwxr-xr-xtests/bc/scripts/globals.bc23
-rw-r--r--tests/bc/scripts/globals.txt6
-rw-r--r--tests/bc/scripts/len.bc48
-rw-r--r--tests/bc/scripts/len.txt3
-rw-r--r--tests/bc/scripts/multiply.bc19
-rwxr-xr-xtests/bc/scripts/parse.bc20
-rwxr-xr-xtests/bc/scripts/print.bc25
-rw-r--r--tests/bc/scripts/rand.bc97
-rw-r--r--tests/bc/scripts/rand.txt119
-rwxr-xr-xtests/bc/scripts/references.bc408
-rw-r--r--tests/bc/scripts/references.txt1272
-rwxr-xr-xtests/bc/scripts/screen.bc20
-rw-r--r--tests/bc/scripts/screen.txt1
-rw-r--r--tests/bc/scripts/subtract.bc17
-rw-r--r--tests/bc/shift.txt5341
-rw-r--r--tests/bc/shift_results.txt5325
-rw-r--r--tests/bc/sine.txt207
-rw-r--r--tests/bc/sine_results.txt204
-rw-r--r--tests/bc/sqrt.txt18
-rw-r--r--tests/bc/sqrt_results.txt16
-rw-r--r--tests/bc/stdin.txt15
-rw-r--r--tests/bc/stdin_results.txt6
-rw-r--r--tests/bc/strings.txt16
-rw-r--r--tests/bc/strings_results.txt8
-rw-r--r--tests/bc/subtract.txt153
-rw-r--r--tests/bc/subtract_results.txt157
-rwxr-xr-xtests/bc/timeconst.sh93
-rw-r--r--tests/bc/trunc.txt15
-rw-r--r--tests/bc/trunc_results.txt13
-rw-r--r--tests/bc/vars.txt7
-rw-r--r--tests/bc/vars_results.txt12
-rw-r--r--tests/bc/void.txt20
-rw-r--r--tests/bc/void_results.txt9
-rw-r--r--tests/dc/abs.txt7
-rw-r--r--tests/dc/abs_results.txt7
-rw-r--r--tests/dc/add.txt33
-rw-r--r--tests/dc/add_results.txt45
-rw-r--r--tests/dc/all.txt22
-rw-r--r--tests/dc/boolean.txt80
-rw-r--r--tests/dc/boolean_results.txt80
-rw-r--r--tests/dc/decimal.txt36
-rw-r--r--tests/dc/decimal_results.txt51
-rw-r--r--tests/dc/divide.txt33
-rw-r--r--tests/dc/divide_results.txt32
-rw-r--r--tests/dc/divmod.txt64
-rw-r--r--tests/dc/divmod_results.txt126
-rw-r--r--tests/dc/engineering.txt19
-rw-r--r--tests/dc/engineering_results.txt18
-rw-r--r--tests/dc/errors.txt32
-rw-r--r--tests/dc/errors/01.txt2
-rw-r--r--tests/dc/errors/02.txt10
-rw-r--r--tests/dc/errors/03.txt2
-rw-r--r--tests/dc/errors/04.txt10
-rw-r--r--tests/dc/errors/05.txt3
-rw-r--r--tests/dc/errors/06.txt4
-rw-r--r--tests/dc/errors/07.txt4
-rw-r--r--tests/dc/errors/08.txt2
-rw-r--r--tests/dc/errors/09.txt22
-rw-r--r--tests/dc/errors/10.txt19
-rw-r--r--tests/dc/errors/11.txt4
-rw-r--r--tests/dc/errors/12.txt5
-rw-r--r--tests/dc/errors/13.txt17
-rw-r--r--tests/dc/errors/14.txt7
-rw-r--r--tests/dc/errors/15.txt11
-rw-r--r--tests/dc/errors/16.txt7
-rw-r--r--tests/dc/errors/17.txt21
-rw-r--r--tests/dc/errors/18.txt3
-rw-r--r--tests/dc/errors/19.txtbin0 -> 5536 bytes
-rw-r--r--tests/dc/errors/20.txt9
-rw-r--r--tests/dc/errors/21.txt7
-rw-r--r--tests/dc/errors/22.txt37
-rw-r--r--tests/dc/errors/23.txtbin0 -> 125 bytes
-rw-r--r--tests/dc/errors/24.txt1
-rw-r--r--tests/dc/misc.txt2
-rw-r--r--tests/dc/misc_results.txt21
-rw-r--r--tests/dc/modexp.txt103
-rw-r--r--tests/dc/modexp_results.txt103
-rw-r--r--tests/dc/modulus.txt70
-rw-r--r--tests/dc/modulus_results.txt68
-rw-r--r--tests/dc/multiply.txt43
-rw-r--r--tests/dc/multiply_results.txt43
-rw-r--r--tests/dc/negate.txt3
-rw-r--r--tests/dc/negate_results.txt3
-rw-r--r--tests/dc/places.txt16
-rw-r--r--tests/dc/places_results.txt16
-rw-r--r--tests/dc/power.txt44
-rw-r--r--tests/dc/power_results.txt72
-rw-r--r--tests/dc/rand.txt1
-rw-r--r--tests/dc/rand_results.txt3
-rw-r--r--tests/dc/read.txt1
-rw-r--r--tests/dc/read_errors.txt2
-rw-r--r--tests/dc/read_results.txt1
-rw-r--r--tests/dc/scientific.txt51
-rw-r--r--tests/dc/scientific_results.txt50
-rwxr-xr-xtests/dc/scripts/array.dc3
-rw-r--r--tests/dc/scripts/array.txt201
-rwxr-xr-xtests/dc/scripts/asciify.dc7
-rw-r--r--tests/dc/scripts/asciify.txtbin0 -> 131076 bytes
-rwxr-xr-xtests/dc/scripts/else.dc4
-rw-r--r--tests/dc/scripts/else.txt34
-rwxr-xr-xtests/dc/scripts/factorial.dc4
-rw-r--r--tests/dc/scripts/factorial.txt50
-rwxr-xr-xtests/dc/scripts/loop.dc3
-rw-r--r--tests/dc/scripts/loop.txt20
-rwxr-xr-xtests/dc/scripts/prime.dc1
-rwxr-xr-xtests/dc/scripts/quit.dc2
-rw-r--r--tests/dc/scripts/quit.txt99
-rwxr-xr-xtests/dc/scripts/stream.dc1
-rwxr-xr-xtests/dc/scripts/weird.dc2
-rw-r--r--tests/dc/scripts/weird.txt18
-rw-r--r--tests/dc/shift.txt42
-rw-r--r--tests/dc/shift_results.txt42
-rw-r--r--tests/dc/sqrt.txt14
-rw-r--r--tests/dc/sqrt_results.txt13
-rw-r--r--tests/dc/stdin.txt3
-rw-r--r--tests/dc/stdin_results.txt21
-rw-r--r--tests/dc/strings.txt50
-rw-r--r--tests/dc/strings_results.txt51
-rw-r--r--tests/dc/subtract.txt33
-rw-r--r--tests/dc/subtract_results.txt37
-rw-r--r--tests/dc/trunc.txt11
-rw-r--r--tests/dc/trunc_results.txt11
-rw-r--r--tests/dc/vars.txt2
-rw-r--r--tests/dc/vars_results.txt6
-rwxr-xr-xtests/errors.sh132
-rwxr-xr-xtests/radamsa.sh120
-rw-r--r--tests/radamsa.txt17
-rwxr-xr-xtests/randmath.py306
-rwxr-xr-xtests/read.sh126
-rwxr-xr-xtests/script.sh155
-rwxr-xr-xtests/scripts.sh86
-rwxr-xr-xtests/stdin.sh73
-rwxr-xr-xtests/test.sh132
239 files changed, 25928 insertions, 0 deletions
diff --git a/tests/afl.py b/tests/afl.py
new file mode 100755
index 000000000000..a67e086c3dd1
--- /dev/null
+++ b/tests/afl.py
@@ -0,0 +1,176 @@
+#! /usr/bin/python3 -B
+#
+# Copyright (c) 2018-2020 Gavin D. Howard and contributors.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+#
+# * Redistributions in binary form must reproduce the above copyright notice,
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+import os
+import sys
+import shutil
+import subprocess
+
+def usage():
+ print("usage: {} [--asan] dir [results_dir [exe options...]]".format(script))
+ sys.exit(1)
+
+def check_crash(exebase, out, error, file, type, test):
+ if error < 0:
+ print("\n{} crashed ({}) on {}:\n".format(exebase, -error, type))
+ print(" {}".format(test))
+ print("\nCopying to \"{}\"".format(out))
+ shutil.copy2(file, out)
+ print("\nexiting...")
+ sys.exit(error)
+
+def run_test(cmd, exebase, tout, indata, out, file, type, test, environ=None):
+ try:
+ p = subprocess.run(cmd, timeout=tout, input=indata, stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE, env=environ)
+ check_crash(exebase, out, p.returncode, file, type, test)
+ except subprocess.TimeoutExpired:
+ print("\n {} timed out. Continuing...\n".format(exebase))
+
+def create_test(file, tout, environ=None):
+
+ print(" {}".format(file))
+
+ base = os.path.basename(file)
+
+ if base == "README.txt":
+ return
+
+ with open(file, "rb") as f:
+ lines = f.readlines()
+
+ print(" Running whole file...")
+
+ run_test(exe + [ file ], exebase, tout, halt.encode(), out, file, "file", file, environ)
+
+ print(" Running file through stdin...")
+
+ with open(file, "rb") as f:
+ content = f.read()
+
+ run_test(exe, exebase, tout, content, out, file,
+ "running {} through stdin".format(file), file, environ)
+
+
+def get_children(dir, get_files):
+ dirs = []
+ with os.scandir(dir) as it:
+ for entry in it:
+ if not entry.name.startswith('.') and \
+ ((entry.is_dir() and not get_files) or \
+ (entry.is_file() and get_files)):
+ dirs.append(entry.name)
+ dirs.sort()
+ return dirs
+
+script = sys.argv[0]
+testdir = os.path.dirname(script)
+
+if __name__ != "__main__":
+ usage()
+
+timeout = 2.5
+
+if len(sys.argv) < 2:
+ usage()
+
+idx = 1
+
+exedir = sys.argv[idx]
+
+asan = (exedir == "--asan")
+
+if asan:
+ idx += 1
+ if len(sys.argv) < idx + 1:
+ usage()
+ exedir = sys.argv[idx]
+
+if len(sys.argv) >= idx + 2:
+ resultsdir = sys.argv[idx + 1]
+else:
+ if exedir == "bc":
+ resultsdir = testdir + "/../../results"
+ else:
+ resultsdir = testdir + "/../../results_dc"
+
+if len(sys.argv) >= idx + 3:
+ exe = sys.argv[idx + 2]
+else:
+ exe = testdir + "/../bin/" + exedir
+
+exebase = os.path.basename(exe)
+
+if exebase == "bc":
+ halt = "halt\n"
+ options = "-lq"
+else:
+ halt = "q\n"
+ options = "-x"
+
+if len(sys.argv) >= idx + 4:
+ exe = [ exe, sys.argv[idx + 3:], options ]
+else:
+ exe = [ exe, options ]
+for i in range(4, len(sys.argv)):
+ exe.append(sys.argv[i])
+
+out = testdir + "/../.test.txt"
+
+print(os.path.realpath(os.getcwd()))
+
+dirs = get_children(resultsdir, False)
+
+if asan:
+ env = os.environ.copy()
+ env['ASAN_OPTIONS'] = 'abort_on_error=1:allocator_may_return_null=1'
+
+for d in dirs:
+
+ d = resultsdir + "/" + d
+
+ print(d)
+
+ files = get_children(d + "/crashes/", True)
+
+ for file in files:
+ file = d + "/crashes/" + file
+ create_test(file, timeout)
+
+ if not asan:
+ continue
+
+ files = get_children(d + "/queue/", True)
+
+ for file in files:
+ file = d + "/queue/" + file
+ create_test(file, timeout * 2, env)
+
+print("Done")
+
diff --git a/tests/all.sh b/tests/all.sh
new file mode 100755
index 000000000000..bd39caf8dcbd
--- /dev/null
+++ b/tests/all.sh
@@ -0,0 +1,301 @@
+#! /bin/sh
+#
+# Copyright (c) 2018-2020 Gavin D. Howard and contributors.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+#
+# * Redistributions in binary form must reproduce the above copyright notice,
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+set -e
+
+script="$0"
+testdir=$(dirname "$script")
+
+. "$testdir/../functions.sh"
+
+if [ "$#" -ge 1 ]; then
+ d="$1"
+ shift
+else
+ err_exit "usage: $script dir [run_extra_tests] [run_stack_tests] [gen_tests] [time_tests] [exec args...]" 1
+fi
+
+if [ "$#" -lt 1 ]; then
+ extra=1
+else
+ extra="$1"
+ shift
+fi
+
+if [ "$#" -lt 1 ]; then
+ run_stack_tests=1
+else
+ run_stack_tests="$1"
+ shift
+fi
+
+if [ "$#" -lt 1 ]; then
+ generate_tests=1
+else
+ generate_tests="$1"
+ shift
+fi
+
+if [ "$#" -lt 1 ]; then
+ time_tests=0
+else
+ time_tests="$1"
+ shift
+fi
+
+if [ "$#" -lt 1 ]; then
+ exe="$testdir/../bin/$d"
+else
+ exe="$1"
+ shift
+fi
+
+stars="***********************************************************************"
+printf '%s\n' "$stars"
+
+if [ "$d" = "bc" ]; then
+ halt="quit"
+else
+ halt="q"
+fi
+
+unset BC_ENV_ARGS
+unset BC_LINE_LENGTH
+unset DC_ENV_ARGS
+unset DC_LINE_LENGTH
+
+printf '\nRunning %s tests...\n\n' "$d"
+
+while read t; do
+
+ if [ "$extra" -eq 0 ]; then
+ if [ "$t" = "trunc" ] || [ "$t" = "places" ] || [ "$t" = "shift" ] || \
+ [ "$t" = "lib2" ] || [ "$t" = "scientific" ] || [ "$t" = "rand" ] || \
+ [ "$t" = "engineering" ]
+ then
+ printf 'Skipping %s %s\n' "$d" "$t"
+ continue
+ fi
+ fi
+
+ sh "$testdir/test.sh" "$d" "$t" "$generate_tests" "$time_tests" "$exe" "$@"
+
+done < "$testdir/$d/all.txt"
+
+sh "$testdir/stdin.sh" "$d" "$exe" "$@"
+
+sh "$testdir/scripts.sh" "$d" "$extra" "$run_stack_tests" "$generate_tests" "$time_tests" "$exe" "$@"
+sh "$testdir/read.sh" "$d" "$exe" "$@"
+sh "$testdir/errors.sh" "$d" "$exe" "$@"
+
+num=100000000000000000000000000000000000000000000000000000000000000000000000000000
+numres="$num"
+num70="10000000000000000000000000000000000000000000000000000000000000000000\\
+0000000000"
+
+if [ "$d" = "bc" ]; then
+ halt="halt"
+ opt="x"
+ lopt="extended-register"
+ line_var="BC_LINE_LENGTH"
+else
+ halt="q"
+ opt="l"
+ lopt="mathlib"
+ line_var="DC_LINE_LENGTH"
+ num="$num pR"
+fi
+
+printf '\nRunning %s quit test...' "$d"
+
+printf '%s\n' "$halt" | "$exe" "$@" > /dev/null 2>&1
+
+if [ "$d" = bc ]; then
+ printf '%s\n' "quit" | "$exe" "$@" > /dev/null 2>&1
+fi
+
+printf 'pass\n'
+
+base=$(basename "$exe")
+
+if [ "$base" != "bc" -a "$base" != "dc" ]; then
+ exit 0
+fi
+
+printf 'Running %s environment var tests...' "$d"
+
+if [ "$d" = "bc" ]; then
+ export BC_ENV_ARGS=" '-l' '' -q"
+ export BC_EXPR_EXIT="1"
+ printf 's(.02893)\n' | "$exe" "$@" > /dev/null
+ "$exe" -e 4 "$@" > /dev/null
+else
+ export DC_ENV_ARGS="'-x'"
+ export DC_EXPR_EXIT="1"
+ printf '4s stuff\n' | "$exe" "$@" > /dev/null
+ "$exe" -e 4pR "$@" > /dev/null
+fi
+
+printf 'pass\n'
+
+out1="$testdir/../.log_$d.txt"
+out2="$testdir/../.log_${d}_test.txt"
+
+printf 'Running %s line length tests...' "$d"
+
+printf '%s\n' "$numres" > "$out1"
+
+export "$line_var"=80
+printf '%s\n' "$num" | "$exe" "$@" > "$out2"
+
+diff "$out1" "$out2"
+
+printf '%s\n' "$num70" > "$out1"
+
+export "$line_var"=2147483647
+printf '%s\n' "$num" | "$exe" "$@" > "$out2"
+
+diff "$out1" "$out2"
+
+printf 'pass\n'
+
+printf 'Running %s arg tests...' "$d"
+
+f="$testdir/$d/add.txt"
+exprs=$(cat "$f")
+results=$(cat "$testdir/$d/add_results.txt")
+
+printf '%s\n%s\n%s\n%s\n' "$results" "$results" "$results" "$results" > "$out1"
+
+"$exe" "$@" -e "$exprs" -f "$f" --expression "$exprs" --file "$f" -e "$halt" > "$out2"
+
+diff "$out1" "$out2"
+
+printf '%s\n' "$halt" | "$exe" "$@" -- "$f" "$f" "$f" "$f" > "$out2"
+
+diff "$out1" "$out2"
+
+if [ "$d" = "bc" ]; then
+ printf '%s\n' "$halt" | "$exe" "$@" -i > /dev/null 2>&1
+fi
+
+printf '%s\n' "$halt" | "$exe" "$@" -h > /dev/null
+printf '%s\n' "$halt" | "$exe" "$@" -P > /dev/null
+printf '%s\n' "$halt" | "$exe" "$@" -v > /dev/null
+printf '%s\n' "$halt" | "$exe" "$@" -V > /dev/null
+
+set +e
+
+"$exe" "$@" -f "saotehasotnehasthistohntnsahxstnhalcrgxgrlpyasxtsaosysxsatnhoy.txt" > /dev/null 2> "$out2"
+err="$?"
+
+checktest "$d" "$err" "invalid file argument" "$out2" "$d"
+
+"$exe" "$@" "-$opt" -e "$exprs" > /dev/null 2> "$out2"
+err="$?"
+
+checktest "$d" "$err" "invalid option argument" "$out2" "$d"
+
+"$exe" "$@" "--$lopt" -e "$exprs" > /dev/null 2> "$out2"
+err="$?"
+
+checktest "$d" "$err" "invalid long option argument" "$out2" "$d"
+
+"$exe" "$@" "-u" -e "$exprs" > /dev/null 2> "$out2"
+err="$?"
+
+checktest "$d" "$err" "unrecognized option argument" "$out2" "$d"
+
+"$exe" "$@" "--uniform" -e "$exprs" > /dev/null 2> "$out2"
+err="$?"
+
+checktest "$d" "$err" "unrecognized long option argument" "$out2" "$d"
+
+"$exe" "$@" -f > /dev/null 2> "$out2"
+err="$?"
+
+checktest "$d" "$err" "missing required argument to short option" "$out2" "$d"
+
+"$exe" "$@" --file > /dev/null 2> "$out2"
+err="$?"
+
+checktest "$d" "$err" "missing required argument to long option" "$out2" "$d"
+
+"$exe" "$@" --version=5 > /dev/null 2> "$out2"
+err="$?"
+
+checktest "$d" "$err" "given argument to long option with no argument" "$out2" "$d"
+
+printf 'pass\n'
+
+printf 'Running %s directory test...' "$d"
+
+"$exe" "$@" "$testdir" > /dev/null 2> "$out2"
+err="$?"
+
+checktest "$d" "$err" "directory" "$out2" "$d"
+
+printf 'pass\n'
+
+printf 'Running %s binary file test...' "$d"
+
+bin="/bin/sh"
+
+"$exe" "$@" "$bin" > /dev/null 2> "$out2"
+err="$?"
+
+checktest "$d" "$err" "binary file" "$out2" "$d"
+
+printf 'pass\n'
+
+printf 'Running %s binary stdin test...' "$d"
+
+cat "$bin" | "$exe" "$@" > /dev/null 2> "$out2"
+err="$?"
+
+checktest "$d" "$err" "binary stdin" "$out2" "$d"
+
+printf 'pass\n'
+
+if [ "$d" = "bc" ]; then
+
+ printf 'Running %s limits tests...' "$d"
+ printf 'limits\n' | "$exe" "$@" > "$out2" /dev/null 2>&1
+
+ if [ ! -s "$out2" ]; then
+ err_exit "$d did not produce output on the limits test" 1
+ fi
+
+ printf 'pass\n'
+
+fi
+
+printf '\nAll %s tests passed.\n' "$d"
+
+printf '\n%s\n' "$stars"
diff --git a/tests/all.txt b/tests/all.txt
new file mode 100644
index 000000000000..e3c025217c4b
--- /dev/null
+++ b/tests/all.txt
@@ -0,0 +1,2 @@
+bc
+dc
diff --git a/tests/bc/abs.txt b/tests/bc/abs.txt
new file mode 100644
index 000000000000..ffb7aba65c3b
--- /dev/null
+++ b/tests/bc/abs.txt
@@ -0,0 +1,7 @@
+abs(0)
+abs(1)
+abs(.289365)
+abs(289.82937658)
+abs(-19)
+abs(-.2098180)
+abs(-198289.1098376)
diff --git a/tests/bc/abs_results.txt b/tests/bc/abs_results.txt
new file mode 100644
index 000000000000..8d2658a2737e
--- /dev/null
+++ b/tests/bc/abs_results.txt
@@ -0,0 +1,7 @@
+0
+1
+.289365
+289.82937658
+19
+.2098180
+198289.1098376
diff --git a/tests/bc/add.txt b/tests/bc/add.txt
new file mode 100644
index 000000000000..647781732c63
--- /dev/null
+++ b/tests/bc/add.txt
@@ -0,0 +1,146 @@
+0 + 0
+0 + 1
+1 + 1
+1 + 0
+2 + 5
+237 + 483
+999 + 999
+2374623 + 324869356734856
+2378639084586723980562 + 23468729367839
+37298367203972395108367910823465293084561329084561390845613409516734503870691837451 + 785621394067928346918023476190834672198467134908618723249671349062187346898241093486139046139084613490817356023871869102746182749061872609129847
+1.1 + 0
+0 + 1.1
+457283.731284923576 + 37842934672834.3874629385672354
+1.0 + 0.1
+3746289134067138046 + 0.138375863945672398456712389456273486293
+-1 + -1
+-4 + -15
+-1346782 + -1287904651762468913476
+99999999999999999999999999999999999999999999999999999999999.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 + 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+99999999999999999999999999999999999999999999999999999999999.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999995 + 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005
+99999999999999999999999999999999999999999999999999999999999.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 + 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+99999999999999999999999999999999999999999999999999999999999.999999999999999999999999999999999999999999999999999999999899999999999999999999999999999999999999999999999999999999999999 + 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+99999999999999999999999999999999999989999999999999999999999.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 + 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+-1889985797 + 2012747315
+0 + -14338.391079082
+-2422297 + 1.3134942556
+182039471029834 + 282039471029834
+282039471029834 + 182039471029834
+182039471029834.2801722893 + 282039471029834
+282039471029834.2801722893 + 182039471029834
+182039471029834.2801722893 + 282039471029834.2838
+282039471029834.2801722893 + 182039471029834.2838
+182039471029834 + 282039471029834.2801722893
+282039471029834 + 182039471029834.2801722893
+182039471029834.8297282893 + 282039471029834.2801722893
+282039471029834.8297282893 + 182039471029834.2801722893
+471029834 + 282039471029834
+471029834 + 182039471029834
+471029834.2801722893 + 282039471029834
+471029834.2801722893 + 182039471029834
+471029834.2801722893 + 282039471029834.2838
+471029834.2801722893 + 182039471029834.2838
+471029834 + 282039471029834.2801722893
+471029834 + 182039471029834.2801722893
+471029834.8297282893 + 282039471029834.2801722893
+471029834.8297282893 + 182039471029834.2801722893
+182039471029834 + 471029834
+282039471029834 + 471029834
+182039471029834.2801722893 + 471029834
+282039471029834.2801722893 + 471029834
+182039471029834.2801722893 + 471029834.2838
+282039471029834.2801722893 + 471029834.2838
+182039471029834 + 471029834.2801722893
+282039471029834 + 471029834.2801722893
+182039471029834.8297282893 + 471029834.2801722893
+282039471029834.8297282893 + 471029834.2801722893
+-182039471029834 + 282039471029834
+-282039471029834 + 182039471029834
+-182039471029834.2801722893 + 282039471029834
+-282039471029834.2801722893 + 182039471029834
+-182039471029834.2801722893 + 282039471029834.2838
+-282039471029834.2801722893 + 182039471029834.2838
+-182039471029834 + 282039471029834.2801722893
+-282039471029834 + 182039471029834.2801722893
+-182039471029834.8297282893 + 282039471029834.2801722893
+-282039471029834.8297282893 + 182039471029834.2801722893
+-471029834 + 282039471029834
+-471029834 + 182039471029834
+-471029834.2801722893 + 282039471029834
+-471029834.2801722893 + 182039471029834
+-471029834.2801722893 + 282039471029834.2838
+-471029834.2801722893 + 182039471029834.2838
+-471029834 + 282039471029834.2801722893
+-471029834 + 182039471029834.2801722893
+-471029834.8297282893 + 282039471029834.2801722893
+-471029834.8297282893 + 182039471029834.2801722893
+-182039471029834 + 471029834
+-282039471029834 + 471029834
+-182039471029834.2801722893 + 471029834
+-282039471029834.2801722893 + 471029834
+-182039471029834.2801722893 + 471029834.2838
+-282039471029834.2801722893 + 471029834.2838
+-182039471029834 + 471029834.2801722893
+-282039471029834 + 471029834.2801722893
+-182039471029834.8297282893 + 471029834.2801722893
+-282039471029834.8297282893 + 471029834.2801722893
+182039471029834 + -282039471029834
+282039471029834 + -182039471029834
+182039471029834.2801722893 + -282039471029834
+282039471029834.2801722893 + -182039471029834
+182039471029834.2801722893 + -282039471029834.2838
+282039471029834.2801722893 + -182039471029834.2838
+182039471029834 + -282039471029834.2801722893
+282039471029834 + -182039471029834.2801722893
+182039471029834.8297282893 + -282039471029834.2801722893
+282039471029834.8297282893 + -182039471029834.2801722893
+471029834 + -282039471029834
+471029834 + -182039471029834
+471029834.2801722893 + -282039471029834
+471029834.2801722893 + -182039471029834
+471029834.2801722893 + -282039471029834.2838
+471029834.2801722893 + -182039471029834.2838
+471029834 + -282039471029834.2801722893
+471029834 + -182039471029834.2801722893
+471029834.8297282893 + -282039471029834.2801722893
+471029834.8297282893 + -182039471029834.2801722893
+182039471029834 + -471029834
+282039471029834 + -471029834
+182039471029834.2801722893 + -471029834
+282039471029834.2801722893 + -471029834
+182039471029834.2801722893 + -471029834.2838
+282039471029834.2801722893 + -471029834.2838
+182039471029834 + -471029834.2801722893
+282039471029834 + -471029834.2801722893
+182039471029834.8297282893 + -471029834.2801722893
+282039471029834.8297282893 + -471029834.2801722893
+-182039471029834 + -282039471029834
+-282039471029834 + -182039471029834
+-182039471029834.2801722893 + -282039471029834
+-282039471029834.2801722893 + -182039471029834
+-182039471029834.2801722893 + -282039471029834.2838
+-282039471029834.2801722893 + -182039471029834.2838
+-182039471029834 + -282039471029834.2801722893
+-282039471029834 + -182039471029834.2801722893
+-182039471029834.8297282893 + -282039471029834.2801722893
+-282039471029834.8297282893 + -182039471029834.2801722893
+-471029834 + -282039471029834
+-471029834 + -182039471029834
+-471029834.2801722893 + -282039471029834
+-471029834.2801722893 + -182039471029834
+-471029834.2801722893 + -282039471029834.2838
+-471029834.2801722893 + -182039471029834.2838
+-471029834 + -282039471029834.2801722893
+-471029834 + -182039471029834.2801722893
+-471029834.8297282893 + -282039471029834.2801722893
+-471029834.8297282893 + -182039471029834.2801722893
+-182039471029834 + -471029834
+-282039471029834 + -471029834
+-182039471029834.2801722893 + -471029834
+-282039471029834.2801722893 + -471029834
+-182039471029834.2801722893 + -471029834.2838
+-282039471029834.2801722893 + -471029834.2838
+-182039471029834 + -471029834.2801722893
+-282039471029834 + -471029834.2801722893
+-182039471029834.8297282893 + -471029834.2801722893
+-282039471029834.8297282893 + -471029834.2801722893
diff --git a/tests/bc/add_results.txt b/tests/bc/add_results.txt
new file mode 100644
index 000000000000..020969b4ea3d
--- /dev/null
+++ b/tests/bc/add_results.txt
@@ -0,0 +1,158 @@
+0
+1
+2
+1
+7
+720
+1998
+324869359109479
+2378639108055453348401
+78562139406792834691802347619083467219846713490861872324967138636055\
+45508706362018540498696043776980521464405852627147161556994835657433\
+00967298
+1.1
+1.1
+37842935130118.1187478621432354
+1.1
+3746289134067138046.138375863945672398456712389456273486293
+-2
+-19
+-1287904651762470260258
+100000000000000000000000000000000000000000000000000000000000.0000000\
+00000000000000000000000000000000000000000000000000000000000000000000\
+000000000000000000000000000000000000000000000
+100000000000000000000000000000000000000000000000000000000000.0000000\
+00000000000000000000000000000000000000000000000000000000000000000000\
+000000000000000000000000000000000000000000000
+100000000000000000000000000000000000000000000000000000000000.0000000\
+00000000000000000000000000000000000000000000000000000000000000000000\
+000000000000000000000000000000000000000009999
+99999999999999999999999999999999999999999999999999999999999.99999999\
+99999999999999999999999999999999999999999999999999000000000000000000\
+00000000000000000000000000000000000000009999
+99999999999999999999999999999999999990000000000000000000000.00000000\
+00000000000000000000000000000000000000000000000000000000000000000000\
+00000000000000000000000000000000000000009999
+122761518
+-14338.391079082
+-2422295.6865057444
+464078942059668
+464078942059668
+464078942059668.2801722893
+464078942059668.2801722893
+464078942059668.5639722893
+464078942059668.5639722893
+464078942059668.2801722893
+464078942059668.2801722893
+464078942059669.1099005786
+464078942059669.1099005786
+282039942059668
+182039942059668
+282039942059668.2801722893
+182039942059668.2801722893
+282039942059668.5639722893
+182039942059668.5639722893
+282039942059668.2801722893
+182039942059668.2801722893
+282039942059669.1099005786
+182039942059669.1099005786
+182039942059668
+282039942059668
+182039942059668.2801722893
+282039942059668.2801722893
+182039942059668.5639722893
+282039942059668.5639722893
+182039942059668.2801722893
+282039942059668.2801722893
+182039942059669.1099005786
+282039942059669.1099005786
+100000000000000
+-100000000000000
+99999999999999.7198277107
+-100000000000000.2801722893
+100000000000000.0036277107
+-99999999999999.9963722893
+100000000000000.2801722893
+-99999999999999.7198277107
+99999999999999.4504440000
+-100000000000000.5495560000
+282039000000000
+182039000000000
+282038999999999.7198277107
+182038999999999.7198277107
+282039000000000.0036277107
+182039000000000.0036277107
+282039000000000.2801722893
+182039000000000.2801722893
+282038999999999.4504440000
+182038999999999.4504440000
+-182039000000000
+-282039000000000
+-182039000000000.2801722893
+-282039000000000.2801722893
+-182038999999999.9963722893
+-282038999999999.9963722893
+-182038999999999.7198277107
+-282038999999999.7198277107
+-182039000000000.5495560000
+-282039000000000.5495560000
+-100000000000000
+100000000000000
+-99999999999999.7198277107
+100000000000000.2801722893
+-100000000000000.0036277107
+99999999999999.9963722893
+-100000000000000.2801722893
+99999999999999.7198277107
+-99999999999999.4504440000
+100000000000000.5495560000
+-282039000000000
+-182039000000000
+-282038999999999.7198277107
+-182038999999999.7198277107
+-282039000000000.0036277107
+-182039000000000.0036277107
+-282039000000000.2801722893
+-182039000000000.2801722893
+-282038999999999.4504440000
+-182038999999999.4504440000
+182039000000000
+282039000000000
+182039000000000.2801722893
+282039000000000.2801722893
+182038999999999.9963722893
+282038999999999.9963722893
+182038999999999.7198277107
+282038999999999.7198277107
+182039000000000.5495560000
+282039000000000.5495560000
+-464078942059668
+-464078942059668
+-464078942059668.2801722893
+-464078942059668.2801722893
+-464078942059668.5639722893
+-464078942059668.5639722893
+-464078942059668.2801722893
+-464078942059668.2801722893
+-464078942059669.1099005786
+-464078942059669.1099005786
+-282039942059668
+-182039942059668
+-282039942059668.2801722893
+-182039942059668.2801722893
+-282039942059668.5639722893
+-182039942059668.5639722893
+-282039942059668.2801722893
+-182039942059668.2801722893
+-282039942059669.1099005786
+-182039942059669.1099005786
+-182039942059668
+-282039942059668
+-182039942059668.2801722893
+-282039942059668.2801722893
+-182039942059668.5639722893
+-282039942059668.5639722893
+-182039942059668.2801722893
+-282039942059668.2801722893
+-182039942059669.1099005786
+-282039942059669.1099005786
diff --git a/tests/bc/all.txt b/tests/bc/all.txt
new file mode 100644
index 000000000000..069e60942404
--- /dev/null
+++ b/tests/bc/all.txt
@@ -0,0 +1,44 @@
+decimal
+length
+scale
+shift
+add
+subtract
+multiply
+divide
+modulus
+power
+sqrt
+trunc
+places
+vars
+boolean
+comp
+abs
+assignments
+functions
+scientific
+engineering
+globals
+strings
+letters
+print
+print2
+parse
+exponent
+log
+pi
+arctangent
+sine
+cosine
+bessel
+arrays
+misc
+misc1
+misc2
+misc3
+misc4
+misc5
+void
+rand
+lib2
diff --git a/tests/bc/arctangent.txt b/tests/bc/arctangent.txt
new file mode 100644
index 000000000000..ebaa0e8c10a5
--- /dev/null
+++ b/tests/bc/arctangent.txt
@@ -0,0 +1,27 @@
+a(.267)
+a(1)
+scale = 64
+a(.267)
+a(1)
+scale = 100
+a(.267)
+a(1)
+scale = 20
+a(0)
+a(.5)
+a(0.577350269189625764509148780501)
+a(1.5)
+a(1.7320508075688772935274463415)
+a(2)
+a(3)
+a(1000)
+a(-.5)
+a(-0.577350269189625764509148780501)
+a(-1.5)
+a(-1.7320508075688772935274463415)
+a(-2)
+a(-3)
+a(-1000)
+a(-3249917614.2821897119)
+a(-694706362.1974670468)
+scale = 22; a(-816494969)
diff --git a/tests/bc/arctangent_results.txt b/tests/bc/arctangent_results.txt
new file mode 100644
index 000000000000..31a6ba8cf27d
--- /dev/null
+++ b/tests/bc/arctangent_results.txt
@@ -0,0 +1,26 @@
+.26091356923294057959
+.78539816339744830961
+.2609135692329405795967852677779865639774740239882445822329882917
+.7853981633974483096156608458198757210492923498437764552437361480
+.2609135692329405795967852677779865639774740239882445822329882917230\
+650591934644905491823044536954978
+.7853981633974483096156608458198757210492923498437764552437361480769\
+541015715522496570087063355292669
+0
+.46364760900080611621
+.52359877559829887307
+.98279372324732906798
+1.04719755119659774615
+1.10714871779409050301
+1.24904577239825442582
+1.56979632712822975256
+-.46364760900080611621
+-.52359877559829887307
+-.98279372324732906798
+-1.04719755119659774615
+-1.10714871779409050301
+-1.24904577239825442582
+-1.56979632712822975256
+-1.57079632648719651151
+-1.57079632535543952711
+-1.5707963255701493299433
diff --git a/tests/bc/arrays.txt b/tests/bc/arrays.txt
new file mode 100644
index 000000000000..26a284b8d814
--- /dev/null
+++ b/tests/bc/arrays.txt
@@ -0,0 +1,10 @@
+a[0] = 1
+a[2-1] = 2
+
+a[0]+a[0]
+
+a[2-1]+a[2-1]
+
+a[5] = 2
+a[5.789]
+
diff --git a/tests/bc/arrays_results.txt b/tests/bc/arrays_results.txt
new file mode 100644
index 000000000000..200035ffa0a0
--- /dev/null
+++ b/tests/bc/arrays_results.txt
@@ -0,0 +1,3 @@
+2
+4
+2
diff --git a/tests/bc/assignments.txt b/tests/bc/assignments.txt
new file mode 100644
index 000000000000..6a776e7840ec
--- /dev/null
+++ b/tests/bc/assignments.txt
@@ -0,0 +1,122 @@
+define x(x) {
+ return (i++ + x)
+}
+define y(x) {
+ return (++i + x)
+}
+define z(x) {
+ return (i *= 2) + x
+}
+
+i++
+i--
+++i
+--i
+
+(i++)
+(i--)
+(++i)
+(--i)
+
+i += 1
+i
+i -= -4
+i
+i *= 5
+i
+i /= 12.5
+i
+
+i = 0
+
+(i += 1)
+(i -= -4)
+(i *= 5)
+(i /= 12.5)
+
+i = 0
+
+a[i++] += ++i
+i--
+i--
+i
+a[i]
+
+a[i]++
+a[i]--
+++a[i]
+--a[i]
+
+i += 4
+i
+
+sqrt(i *= 4)
+i
+length(i /= 2)
+i
+
+i = 4
+scale(i /= 2)
+i
+
+i = -1
+
+abs(i--)
+abs(--i)
+abs(++i)
+abs(i++)
+
+i = -i
+
+a = 4
+
+x(a)
+i
+
+x(a *= 5)
+a
+i
+
+a = 4
+
+y(a)
+i
+
+y(a -= 2)
+a
+i
+
+a = 4
+
+z(a)
+i
+
+z(a /= 0.5)
+a
+i
+
+i = 1
+
+if (i -= 1) print "true\n"
+else print "false\n"
+
+if (i += 1) print "true\n"
+else print "false\n"
+
+i = 3
+
+while (i -= 2) print "i: ", i += 1, "\n"
+
+a = 5
+
+for (i = 5; i-= 1; --a) print "i: ", i, "; a: ", a, "\n"
+
+define void t(x, y) {
+ print "x: ", x, "; y: ", y, "\n"
+}
+
+t(i++, i++)
+i
+
+t(++i, ++i)
+i
diff --git a/tests/bc/assignments_results.txt b/tests/bc/assignments_results.txt
new file mode 100644
index 000000000000..d9e4e5ea33c9
--- /dev/null
+++ b/tests/bc/assignments_results.txt
@@ -0,0 +1,61 @@
+0
+1
+1
+0
+0
+1
+1
+0
+1
+5
+25
+2.00000000000000000000
+1
+5
+25
+2.00000000000000000000
+2
+1
+0
+2
+2
+3
+3
+2
+4
+4.00000000000000000000
+16
+21
+8.00000000000000000000
+20
+2.00000000000000000000
+1
+3
+2
+2
+5
+2
+22
+20
+3
+8
+4
+7
+2
+5
+14
+10
+28.00000000000000000000
+8.00000000000000000000
+20
+false
+true
+i: 2
+i: 4; a: 5
+i: 3; a: 4
+i: 2; a: 3
+i: 1; a: 2
+x: 0; y: 1
+2
+x: 3; y: 4
+4
diff --git a/tests/bc/boolean.txt b/tests/bc/boolean.txt
new file mode 100644
index 000000000000..e26ded34bd1d
--- /dev/null
+++ b/tests/bc/boolean.txt
@@ -0,0 +1,184 @@
+!0
+!1
+!(-129)
+4 && 5
+4 && 0
+0 && 5
+4 && 5 && 7
+4 && 0 && 7
+0 && 5 && 7
+4 && 5 && 0
+0 && 0 && 7
+4 && 0 && 0
+0 && 5 && 0
+!4 && 5
+!4 && 0
+!0 && 5
+4 && !5
+4 && !0
+0 && !5
+!4 && 5 && 7
+!4 && 0 && 7
+!0 && 5 && 7
+!4 && 5 && 0
+!0 && 0 && 7
+!4 && 0 && 0
+!0 && 5 && 0
+4 && !5 && 7
+4 && !0 && 7
+0 && !5 && 7
+4 && !5 && 0
+0 && !0 && 7
+4 && !0 && 0
+0 && !5 && 0
+4 && 5 && !7
+4 && 0 && !7
+0 && 5 && !7
+4 && 5 && !0
+0 && 0 && !7
+4 && 0 && !0
+0 && 5 && !0
+!4 && !5 && 7
+!4 && !0 && 7
+!0 && !5 && 7
+!4 && !5 && 0
+!0 && !0 && 7
+!4 && !0 && 0
+!0 && !5 && 0
+!4 && 5 && !7
+!4 && 0 && !7
+!0 && 5 && !7
+!4 && 5 && !0
+!0 && 0 && !7
+!4 && 0 && !0
+!0 && 5 && !0
+4 && !5 && !7
+4 && !0 && !7
+0 && !5 && !7
+4 && !5 && !0
+0 && !0 && !7
+4 && !0 && !0
+0 && !5 && !0
+!4 && !5 && !7
+!4 && !0 && !7
+!0 && !5 && !7
+!4 && !5 && !0
+!0 && !0 && !7
+!4 && !0 && !0
+!0 && !5 && !0
+3 < 4 && 7
+3 && 4 >= 4
+3 > 4 && 7
+3 && 4 >= 5
+3 < 4 && 0
+0 && 4 >= 4
+3 > 4 && 0
+0 && 4 >= 5
+3 > 4 && 0
+0 && 4 < 4
+3 >= 4 && 0
+0 && 4 >= 5
+3 < 4 && 7
+3 && 4 >= 4
+3 > 4 && 7 > 4
+3 >= 2 && 4 >= 5
+3 < 4 && 0 > -1
+4 < 3 && 4 >= 4
+3 > 4 && 3 == 3
+3 != 3 && 4 >= 5
+3 > 4 && 0 > 1
+0 >= 0 && 4 < 4
+3 >= 4 && 0 >= 1
+0 <= -1 && 4 >= 5
+4 || 5
+4 || 0
+0 || 5
+4 || 5 || 7
+4 || 0 || 7
+0 || 5 || 7
+4 || 5 || 0
+0 || 0 || 7
+4 || 0 || 0
+0 || 5 || 0
+!4 || 5
+!4 || 0
+!0 || 5
+4 || !5
+4 || !0
+0 || !5
+!4 || 5 || 7
+!4 || 0 || 7
+!0 || 5 || 7
+!4 || 5 || 0
+!0 || 0 || 7
+!4 || 0 || 0
+!0 || 5 || 0
+4 || !5 || 7
+4 || !0 || 7
+0 || !5 || 7
+4 || !5 || 0
+0 || !0 || 7
+4 || !0 || 0
+0 || !5 || 0
+4 || 5 || !7
+4 || 0 || !7
+0 || 5 || !7
+4 || 5 || !0
+0 || 0 || !7
+4 || 0 || !0
+0 || 5 || !0
+!4 || !5 || 7
+!4 || !0 || 7
+!0 || !5 || 7
+!4 || !5 || 0
+!0 || !0 || 7
+!4 || !0 || 0
+!0 || !5 || 0
+!4 || 5 || !7
+!4 || 0 || !7
+!0 || 5 || !7
+!4 || 5 || !0
+!0 || 0 || !7
+!4 || 0 || !0
+!0 || 5 || !0
+4 || !5 || !7
+4 || !0 || !7
+0 || !5 || !7
+4 || !5 || !0
+0 || !0 || !7
+4 || !0 || !0
+0 || !5 || !0
+!4 || !5 || !7
+!4 || !0 || !7
+!0 || !5 || !7
+!4 || !5 || !0
+!0 || !0 || !7
+!4 || !0 || !0
+!0 || !5 || !0
+3 < 4 || 7
+3 || 4 >= 4
+3 > 4 || 7
+3 || 4 >= 5
+3 < 4 || 0
+0 || 4 >= 4
+3 > 4 || 0
+0 || 4 >= 5
+3 > 4 || 0
+0 || 4 < 4
+3 >= 4 || 0
+0 || 4 >= 5
+3 < 4 || 7
+3 || 4 >= 4
+3 > 4 || 7 > 4
+3 >= 2 || 4 >= 5
+3 < 4 || 0 > -1
+4 < 3 || 4 >= 4
+3 > 4 || 3 == 3
+3 != 3 || 4 >= 5
+3 > 4 || 0 > 1
+0 >= 0 || 4 < 4
+3 >= 4 || 0 >= 1
+0 <= -1 || 4 >= 5
+1 <= 0 && 1 <= 2 || 1 >= 0 && 1 == 2
+1 <= 0 && 1 <= 2 || 1 >= 0 && 1 != 2
+1 >= 0 && 1 <= 2 || 1 >= 0 && 1 == 2
diff --git a/tests/bc/boolean_results.txt b/tests/bc/boolean_results.txt
new file mode 100644
index 000000000000..1c15dc7029ca
--- /dev/null
+++ b/tests/bc/boolean_results.txt
@@ -0,0 +1,184 @@
+1
+0
+0
+1
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+1
+0
+1
+0
+0
+0
+1
+0
+0
+0
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+1
+0
+0
+0
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+0
+1
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+1
+0
+0
+1
+0
+0
+0
+0
+0
+0
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+1
+1
+1
+0
+1
+1
+1
+1
+1
+0
+1
+1
+1
+1
+1
+1
+1
+0
+1
+1
+1
+1
+0
+1
+1
+1
+1
+1
+0
+1
+1
+1
+1
+0
+1
+1
+1
+1
+1
+1
+1
+0
+1
+1
+1
+1
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+0
+0
+0
+0
+0
+1
+1
+1
+1
+1
+1
+1
+0
+0
+1
+0
+0
+0
+1
+1
diff --git a/tests/bc/comp.txt b/tests/bc/comp.txt
new file mode 100644
index 000000000000..73aa4508f345
--- /dev/null
+++ b/tests/bc/comp.txt
@@ -0,0 +1,132 @@
+-999999999 < -1
+-999999999 > -1
+-1000000000 < -1
+-1000000000 > -1
+-1 < -999999999
+-1 > -999999999
+-1 < -1000000000
+-1 > -1000000000
+-99999 < -1
+-99999 > -1
+-100000 < -1
+-100000 > -1
+-1 < -99999
+-1 > -99999
+-1 < -100000
+-1 > -100000
+-999999999 < -1000000000
+-999999999 > -1000000000
+-1000000000 < -999999999
+-1000000000 > -999999999
+-99999 < -100000
+-99999 > -100000
+-100000 < -99999
+-100000 > -99999
+999999999 < 1
+999999999 > 1
+1000000000 < 1
+1000000000 > 1
+1 < 999999999
+1 > 999999999
+1 < 1000000000
+1 > 1000000000
+99999 < 1
+99999 > 1
+100000 < 1
+100000 > 1
+1 < 99999
+1 > 99999
+1 < 100000
+1 > 100000
+999999999 < 1000000000
+999999999 > 1000000000
+1000000000 < 999999999
+1000000000 > 999999999
+99999 < 100000
+99999 > 100000
+100000 < 99999
+100000 > 99999
+-999999999 < 1
+-999999999 > 1
+-1000000000 < 1
+-1000000000 > 1
+-1 < 999999999
+-1 > 999999999
+-1 < 1000000000
+-1 > 1000000000
+-99999 < 1
+-99999 > 1
+-100000 < 1
+-100000 > 1
+-1 < 99999
+-1 > 99999
+-1 < 100000
+-1 > 100000
+-999999999 < 1000000000
+-999999999 > 1000000000
+-1000000000 < 999999999
+-1000000000 > 999999999
+-99999 < 100000
+-99999 > 100000
+-100000 < 99999
+-100000 > 99999
+999999999 < -1
+999999999 > -1
+1000000000 < -1
+1000000000 > -1
+1 < -999999999
+1 > -999999999
+1 < -1000000000
+1 > -1000000000
+99999 < -1
+99999 > -1
+100000 < -1
+100000 > -1
+1 < -99999
+1 > -99999
+1 < -100000
+1 > -100000
+999999999 < -1000000000
+999999999 > -1000000000
+1000000000 < -999999999
+1000000000 > -999999999
+99999 < -100000
+99999 > -100000
+100000 < -99999
+100000 > -99999
+v = 18237
+v == v
+v != v
+4 < 0
+-4 < 0
+4 > 0
+-4 > 0
+5 > 4
+-5 > 4
+5 > -4
+-5 > -4
+5 < 4
+-5 < 4
+5 < -4
+-5 < -4
+1000000000.000000001 == 999999999.000000001
+1000000000.000000001 > 999999999.000000001
+1000000000.000000001 < 999999999.000000001
+1000000000.000000001 == 1000000000.000000001
+1000000000.000000001 > 1000000000.000000001
+1000000000.000000001 < 1000000000.000000001
+1000000000.000000001 == 1000000000.00000000100000000
+1000000000.000000001 > 1000000000.00000000100000000
+1000000000.000000001 < 1000000000.00000000100000000
+1000000000.000000001 == 1000000000.000000001000000001
+1000000000.000000001 > 1000000000.000000001000000001
+1000000000.000000001 < 1000000000.000000001000000001
+999999999.000000001 == 1000000000.000000001
+999999999.000000001 > 1000000000.000000001
+999999999.000000001 < 1000000000.000000001
+1000000000.00000000100000000 == 1000000000.000000001
+1000000000.00000000100000000 > 1000000000.000000001
+1000000000.00000000100000000 < 1000000000.000000001
+1000000000.000000001000000001 == 1000000000.000000001
+1000000000.000000001000000001 > 1000000000.000000001
+1000000000.000000001000000001 < 1000000000.000000001
diff --git a/tests/bc/comp_results.txt b/tests/bc/comp_results.txt
new file mode 100644
index 000000000000..5aa90ebcdbeb
--- /dev/null
+++ b/tests/bc/comp_results.txt
@@ -0,0 +1,131 @@
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+0
+1
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+0
+1
+1
+0
+0
+1
+1
+0
+1
+0
+1
+0
+0
+1
+0
+1
+0
+1
+0
+1
+0
+0
+1
+0
+0
+0
+0
+1
+0
+0
+1
+1
+0
+0
+0
+1
+0
diff --git a/tests/bc/cosine.txt b/tests/bc/cosine.txt
new file mode 100644
index 000000000000..9e67df4c6f69
--- /dev/null
+++ b/tests/bc/cosine.txt
@@ -0,0 +1,44 @@
+scale = 25
+p = 4 * a(1)
+scale = 20
+c(0)
+c(0.5)
+c(1)
+c(2)
+c(3)
+c(-0.5)
+c(-1)
+c(-2)
+c(-3)
+c(p / 7)
+c(-p / 7)
+c(p / 4)
+c(-p / 4)
+c(p / 3)
+c(-p / 3)
+c(p / 2)
+c(-p / 2)
+c(3 * p / 4)
+c(3 * -p / 4)
+c(p)
+c(-p)
+c(3 * p / 2)
+c(3 * -p / 2)
+c(7 * p / 4)
+c(7 * -p / 4)
+c(13 * p / 4)
+c(13 * -p / 4)
+c(2 * p)
+c(2 * -p)
+c(131231)
+c(-131231)
+c(859799894.3562378245)
+c(859799894.3562378245)
+c(4307371)
+c(3522556.3323810191)
+c(44961070)
+c(6918619.1574479809)
+c(190836996.2180244164)
+c(34934)
+c(2483599)
+c(13720376)
diff --git a/tests/bc/cosine_results.txt b/tests/bc/cosine_results.txt
new file mode 100644
index 000000000000..43d640f002df
--- /dev/null
+++ b/tests/bc/cosine_results.txt
@@ -0,0 +1,41 @@
+1.00000000000000000000
+.87758256189037271611
+.54030230586813971740
+-.41614683654714238699
+-.98999249660044545727
+.87758256189037271611
+.54030230586813971740
+-.41614683654714238699
+-.98999249660044545727
+.90096886790241912623
+.90096886790241912623
+.70710678118654752440
+.70710678118654752440
+.50000000000000000000
+.50000000000000000000
+0
+0
+-.70710678118654752439
+-.70710678118654752439
+-1.00000000000000000000
+-1.00000000000000000000
+0
+0
+.70710678118654752439
+.70710678118654752439
+-.70710678118654752440
+-.70710678118654752440
+1.00000000000000000000
+1.00000000000000000000
+.92427123447397657316
+.92427123447397657316
+-.04198856352825241211
+-.04198856352825241211
+-.75581969921220636368
+-.01644924448939844182
+-.97280717522127222547
+-.92573947460230585966
+-.14343824233852988038
+.87259414746802343203
+.93542606623067050616
+-.52795540572178251550
diff --git a/tests/bc/decimal.txt b/tests/bc/decimal.txt
new file mode 100644
index 000000000000..b90bf9588a6e
--- /dev/null
+++ b/tests/bc/decimal.txt
@@ -0,0 +1,61 @@
+0
+0.0
+.00000
+000000000000000000000000.00000000000000000000000
+000000000000000000000000000135482346782356
+000000000000000000000000002
+1
+11
+123
+7505
+1023468723275435238491972521917846
+4343472432431705867392073517038270398027352709027389273920739037937960379637893607893607893670530278200795207952702873892786172916728961783907893607418973587857386079679267926737520730925372983782793652793
+-1
+-203
+-57
+-18586
+-31378682943772818461924738352952347258
+-823945628745673589495067238723986520375698237620834674509627345273096287563846592384526349872634895763257893467523987578690283762897568459072348758071071087813501875908127359018715023841710239872301387278
+.123521346523546
+0.1245923756273856
+-.1024678456387
+-0.8735863475634587
+4.0
+-6.0
+234237468293576.000000000000000000000000000000
+23987623568943567.00000000000000000005677834650000000000000
+23856934568940675.000000000000000435676782300000000000000456784
+77567648698496.000000000000000000587674750000000000458563800000000000000
+2348672354968723.2374823546000000000003256987394502346892435623870000000034578
+-2354768.000000000000000000000000000000000000
+-96739874567.000000000347683456
+-3764568345.000000000004573845000000347683460
+-356784356.934568495770004586495678300000000
+74325437345273852773827101738273127312738521733017537073520735207307570358738257390761276072160719802671980267018728630178.7082681027680521760217867841276127681270867827821768173178207830710978017738178678012767377058785378278207385237085237803278203782037237582795870
+-756752732785273851273728537852738257837283678965738527385272983678372867327835672967385278372637862738627836279863782673862783670.71738178361738718367186378610738617836781603760178367018603760178107735278372832783728367826738627836278378260736270367362073867097307925
+9812734012837410982345719208345712908357412903587192048571920458712.23957182459817249058172945781
+1891702357\
+ 289370172037.90287102837
+011234567890
+01123456789.0
+0112345678.90
+011234567.890
+01123456.7890
+0112345.67890
+011234.567890
+01123.4567890
+0112.34567890
+011.234567890
+01.1234567890
+0.11234567890
+.011234567890
+.0011234567890
+.00011234567890
+.000011234567890
+.0000011234567890
+.00000011234567890
+.000000011234567890
+.0000000011234567890
+.00000000011234567890
+.000000000011234567890
+.0000000000011234567890
diff --git a/tests/bc/decimal_results.txt b/tests/bc/decimal_results.txt
new file mode 100644
index 000000000000..e0aac3cc8519
--- /dev/null
+++ b/tests/bc/decimal_results.txt
@@ -0,0 +1,75 @@
+0
+0
+0
+0
+135482346782356
+2
+1
+11
+123
+7505
+1023468723275435238491972521917846
+43434724324317058673920735170382703980273527090273892739207390379379\
+60379637893607893607893670530278200795207952702873892786172916728961\
+78390789360741897358785738607967926792673752073092537298378279365279\
+3
+-1
+-203
+-57
+-18586
+-31378682943772818461924738352952347258
+-8239456287456735894950672387239865203756982376208346745096273452730\
+96287563846592384526349872634895763257893467523987578690283762897568\
+45907234875807107108781350187590812735901871502384171023987230138727\
+8
+.123521346523546
+.1245923756273856
+-.1024678456387
+-.8735863475634587
+4.0
+-6.0
+234237468293576.000000000000000000000000000000
+23987623568943567.00000000000000000005677834650000000000000
+23856934568940675.000000000000000435676782300000000000000456784
+77567648698496.00000000000000000058767475000000000045856380000000000\
+0000
+2348672354968723.237482354600000000000325698739450234689243562387000\
+0000034578
+-2354768.000000000000000000000000000000000000
+-96739874567.000000000347683456
+-3764568345.000000000004573845000000347683460
+-356784356.934568495770004586495678300000000
+74325437345273852773827101738273127312738521733017537073520735207307\
+570358738257390761276072160719802671980267018728630178.7082681027680\
+52176021786784127612768127086782782176817317820783071097801773817867\
+8012767377058785378278207385237085237803278203782037237582795870
+-7567527327852738512737285378527382578372836789657385273852729836783\
+72867327835672967385278372637862738627836279863782673862783670.71738\
+17836173871836718637861073861783678160376017836701860376017810773527\
+8372832783728367826738627836278378260736270367362073867097307925
+9812734012837410982345719208345712908357412903587192048571920458712.\
+23957182459817249058172945781
+1891702357289370172037.90287102837
+11234567890
+1123456789.0
+112345678.90
+11234567.890
+1123456.7890
+112345.67890
+11234.567890
+1123.4567890
+112.34567890
+11.234567890
+1.1234567890
+.11234567890
+.011234567890
+.0011234567890
+.00011234567890
+.000011234567890
+.0000011234567890
+.00000011234567890
+.000000011234567890
+.0000000011234567890
+.00000000011234567890
+.000000000011234567890
+.0000000000011234567890
diff --git a/tests/bc/divide.txt b/tests/bc/divide.txt
new file mode 100644
index 000000000000..cba4af9dc8ba
--- /dev/null
+++ b/tests/bc/divide.txt
@@ -0,0 +1,62 @@
+0 / 1
+0 / 321566
+0 / 0.3984567238456
+1 / 1
+1 / 1287469297356
+1 / 0.2395672438567234
+1 / 237586239856.0293596728392360
+1249687284356 / 3027949207835207
+378617298617396719 / 35748521
+9348576237845624358 / 0.9857829375461
+35768293846193284 / 2374568947.045762839567823
+-78987234567812345 / 876542837618936
+-356789237555535468 / 0.3375273860984786903
+-5203475364850390 / 435742903748307.70869378534043296404530458
+-0.37861723347576903 / 7385770896
+-0.399454682043962 / 0.34824389304
+-0.6920414523873204 / 356489645223.76076045304879030
+-35872917389671.7573280963748 / 73924708
+-78375896314.4836709876983 / 0.78356798637817
+-2374123896417.143789621437581 / 347821469423789.1473856783960
+-896729350238549726 / -34976289345762
+-2374568293458762348596 / -0.8792370647234987679
+-237584692306721845726038 / -21783910782374529637.978102738746189024761
+-0.23457980123576298375682 / -1375486293874612
+-0.173897061862478951264 / -0.8179327486017634987516298745
+-0.9186739823576829347586 / -0.235678293458756239846
+-0.9375896183746982374568 / -13784962873546.0928729395476283745
+-2930754618923467.12323745862937465 / -734869238465
+-23745861923467.874675129834675 / -0.23542357869124756
+-3878923750692883.7238596702834756902 / -7384192674957215364986723.9738461923487621983
+1 / 0.00000000000000000000000000000000000000000002346728372937352457354204563027
+3496723859067234 / 298375462837546928347623059375486
+-47589634875689345 / 37869235
+-6324758963 / 237854962
+2 / -3
+89237423 / -237856923854
+123647238946 / -12467
+-2 / -3
+-13 / -7
+-15 / -7
+-12784956 / -32746
+-127849612 / -23712347682193
+1 / 0.2395672438567234
+scale = 0
+15 / 4
+17 / 4
+2389473 / 5
+346728934 / 23958
+-47589634875689345 / 37869235
+-6324758963 / 237854962
+2 / -3
+16 / 5
+14 / 5
+123647238946 / -12467
+-2 / -3
+-13 / -7
+-15 / -7
+-12784956 / -32746
+-3191280681 / 641165986
+scale = 0; -899510228 / -2448300078.40314
+scale = 0; -7424863 / -207.2609738667
+scale = 0; 3769798918 / 0.6
diff --git a/tests/bc/divide_results.txt b/tests/bc/divide_results.txt
new file mode 100644
index 000000000000..a095066e1ba2
--- /dev/null
+++ b/tests/bc/divide_results.txt
@@ -0,0 +1,61 @@
+0
+0
+0
+1.00000000000000000000
+.00000000000077671755
+4.17419336592637110778
+.00000000000420899796
+.00041271738677857404
+10591131829.40901859967857131767
+9483402361494453751.52388015648196297248
+15063068.13735316451497043884
+-90.11223545260531110575
+-1057067521778623447.45138528213564485251
+-11.94161814246320631346
+-.00000000005126306228
+-1.14705437777218917343
+-.00000000000194126663
+-485262.88923145638029569727
+-100024372711.74763635544535424582
+-.00682569681609989277
+25638.20711150436682153521
+2700714504347599627864.24626421085374010264
+10906.42973524078145692731
+.00000000000000017054
+.21260557443109085166
+3.89799997647407910677
+.00000000000006801538
+3988.13076601933678578945
+100864416620775.31076855630746548983
+.00000000052530099381
+42612515855353136519261264261472677699404182.78776061098893912189
+.00000000000000001171
+-1256683291.21751059930310184507
+-26.59082202792136831688
+-.66666666666666666666
+-.00037517269438317975
+-9917962.53677709152161706906
+.66666666666666666666
+1.85714285714285714285
+2.14285714285714285714
+390.42802174311366273743
+.00000539168933053431
+4.17419336592637110778
+3
+4
+477894
+14472
+-1256683291
+-26
+0
+3
+2
+-9917962
+0
+1
+2
+390
+-4
+0
+35823
+6282998196
diff --git a/tests/bc/engineering.txt b/tests/bc/engineering.txt
new file mode 100644
index 000000000000..cf9c0c1b0117
--- /dev/null
+++ b/tests/bc/engineering.txt
@@ -0,0 +1,19 @@
+obase=1
+0
+1
+-34
+298
+-8933
+29488
+-148232
+8927559
+.2
+-.02
+.002
+-.0003
+.0000209310
+-.00000289362
+.000000859289
+-.02983672
+.20201296
+-.8907210897000000000000000000
diff --git a/tests/bc/engineering_results.txt b/tests/bc/engineering_results.txt
new file mode 100644
index 000000000000..dd26f9bbb138
--- /dev/null
+++ b/tests/bc/engineering_results.txt
@@ -0,0 +1,18 @@
+0
+1e0
+-34e0
+298e0
+-8.933e3
+29.488e3
+-148.232e3
+8.927559e6
+200e-3
+-20e-3
+2e-3
+-300e-6
+20.9310e-6
+-2.89362e-6
+859.289e-9
+-29.83672e-3
+202.01296e-3
+-890.7210897000000000000000000e-3
diff --git a/tests/bc/errors.txt b/tests/bc/errors.txt
new file mode 100644
index 000000000000..738b7a0c9dd8
--- /dev/null
+++ b/tests/bc/errors.txt
@@ -0,0 +1,258 @@
+4 != 0 &^ 34 == 5
+4 & 5
+4 != 0 |% 34 == 5
+4 | 5
+3 $ 7
+4 @^ 5
+'
+1.892389ep
+"ontsjahoesu
+/* oerchaoegu
+\(<267)11111111111111111111111111111
+j(1,)
+a(3,3
+()
+(((((((((((((((((((()))))))))))))))
+3 +
+3 - -
+233*+ 32
+233*+ 32 869356734856
+293 * += 38297
+293 * += 38297 2839
+293 - %= 38297
+a * += 38297 2839
+a += * 38297
+a += * 38297 2839
+a %= % 38297
+a %= / 38297 2839
+"s" + 3
+3 - "o"
+"e" * "j"
+"3" / "2"
+!"3"
+--"4"
+"4"++
++ 4
+* 3
++ 4 + 3
+* 3 + 2
+c++ +
+c + ++
+(e * a)++
+++(e ^ a)
+(e + a)--
+--(e - a)
+++e++
+++e--
+--e++
+--e--
+++(e)
+(e)--
+++++e
+e----
+++-e
+---e
+++x += 4
+x++ += 4
+(i += 1) += 1
+-i+=1
+e a
+c!
+e! + a
+a + e!
+(0||!)
+(238497*(29348+238)
+a[234
+a238]
+a[(0] + 1)
+(1 + a[0)]
+283947 2983745289
+a 4
+a g
+define r(e,) {}
+p(,e)
+p(e,)
+! + 1l(2)
+l957)
+l(
+g[si+= j []a[s]>=]
+j[s
+!>5d
+a(1..)
+a(1;)
+1..
+1..0
+99""""""""""""""""""""""""""""""""99.9999999 + 0.0000000000001
+pll[zx<zb]--(<.+)1
+a(g2[] -3)
+.--1)-1)
+.--1)
+-1)
+(.2==)--d_ -8234+68. -d_ ---d_ -d_ ---d_ -d2 + 5
+break
+continue
+auto a,u
+define i(e) { auto p,; return(p); }
+define i(e) { auto e; return(e); }
+define i(e) { auto q; auto n; return(e); }
+define i(e) { auto q; e+=q; auto n; return(e); }
+define i(e, e) { auto p; return(p*e); }
+define i(e, g, e) { auto p; return(p*e*g); }
+define x(e) { define q(f) { return (0); } return q(e); }
+define x(3) { return q(e); }
+define x([]e) { return q(e); }
+define x([]) { return q(e); }
+define x(e,[]) { return q(e); }
+define x(a[]) { return a[]; }
+define x(*a) { return a; }
+define x(a) return a;
+while e!=0 { i+=1 }
+while (e!=0) { i+=1 } if (x) x
+for i=0;i<2;++i { c+=i; }
+for (i=0;i<2,++i) { c+=i; }
+for (i=0,i<2;++i) { c+=i; }
+for (i<2;++i) { c+=i; }
+for (i=0;++i) { c+=i; }
+return (0)
+sqrt(3,4)
+length(3,4)
+scale(3,4)
+3=4
+3+=4
+4-=3
+4*=3
+4/=3
+4%=3
+4^=3
+3++
+--3
+a[] = 4
+1 + $
+a[18446744073709552000] = 0
+j(1,2,3)
+j(1,a[])
+x(2)
+read(3)
+scale = 18446744073709552000
+ibase = 18446744073709552000
+obase = 18446744073709552000
+scale = -1
+sqrt(-1)
+0 ^ -251
+1/0
+1%0
+0/0
+0%0
+0/0.000000
+0.000000%0.00000000
+root(-15, 4)
+root(5, 0)
+root(13, -5)
+root(1548, 0)
+irand(-4)
+irand(3289.10827340)
+scale = 10000000000000000000000000000000000
+obase += 999999999999999999999999999999999999999999999999999999999999999999999999
+ibase *= 9999999999999999999999999999999999999999999999999999999999999.9
+obase += 9999999999999999999999999999999
+ibase *= 99999999999999999999999999999.9
+scale = 18446744073709551616
+1<<18446744073709551616
+1>>18446744073709551616
+1<<18446744073709551614
+1>>18446744073709551614
+i /= 0
+4^2903482.29304823
+4 @ 2389.21982
+1 @ -38
+3 @ 81906237540187263501872350127351023651023517239512635109283651203985123581235
+9 << 182397.283906123
+8 << -19
+4 << 1298376540182376510982365108263510823651082365120983561239851623590812365192830
+5 >> 21892073.28901672
+2 >> -29
+7 >> 10289374108237541829374123894571028345718923751908237518927809127350891723908
+"string"$
+-"str2"
+a[] + a
+a - a[]
+a[] * a[]
+a[] / a
+a % a[]
+a[] ^ a[]
+c(a[])
+j(a[], a)
+j(a, a[])
+j(a[], a[])
+c(;
+c(0;
+c[0;
+++c(0)
+--c(1)
+++scale(34.4)
+print "3", a[], "3"
+print a[]
+print a[], "e"
+print;
+print 1,2 print 45
+print "s" "4"
+}
+if x x
+if (x
+while (x
+for (i = 0
+for (i = 0; i < 10
+for (i = 0; i < 10; ++i
+define %(x) { return x; }
+define x x) { return x; }
+for (i=0; i; ++i) if (i) print "stuff"; else i; if (!i) i + 1; else i; }
+for (i=0; i; ++i) }
+if (i == 0) break; else i;
+while (x != 0) { break 4; }
+while (x != 0) { continue 4; }
+while (x != 0) 4 else 5
+else 1
+define t(a[) { return a[0]; }
+define u() { auto a[; return a[0]; }
+define v() { auto a, 4; return a; }
+define w() { auto a 4; return a; }
+define r() { auto a[], 4; return a[0]; }
+define s() { auto a[ 4; return a[0]; }
+define void y() { return (1); }
+print uint(0)
+4 + uint(4)
+s(uint(5))
+4 + 4 scale
+4 + 4 scale(s)
+4 * 4 read()
+5 abs(-5)
+2 sqrt(4)
+5 + 3 length(4)
+x$if(x) x else x
+bytes(1) + 4
+3 / 0.00000000000000
+4e4.4
+4e-4.2
+a[2^63] = 1
+ibase = 100
+length(l[] + i[])
+length("string")
+abs("string")
+abs(a[])
+scale("string")
+scale(b[])
+sqrt("string")
+sqrt(c[])
+sqrt
+length
+abs
+sqrt(1
+length(1
+abs(1
+scale(.2093
+a2(0,0)
+read
+read(
+read()
+read()
+read()
diff --git a/tests/bc/errors/01.txt b/tests/bc/errors/01.txt
new file mode 100644
index 000000000000..987f05c7a8c1
--- /dev/null
+++ b/tests/bc/errors/01.txt
@@ -0,0 +1,368 @@
+a(s691027461l[ ba])
+scal[ ca]
+a
+a
+e
+cs
+c
+
+a
+s(scal[ ba])
+scal[ ca]
+u
+a
+e
+cs
+c
+
+a
+s(scal[ ba])
+scal[ ca]
+u
+a
+s
+c = l[ ca]
+a
+a
+sa
+e
+cs
+c
+
+a(s691027461l[ ba])
+scal[ ca]
+a
+a
+e
+cs
+c
+
+a
+s(scal[ ba])
+scal[ ca]
+a
+a
+s
+c = l[ ca]
+a
+s
+c = l[ ca]
+a(s691027461l[ ba])
+a
+e
+cs
+c
+
+a
+s(scal[ ba])
+scal[ ca]
+u
+a
+s
+c = l[ ca]
+a
+a
+sa
+e
+cs
+c
+
+a(s691027461l[ ba])
+scal[ ca]
+a
+a*e
+cs
+c
+
+a
+s(scal[ ba])
+scal[ ca]
+a
+a
+s
+c = l[ ca]
+a
+a
+sa
+e
+css
+c = c[ ca]
+a
+a
+sa
+e
+cs
+a
+a
+sa
+e
+cs
+c
+
+a(s691027461l[ ba])
+ cs
+c = l[ ca]
+a
+a
+sa
+e
+cs
+c
+
+a(s691027461l[ ba])
+scal[ ca]
+a
+a
+e
+cs
+c
+
+a
+s(scal[ ba])
+scal[ ca]
+a
+a
+s
+c = l[ ca]
+a
+a
+sa
+e
+css
+c = l[ ca]
+a
+a
+sa
+e
+cs
+a
+b
+sa
+e
+cs
+c
+
+a(s691027461l[ ba])
+scal[ ca]
+a
+a
+e
+cs
+
+scal[ ca]
+a
+a
+e
+cs
+c
+
+a
+s(scal[ ba])
+scal[ ca]
+u
+a
+s
+c = l[ ca]
+a
+a
+sa
+e
+cs
+c
+
+a(s691027461l[ ba])
+scal[ ca]
+a
+a
+e
+cs
+c
+
+a
+s(scal[ ba])
+scal[ ca]
+a
+a
+s
+c = l[ ca]
+a
+a
+sa
+e
+css
+c = l[ ca]
+a
+a
+sa
+e
+cs
+a
+a
+sa
+e
+cs
+c
+
+a(s691027461l[ ba])
+scs
+c = l[ ca]
+a
+a
+sa
+e
+cs
+c
+
+a(s691027461l[ ba])
+scal[ ca]
+a
+a
+e
+cs
+c
+
+a
+s(scal[ ba])
+s(1)
+sd= 20
+a(0)
+a=i-=se-=ase-=se-=ase-=i-=s-=se-=xse!=e-=as=ase-=se-=as-=ase-=se-=as-=se-=a(1)
+scalaaaaaaaaaaaaa^aaaaaaaaaaaaaaa20
+a(0)
+a=i-=se-=ase-=se-=ase-=i-=s-=se-=xse!=e-=as=ase-=se-=as-=asj-=se-=as-=se-=axse!=e-=ase-=i-=se-=ase-=se-=se-=ase-=se-=as-=e-=as=ase-=se-=as-=as=i-=se-=ase-=se-=se-=ase-=se-=as-=e-=as=ase-=se-=as-=ase-=se-=as-=se-=a(1)
+scscales=ase-=se-=as-=ase-=se-=as-=se-=a(1)
+scscale ==se-=a(1)
+sd= 20
+a(0)
+a=i-=se-=ase-=se-=ase-=i-=s-=se-=xse!=e-=as=ase-=se-=as-=ase-=se-=as-=se-=a(1)
+scale ==se-=a(1)
+scale = 20
+a(0)
+a==se-=as+=ase-=se8=as-=se-=a(1)
+s ==se-=a(1)
+scale = 20
+a(0)
+a=i-=se-=ase-=se-=ase-=i-=se-=xse!=e-=ase-=i-=se-=ase-=se-=se-=ase-=se-=as-=e-=as=ase-=se-=as-=ase-=se-=as-=se-=a(1)
+scscale ==se-=a(1)
+scale = 20
+a(0)
+a=i-=se-=ase-=se-=ase-=i-=s-=se-=xse!=e-=se-=a(1)
+scale = 20
+a(0)
+a=i-=se-=ase-=se-=ase-=i-=s-=se-=xse!=e-=as=as-=ase-=se-=se4=ase-=se-=as-=e-=as=ae-=a(1)
+sc= 20
+a(0)
+a=i-=se-=ase-=se-=ase-=i-=se-=xse!=e-=ase-=i-=se-=ase-=se-=se-=ase-=se-=as-=e-=as=ase-=se-=as-=ase-=se-=as-=se-=a(1)
+scscale ==se-=a(1)
+sd= 20
+a(0)
+a=i-=se-=ase-=se-=ase-=i-=s-=se-=xse!=e-=as=ase = 20
+a(0)
+a=i-=se-=ase-=se-=ase-=s-=e-=as=ase-=se-=as-=ase-=se-=as-=se-=a(1)
+scscale ==se-=a(1)
+scale = 20
+a(0)
+a=i-=se-=ase-=se-=ase-=i-=s-=se-=xse!=e-=a_=as-=ase-=se-=se4=ase-=se-=as-=e-=as=ase-=se-=as-=ase-=se-=as-=se-=a(1)
+scscale ==se-=a(1)
+scale = 20
+a(0)
+a=i-=se-=ase-=se-=ase-=i-=s-=se-=xse!=e-=as=ase-=se-=as-=ase-=se-=as-=se-=a(1)
+scale ==se-=a(1)
+scale = 20
+a(0)
+a=i-=se-=ase-=se-=ase-=i-=se-=xse!=e-=ase-=i-=se-=ase-=se-=se-=ase-=se-=as*=e-=as=aaaaaaaaaaaaaaaaaaaaaaa^aaaaaaaaaaaaaaa20
+a(0)
+a=i-=se-=ase-=se-=ase-=i-=s-=se-=xse!=e-=as=ase-=se-=as-=ase-=se-=as-=se-=axse!=e-=ase-=i-=se-=ase-=se-=se-=ase-=se-=as-=e-=as=ase-=se-=as-=as=i-=se-=ase-=se-=se-=ase-=se-=as-=e-=as=ase-=se-=as-=ase-=se-=as-=se-=a(1)
+scscale ==sse-=ase-=s-=e-=as=ase-=se-=as-=ase-=se-=as-=se-=a(1)
+scscale ==se-=a(1)
+scale = 20
+a(0)
+a=i-=se-=ase-=se-=ase-=i-=s-=se-=xse!=e-=as=as-=ase-=se-=se4=ase-=se-=as-=e-=as=ase0=se-=as-=ase-=se-=as-=se-=a(1)
+scscale ==se-=a(1)
+scale = 20
+a(0)
+a=i-=se-=ase-=se-=ase-=i-=s-=se-=xse!=e-=as=ase-=se-=as-=ase-=se-=as-=se-=a(1)
+scale ==se-=a(1)
+scale = 20
+a(0)
+a=i-=se-=ase-=se-=ase-=i-=se-=xse!=e-=ase-=i-=se-=ase-=se-=se-=ase-=se-=as-=e-=as=aaaaaaaaaaaaaaaaaaaaaaa^aaaaaaaaaaaaaaa20
+a(0)
+a=i-=se-=ase-=se-=ase-=i-=s-=se-=xse!=e-=as=ase-=se-=as-=ase-=se-=as-=se-=axse!=e-=ase-=i-=se-=ase-=se-=se-=ase-=se-=as-=e-=as=ase-=se-=as-=as=i-=se-=ase-=se-=se-=ase-=se-=as-=e-=as=ase-=se-=as-=ase-=se-=as-=se-=a(1)
+scscale ==se-=a(1)
+scale = 20
+a(0)
+a=i-=se-=ase-=se-=ase-=i-=s-=se-=xse!=e-=as=ase-=se-=as-=ase-=se-=as-=se-=a(1)
+scale ==se-=a(1)
+scale = 20
+a(0)
+a=i-=se-=ase-=as-=ase-=se-=as-=as0
+a(0)
+a=i-=se-=ase-=se-=ase-=i-=s-=se-=xse!=e-=as=ase-=se-=as-=ase-=se-=as-=se-=a(1)
+scale ==se-=a(1)
+scale = 20
+a(0)
+a=i-=se-=ase-=se-=ase-=i-=se-=xse!=e-=ase-=i-=se-=ase-=se-=se-=ase-=aaa^aaaaaaaaaaaaaaa20
+a(0)
+a=i-=se-=ase-=se-=ase-=i-=s-=se-=xse!=e-=as=ase-=se-=as-=ase-=se-=as-=se-=axse!=e-=ase-=i-=se-=ase-=se-=se-=ase-=se-=as-=e-=as=ase-=se-=as-=as=i-=se-=ase-=se-=se-=ase-=se-=as-=e-=as=ase-=se-=as-=ase-=se-=as-=se-=a(1)
+scscales=ase-=se-=as-=ase-=se-=as-=se-=a(1)
+scscale ==se-=a(1)
+sd= 20
+a(0)
+a=i-=se-=ase-=se-=ase-=i-=s-=se-=xse!=e-=as=ase-=se-=as-=ase-=se-=as-=se-=a(1)
+de ==se-=a(1)
+scale = 20
+a(0)
+a==se-=as-=ase-=se8=as-=se-=a(1)
+s ==se-=a(1)
+scale = 20
+a(0)
+a=i-=se-=ase-=se-=ase-=i-=se-=xse!=e-=ase-=i-=se-=ase-=se-=se-=ase-=se-=as-=e-=as=ase-=se-=as-=ase-=se-=as-=se-=a(1)
+scscale ==se-=a(1)
+scale = 20
+a(0)
+a=i-=se-=ase-=se-=ase-=i-=s-=se-=xse!=e-=se-=a(1)
+scale = 20
+a(0)
+a=i-=se-=ase-=se-=ase-=i-=s-=se-=xse!=e-=as=as-=ase-=se-=se4=ase-=se-=as-=e-=as=ae-=a(1)
+sc= 20
+a(0)
+a=i-=se-=ase-=se-=ase-=i-=se-=xse!=e-=ase-=i-=se-=ase-=se-=se-=ase-=se-=as-=e-=as=ase-=se-=as-=ase-=se-=as-=se-=a(1)
+scscale ==se-=a(1)
+sd= 20
+a(0)
+a=i-=se-=ase-=se-=ase-=i-=s-=se-=xse!=e-=as=ase = 20
+a(0)
+a1i-=se-=ase-=se-=ase-=s-=e-=as=ase-=se-=as-=ase-=se-=as-=se-=a(1)
+scscale ==se-=a(1)
+scale = 20
+a(0)
+a=i-=se-=ase-=se-=ase-=i-=s-=se-=xse!=c-=a_=as-se-=se-=se4=ase-=se-=as-=e-=as=ase-=se-=as-=ase-=se-=as-=se-=a(1)
+scscale ==se-=a(1)
+scale = 20
+a(0)
+a=i-=se-=ase-=se-=ase-=i-=s-=se-=xse!=e-=as=ase-=se-=as-=ase-=se-=as-=se-=a(1)
+scale ==se-=a(1)
+scale = 20
+a(0)
+a=i-=se-=ase-=se-=asse-=as-=e-=as=aaaaaaaaaaaaaaaaaaaaaaa^aaaaaaaaaaaaaaa20
+a(0)
+a=i-=se-=ase-=se-=ase-=i-=s-=se-=xse!=e-=as=ase-=se-=as-=ase-=se-=as-=se-=axse!=e-=ase-=i-=se-=ase-=se-=se-=ase-=se-=as-=e-=as=ase-=se-=as-=as=i-=se-=ase-=-=se-=ascccc-=se-=as-=e-=as=ase-=se-=as-=ase-=se-=as-=se-=a(1)
+scscale ==se-=a(1)
+scale = 20
+a(0)
+a=i-=se-=ase-=se-=ase-=i-=s-=se-=xse!=e-=as=ase-=se-=as-=ase-=se-=as-=se-=a(1)
+scale ==se-=a(1)
+scale = 20
+a(0)
+a=i-=se-=ase-=as-=ase-=se-=as-=se-=a(1)
+scscale ==se-=a(1)
+scale = 20
+a(0)
+a=i-=se-=ase-=se-=ase-=s-=e-=as=ase-=se-=as-=ase-=se-=as-=se-=a(1)
+scscale ==se-=a(1)
+scale = 20
+a(0)
+a=i-=se-=ase-=se-=ase-=i-=s-=se-=xse!=e-=as=as-=ase-=se-=se4=ase-=se-=as-=e-=as=ase-=se-=as-=ase-=se-=as-=se-=a(1)
+scscale ==se-=a(1)
+sBale = 20
+a
diff --git a/tests/bc/errors/02.txt b/tests/bc/errors/02.txt
new file mode 100644
index 000000000000..a42dca886b75
--- /dev/null
+++ b/tests/bc/errors/02.txt
@@ -0,0 +1,16 @@
+obase^= 20-f-b-4^-f-4-4^-f-4^-d
+-f-4>-f-4^-0;759634576394-f-4^-f-4-4^-f-4^-4
+-f-4^-f>4^-4-f-f-4^-f-4-4^-f-4^-d
+-f-4>-f-4^-0;7-f-4^-f-4-4^-f-4^-4
+-f-4^-f>4^-4-f-b-4^-f-4-4^-f-4^-d
+-f-4>-f-4^-0;7454-f-4^-f-4-4^-f-4^-4
+-f-4^-f>4^-4-f-f-4^-f-4-4^-f-4^-d
+-f-4>-f-4^-0;75576394.3946587934658364894^-4-f-f-4^-f-4-4-4^-f-4-4^-f-4^-4
+-f*.^-f>4^-4-f-b-4^-f-4-4^-f-4^-d
+-f-4>-f-4^-0;759634576394-f-4^-f-4-4^-f-4^-4
+-f-4^-f>4^-4-f-f-4^-f-4-4^-f-4^-d
+-f-4>-f-4^-0;7-f-4^-f-4-4^-f-4^-4
+-f-4^-f>4^-4-f-b-4^-f-4-4^-f-4^-d
+-f-4>-f-4^-0;74576394-f-4^-f-4-4^-f-4^-4
+-f-4^-f>4^-4-f-f4^-f-4-4^-f-4^-d
+-f-4>-f-B^-0;75576394.3946587934658364894^-4-f-f-4^-f-4-4^-W-4^-d
diff --git a/tests/bc/errors/03.txt b/tests/bc/errors/03.txt
new file mode 100644
index 000000000000..25fee2fa07fe
--- /dev/null
+++ b/tests/bc/errors/03.txt
@@ -0,0 +1,2 @@
+for (i = 0; ; )
+for (i = 0; ;(ssqrt()-p(srt()-s(ssqrt()-p(sstss(ssqrt()-p(ssssq(ssqrt()-p(ssqrt()-sst()-p(qrt()-p(s()-p(sq(ssqrt()-p(ssqrt()-sst()-p(qrt()-p(s(ssqrt()-p(t()-p(sstp(ssqrt()-sst()-p(qrt()-p(s()-p(srt()-s(ssqrt()-v(qrt(ssqrt()-p(ssqrt()-s(ssqrt()-p(ssssq(ssqrt()-p(ssq(ssqrt()-p(t()-sst()-prt()-s(ssqrt()-p(q(ssqrt()-p(ssqrt()-sst()-ssqrt()-t(ss(s()-p(srt()-s(ssqrt()-p(s(ssqrtt()-p(ssqrt()-sst()-p(qrt()-p(s()-p(srt()-s(ssqrt()-p(sstss(ssqrt()-p(qr (itt()-p(q(s(ssqrt()-t(ss(ssqrt()-p(srt()-s(ssqrt()-p(sstss(ssqrt()-p(sstsq(ssqrt()-p(ssqrt()-sst()-p(qrt()-p(s()-p(srt()-s(ssqrt()-p(sstss(ssqrt()-p(sstsq(ssqrt()-p(ssqrt()-sst()-p(qrt()-p(s(ssqrt()-p(t()-p(sstp(ssqrt()-sst()-p(qrt()-p(s()-p(srt()-s(ssqrt()-p(sstss(ssqrt()-p(qr (itt()-p(q(s(ssqrt()-t(ss(ssqrt()-p(srt()-s(ssqrt()-p(sstss(ssqrt()-p(sstsq(ssqrt()-p(ssqrt()-sst()-p(qrt()-p(s()-p(srt()-s(ssqrt()-p(sstss(osqrt()-p(sstsq(ssqrt()-p(ssqrt()-sst()-p(qrt()-p(s(ssqrt()-p(ssqrt()-sstfor (itt()-p(q(s(ssqrt()-t(ss(ssqrt()-p(srt()-s(ssqrt()-p(sstss(sssq(ssqrt()-p(ssqrt()-sst()-prt()-s(ssqrt()-p(q(ssqrt()-ssqrt(qrt()-p(s()-p(srt(s(ssqrt()-p(q(ssqrt()-p(ssqrt()-sst()-p(qrt()-p(s(ssqrt()-p(ssqrt()-sst()-p(ssqrt()-ssq(ssqrt()-p(ssqrt()-sst()-p(qrt()-p(s-t()-s(ssurt()-p(sstss(ssqrt()-p(qr (itt()-p(q(s(ssqrt()-t(ss(ssqrt()-p(srt()-s(ssqrt()-p(sstss(ssqrt()-p(sstsq(ssqrt()-p(ssqrt()-sst()-p(qrt()-p(s()-p(srt()-s(ssqrt()-p(sstss(osqrt()-p(sstsq(ssqrt()-p(ssqrt()-sst()-p(qrt()-p(s(ssqrt()-p(ssqrt()-sstfor (itt()-p(q(s(ssqrt()-t(ss(ssqrt()-p(srt()-s(ssqrt()-p(sstss(sssq(ssqrt()-p(ssqrt()-sst()-prt()-s(ssqrt()-p(q(ssqrt()-ssqrt(qrt()-p(s()-p(srt(s(ssqrt()-p(q(ssqrt()-p(ssqrt()-sst()-p(qrt()-p(s(ssqrt()-p(ssqrt()-sst()-p(ssqrt()-ssq(ssqrt()-p(ssqrt()-sst()-p(qrt()-p(s-p(ssqrt()-sst()-p(qrt()-p(s(st()-p(srt()-s(ssqrt()-p(sstss(ssqrt()-p(ssssq(ssqrt()-p(ssqrt()-sst()-p(qrt()-p(s()-p(srt()-s(ssqrt()-p(sstss(ssqrt()-p(ssssq(ssqrt()-p(ssqrt()-sst()-p(qrtrrrrr()-p(s(ssqrt()-p(ssqrt()-sst()-p(ssqrt(qrt(ssqrt()-p(ssqrt()-s(ssqrt()-p(ssssq(ssqrt()-p(ssq(ssqrt()-p(ssqrt()-sst()-prt()-s(ssqrt()-p(q(ssqrt()-p(ssqrt()-sst()-ssqrt()-t(ss(s()-p(srt()-s(ssqrt()-p(s(ssqrtt()-p()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))()%t(ss(s()-p(srt()))))))))))))))))))))))t()Cp(q(s(ssqrt()-t(ss(ssqrt()-p(srt()-s(ssqrt()-p(srt()-p(ssqrt()-sst=)-p(qrt()-p(s(t()-p(qrt()-p(s(ssqrt()-p(ssqrt()-sst()-p(ssqrt(qrt(ssqrt()-p(ssqrt()-s(ssqrt()-p(ssts*=!dd_ed0;#239
diff --git a/tests/bc/errors/04.txt b/tests/bc/errors/04.txt
new file mode 100644
index 000000000000..bb81925f15a4
--- /dev/null
+++ b/tests/bc/errors/04.txt
@@ -0,0 +1 @@
+"String
diff --git a/tests/bc/errors/05.txt b/tests/bc/errors/05.txt
new file mode 100644
index 000000000000..dd4f3dfce14c
--- /dev/null
+++ b/tests/bc/errors/05.txt
@@ -0,0 +1 @@
+/* Comment
diff --git a/tests/bc/errors/06.txt b/tests/bc/errors/06.txt
new file mode 100644
index 000000000000..29fe6be37021
--- /dev/null
+++ b/tests/bc/errors/06.txt
@@ -0,0 +1 @@
+while (i == 0) {
diff --git a/tests/bc/errors/07.txt b/tests/bc/errors/07.txt
new file mode 100644
index 000000000000..7cc293a73d8b
--- /dev/null
+++ b/tests/bc/errors/07.txt
@@ -0,0 +1,36 @@
+for (q = F; i <=020; ++i) # i
+{print "n"
+if(6)if(6){3
+ }
+{pryn}
+"" }
+{pryn}
+{print "" "" }
+{pryn}
+{print "" "" }
+{pryn}
+{print "" "" }
+{pryn}
+ "" }
+{pryn}
+{print "" "" }
+{pryn}
+{print "" "" }
+{tryn}
+{print "" "" }
+{print "" "" }
+{pryn}
+{print "" "" }
+{pryn}
+{print "" "" }
+{pryn}
+ "" }
+{prynn}
+{print "" "" }
+{print "" "" }
+{pryn}
+{print "" "" }
+{pryn}
+{print "" "" }
+{pryn}
+ "" }
diff --git a/tests/bc/errors/08.txt b/tests/bc/errors/08.txt
new file mode 100644
index 000000000000..6b36864add91
--- /dev/null
+++ b/tests/bc/errors/08.txt
@@ -0,0 +1,3 @@
+define i(x) {
+c673
+if(267)}
diff --git a/tests/bc/errors/09.txt b/tests/bc/errors/09.txt
new file mode 100644
index 000000000000..9558d1b4a2bc
--- /dev/null
+++ b/tests/bc/errors/09.txt
@@ -0,0 +1,18 @@
+de
+-1\
+#^ - 74 aA; ++i)
+{print "n"
+if(1)if(1)#3
+}
+if(0)if(1){3
+}
+else 4\
+#^ - 74 aA; ++i)f(1)if(1){3
+}
+if(0)if(1){3
+}
+else 4
+if(0){if(1){3
+}}
+elqe else}
+if(
diff --git a/tests/bc/errors/10.txt b/tests/bc/errors/10.txt
new file mode 100644
index 000000000000..44530b49f9cc
--- /dev/null
+++ b/tests/bc/errors/10.txt
@@ -0,0 +1,13 @@
+defi$++
+--x
+x += 9
+x
+length(2381)
+strt(9(çsbale(238.1)
+x=2
+x[0]=3
+(x)
+(x[p])*)scale)
+(ibase)
+(o
+--x \ No newline at end of file
diff --git a/tests/bc/errors/11.txt b/tests/bc/errors/11.txt
new file mode 100644
index 000000000000..94be82ee3d05
--- /dev/null
+++ b/tests/bc/errors/11.txt
@@ -0,0 +1,408 @@
+#! /usr/bin/bc -q
+
+define printarray(a[], len) {
+
+ auto i
+
+ for (i = 0; i < len; ++i) {
+ a[i]
+ }
+}
+
+define a2(a[], len) {
+
+ auto i
+
+ for (i = 0; i < len; ++i) {
+ a[i] = a[i] * a[i]
+ }
+
+ printarray(len, len)
+}
+
+define a4(a__[], len) {
+
+ auto i
+
+ for (i = 0; i < len; ++i) {
+ a__[i] = a__[i] * a__[i]
+ }
+
+ printarray(a__[], len)
+}
+
+define a6(*a__[], len) {
+
+ auto i
+
+ for (i = 0; i < len; ++i) {
+ a__[i] = a__[i] * a__[i]
+ }
+
+ printarray(a__[], len)
+}
+
+define a1(*a[], len) {
+
+ auto i
+
+ for (i = 0; i < len; ++i) {
+ a[i] = i
+ }
+
+ a2(a[], len)
+
+ printarray(a[], len)
+}
+
+define a3(*a__[], len) {
+
+ auto i
+
+ for (i = 0; i < len; ++i) {
+ a__[i] = i
+ }
+
+ a4(a__[], len)
+
+ printarray(a__[], len)
+}
+
+define a5(*a__[], len) {
+
+ auto i
+
+ for (i = 0; i < len; ++i) {
+ a__[i] = i
+ }
+
+ a2(a__[], len)
+
+ printarray(a__[], len)
+}
+
+define a7(*a__[], len) {
+
+ auto i
+
+ for (i = 0; i < len; ++i) {
+ a__[i] = i
+ }
+
+ a6(a__[], len)
+
+ printarray(a__[], len)
+}
+
+len = 16
+
+a1(a[], len)
+printarray(a[], len)
+a3(a[], len)
+printarray(a[], len)
+a5(a[], len)
+printarray(a[], len)
+a7(a[], len)
+printarray(a[], len)
+
+a1(b[], len)
+printarray(b[], len)
+a3(b[], len)
+printarray(b[], len)
+a5(b[], len)
+printarray(b[], len)
+a7(b[], len)
+printarray(b[], len)
+
+a1[0] = 0
+a2[0] = 0
+a3[0] = 0
+a4[0] = 0
+a5[0] = 0
+a6[0] = 0
+a7[0] = 0
+a8[0] = 0
+a9[0] = 0
+a10[0] = 0
+a11[0] = 0
+a12[0] = 0
+a13[0] = 0
+a14[0] = 0
+a15[0] = 0
+a16[0] = 0
+a17[0] = 0
+a18[0] = 0
+a19[0] = 0
+a20[0] = 0
+a21[0] = 0
+a22[0] = 0
+a23[0] = 0
+a24[0] = 0
+a25[0] = 0
+a26[0] = 0
+a27[0] = 0
+a28[0] = 0
+a29[0] = 0
+a30[0] = 0
+a31[0] = 0
+a32[0] = 0
+a33[0] = 0
+a34[0] = 0
+a35[0] = 0
+a36[0] = 0
+a37[0] = 0
+a38[0] = 0
+a39[0] = 0
+a40[0] = 0
+a41[0] = 0
+a42[0] = 0
+a43[0] = 0
+a44[0] = 0
+a45[0] = 0
+a46[0] = 0
+a47[0] = 0
+a48[0] = 0
+a49[0] = 0
+a50[0] = 0
+a51[0] = 0
+a52[0] = 0
+a53[0] = 0
+a54[0] = 0
+a55[0] = 0
+a56[0] = 0
+a57[0] = 0
+a58[0] = 0
+a59[0] = 0
+a60[0] = 0
+a61[0] = 0
+a62[0] = 0
+a63[0] = 0
+a64[0] = 0
+a65[0] = 0
+a66[0] = 0
+a67[0] = 0
+a68[0] = 0
+a69[0] = 0
+a70[0] = 0
+a71[0] = 0
+a72[0] = 0
+a73[0] = 0
+a74[0] = 0
+a75[0] = 0
+a76[0] = 0
+a77[0] = 0
+a78[0] = 0
+a79[0] = 0
+a80[0] = 0
+a81[0] = 0
+a82[0] = 0
+a83[0] = 0
+a84[0] = 0
+a85[0] = 0
+a86[0] = 0
+a87[0] = 0
+a88[0] = 0
+a89[0] = 0
+a90[0] = 0
+a91[0] = 0
+a92[0] = 0
+a93[0] = 0
+a94[0] = 0
+a95[0] = 0
+a96[0] = 0
+a97[0] = 0
+a98[0] = 0
+a99[0] = 0
+a100[0] = 0
+a101[0] = 0
+a102[0] = 0
+a103[0] = 0
+a104[0] = 0
+a105[0] = 0
+a106[0] = 0
+a107[0] = 0
+a108[0] = 0
+a109[0] = 0
+a110[0] = 0
+a111[0] = 0
+a112[0] = 0
+a113[0] = 0
+a114[0] = 0
+a115[0] = 0
+a116[0] = 0
+a117[0] = 0
+a118[0] = 0
+a119[0] = 0
+a120[0] = 0
+a121[0] = 0
+a122[0] = 0
+a123[0] = 0
+a124[0] = 0
+a125[0] = 0
+a126[0] = 0
+a127[0] = 0
+a128[0] = 0
+a129[0] = 0
+a130[0] = 0
+a131[0] = 0
+a132[0] = 0
+a133[0] = 0
+a134[0] = 0
+a135[0] = 0
+a136[0] = 0
+a137[0] = 0
+a138[0] = 0
+a139[0] = 0
+a140[0] = 0
+a141[0] = 0
+a142[0] = 0
+a143[0] = 0
+a144[0] = 0
+a145[0] = 0
+a146[0] = 0
+a147[0] = 0
+a148[0] = 0
+a149[0] = 0
+a150[0] = 0
+a151[0] = 0
+a152[0] = 0
+a153[0] = 0
+a154[0] = 0
+a155[0] = 0
+a156[0] = 0
+a157[0] = 0
+a158[0] = 0
+a159[0] = 0
+a160[0] = 0
+a161[0] = 0
+a162[0] = 0
+a163[0] = 0
+a164[0] = 0
+a165[0] = 0
+a166[0] = 0
+a167[0] = 0
+a168[0] = 0
+a169[0] = 0
+a170[0] = 0
+a171[0] = 0
+a172[0] = 0
+a173[0] = 0
+a174[0] = 0
+a175[0] = 0
+a176[0] = 0
+a177[0] = 0
+a178[0] = 0
+a179[0] = 0
+a180[0] = 0
+a181[0] = 0
+a182[0] = 0
+a183[0] = 0
+a184[0] = 0
+a185[0] = 0
+a186[0] = 0
+a187[0] = 0
+a188[0] = 0
+a189[0] = 0
+a190[0] = 0
+a191[0] = 0
+a192[0] = 0
+a193[0] = 0
+a194[0] = 0
+a195[0] = 0
+a196[0] = 0
+a197[0] = 0
+a198[0] = 0
+a199[0] = 0
+a200[0] = 0
+a201[0] = 0
+a202[0] = 0
+a203[0] = 0
+a204[0] = 0
+a205[0] = 0
+a206[0] = 0
+a207[0] = 0
+a208[0] = 0
+a209[0] = 0
+a210[0] = 0
+a211[0] = 0
+a212[0] = 0
+a213[0] = 0
+a214[0] = 0
+a215[0] = 0
+a216[0] = 0
+a217[0] = 0
+a218[0] = 0
+a219[0] = 0
+a220[0] = 0
+a221[0] = 0
+a222[0] = 0
+a223[0] = 0
+a224[0] = 0
+a225[0] = 0
+a226[0] = 0
+a227[0] = 0
+a228[0] = 0
+a229[0] = 0
+a230[0] = 0
+a231[0] = 0
+a232[0] = 0
+a233[0] = 0
+a234[0] = 0
+a235[0] = 0
+a236[0] = 0
+a237[0] = 0
+a238[0] = 0
+a239[0] = 0
+a240[0] = 0
+a241[0] = 0
+a242[0] = 0
+a243[0] = 0
+a244[0] = 0
+a245[0] = 0
+a246[0] = 0
+a247[0] = 0
+a248[0] = 0
+a249[0] = 0
+a250[0] = 0
+a251[0] = 0
+a252[0] = 0
+a253[0] = 0
+a254[0] = 0
+a255[0] = 0
+a256[0] = 0
+
+a1(a253[], len)
+printarray(a253[], len)
+a3(a253[], len)
+printarray(a253[], len)
+a5(a253[], len)
+printarray(a253[], len)
+a7(a253[], len)
+printarray(a253[], len)
+
+a1(a254[], len)
+printarray(a254[], len)
+a3(a254[], len)
+printarray(a254[], len)
+a5(a254[], len)
+printarray(a254[], len)
+a7(a254[], len)
+printarray(a254[], len)
+
+a1(a255[], len)
+printarray(a255[], len)
+a3(a255[], len)
+printarray(a255[], len)
+a5(a255[], len)
+printarray(a255[], len)
+a7(a255[], len)
+printarray(a255[], len)
+
+a1(a256[], len)
+printarray(a256[], len)
+a3(a256[], len)
+printarray(a256[], len)
+a5(a256[], len)
+printarray(a256[], len)
+a7(a256[], len)
+printarray(a256[], len)
diff --git a/tests/bc/errors/12.txt b/tests/bc/errors/12.txt
new file mode 100644
index 000000000000..b08b4cb70fa2
--- /dev/null
+++ b/tests/bc/errors/12.txt
@@ -0,0 +1,3 @@
+for (v ;!j -90-90; ++i)
+x1da= ibase ++;1
+'.2
diff --git a/tests/bc/errors/13.txt b/tests/bc/errors/13.txt
new file mode 100644
index 000000000000..5e22841d6916
--- /dev/null
+++ b/tests/bc/errors/13.txt
@@ -0,0 +1,57 @@
+#! /usr/bin/bc -q
+
+define z(a[]) {
+ for (i = 0; i < l; ++i) {
+ a[i]
+ }
+}
+
+define x(a[]) {
+
+ # Test for separate vars and arrays.
+ auto a
+
+ for (a = 0; a < l; ++a) {
+ a[a] = -a
+ }
+
+ z(a[])
+}
+
+define g(x[], y[]) {
+ return x[0] - y[0]
+}
+
+define h(uto, x[]) {
+ return g(x[], y[])
+}
+
+define m(*x[], *y[]) {
+ return x[0] / y[0]
+}
+
+define n(*y[], *x[]) {
+ return m(x[], y[])
+}
+
+for (i = 0; i < 101; ++i) {
+ a[i] = i
+}
+
+a[104] = 204
+
+l = length(a[])
+
+for (i = 0; i <= l; ++i) {
+ a[i]
+}
+
+z(a[])
+x(a[])
+z(a[])
+l
+
+x[0] = 5
+y[0] = 4
+
+h(x[], y[])
diff --git a/tests/bc/errors/14.txt b/tests/bc/errors/14.txt
new file mode 100644
index 000000000000..b014e310dd41
--- /dev/null
+++ b/tests/bc/errors/14.txt
@@ -0,0 +1 @@
+a(int32(O143483647))
diff --git a/tests/bc/errors/15.txt b/tests/bc/errors/15.txt
new file mode 100644
index 000000000000..cf1f81dfb005
--- /dev/null
+++ b/tests/bc/errors/15.txt
@@ -0,0 +1,3 @@
+for (i = 0; int32(29834); ++i) {
+ i
+}
diff --git a/tests/bc/errors/16.txt b/tests/bc/errors/16.txt
new file mode 100644
index 000000000000..00a258400871
--- /dev/null
+++ b/tests/bc/errors/16.txt
@@ -0,0 +1 @@
+"\ \ No newline at end of file
diff --git a/tests/bc/errors/17.txt b/tests/bc/errors/17.txt
new file mode 100644
index 000000000000..3f861a018772
--- /dev/null
+++ b/tests/bc/errors/17.txt
@@ -0,0 +1,313 @@
+print "Gathering array...\n"
+
+s = seed
+
+sum = 0
+
+for (i = 0; i < 100; ++i) {
+ a[i] = rand()
+ sum += a[i]
+ b[i] = irand(sum)
+}
+
+print "Testing implementation...\n"
+
+if (maxrand() >= 2^64 - 1) {
+
+ seed = 54.86785590782347282592869373784717814475564948862907968939159536927733440\
+ 901359008180088183692646452982444316148757934570312500000
+
+ ibase = G
+ obase = G
+
+ for (i = 0; i < 64; ++i) {
+ rand()
+ }
+
+ 7B47F409
+ BA1D3330
+ 83D2F293
+ BFA4784B
+ CBED606E
+ BFC6A3AD
+ 812FFF6D
+ E61F305A
+ F9384B90
+ 32DB86FE
+ 1DC035F9
+ ED786826
+ 3822441D
+ 2BA113D7
+ 1C5B818B
+ A233956A
+ 84DA65E3
+ CED67292
+ B2C0FE06
+ 91817130
+
+ 55FE8917
+ 47E92091
+ 486AF299
+ B1E882BB
+ C261E845
+ 1A9B90F6
+ 7964E884
+ 5F36D7A4
+ 1EE2052D
+ 8519F5D5
+ 293D4E4F
+ 6D8F99FC
+ C3421509
+ A06CD7C6
+ E43064D3
+ E20F9BF0
+ 401B50B7
+ 8EF1FF3E
+ E357E2B2
+ A4AEEE37
+
+ 2AD4426A
+ 9D11BE94
+ 7290C556
+ 6E6F3787
+ 050C2EE3
+ 4FD73703
+ C6FF478B
+ 4B1CA1E1
+ 1654EA91
+ CD08B2F2
+ F7FF3DA8
+ 78B1B8DA
+ A100602C
+ 9588585F
+ DA028873
+ 66B4F376
+ 0E6B4B9A
+ 48167094
+ 0D58CDA0
+ 8F7238BE
+
+ F79983F3
+ 07E5D324
+ AD78DF52
+ 1532BA74
+ 1E4899E2
+ 6C75DF64
+ 171DDC36
+ F2D8D74A
+ 24E6D907
+ 4780FD32
+ 9ADF408C
+ A25544CF
+ EFC6A738
+ 1AA23A54
+ C5A13EBB
+ F739EDC9
+ C3A015FA
+ 3D5E1511
+ AFC4D7FB
+ 3F413B5E
+
+ 4660CB73
+ 88FC773F
+ D6BED59C
+ 63B3B54A
+ D67D3DDE
+ 23394F8B
+ 13384B44
+ DD8B3ABC
+ FF59A21E
+ 3BB16D7E
+ 6E01CB68
+ EC34790E
+ B26C42AD
+ D723C830
+ DFD10FCA
+ 7E362AA1
+ 826FF323
+ CB8F63B5
+ 9B3227E5
+ 9A61E339
+}
+else {
+
+ ibase = G
+ obase = G
+
+ 86B1DA1D72062B68
+ 1304AA46C9853D39
+ A3670E9E0DD50358
+ F9090E529A7DAE00
+ C85B9FD837996F2C
+ 606121F8E3919196
+ 7CE1C7FF478354BA
+ CBC4AC70E541310E
+ 74BE71999EC37F2C
+ B81F9C99A934F1A7
+ 120E9901A900C97F
+ 0F983BAD4B19F493
+ 5934619363660D96
+ D5A7FE2717A2014E
+ 6E437241C9E6676E
+ 6A75C9DD6329CD29
+ 2D9E477683673437
+ 51FB0CF3D4405437
+ 217BB90392D08B20
+ 47C528A018B07A82
+
+ 1B4E474C418C835E
+ BDB2BDA74A119ED6
+ C6DB79D0B9E43493
+ C3CF4834E94A41D1
+ AB8312FC7877C7DC
+ 094B108133E8B5EC
+ 37CA97AC830113BD
+ EF02D7347F9192BF
+ 959517DD9896C53A
+ 7A80EB7629EFE9F9
+ AE53C23F2B1CF57C
+ CA605CD189F6D5CD
+ 921C2704886A9622
+ B68C9FBF826AF7AA
+ 73F8C733124772C3
+ 6B57F7E459EFBCDF
+ 9DE7696DDB6B8E18
+ 02CA67560DC26877
+ A24E353080777DEC
+ 4D600156763FD65C
+
+ 5CDF9C7E26DD2C38
+ 6A32443BBBB16774
+ 3D8415FFECFB8B7F
+ 3090ED9C47@6
+ 6DBF241361C3E652
+ 2CA9EF5A2AD971FC
+ 44FBE937A1CF0FFC
+ DB17CF0577CB7853
+ AA3747D98D31B24C
+ 5D9A104C5D7F43F7
+ BAE65E3E293B2C7B
+ 16A396F0DB4EF984
+ 6DD2BACDC4445A05
+ 7B7A13D1858E5CA8
+ F73722BCAA52447C
+ 31A2C7BBE77CBA00
+ 7FC8AF9003BA1ACE
+ 5703F11DD3F235EF
+ FA1952267EF836C7
+ BBFA558C9E2D51E2
+
+ 3A29661D8145AF36
+ 608DEA6358DABD7C
+ 9E34E9E53431B447
+ 325A05E35EA524EB
+ 63A87CCF0C80ABB1
+ 8EA183287A46F292
+ E2AA5F119CBF2A08
+ 2F3BEB0DE8B730C8
+ 4B8006A928CF8F5B
+ 57B8BA85069C201C
+ 3422D962DDF59474
+ FD744940BA7366A1
+ 23D24B06B5DA4F6F
+ AA187C608319D1DC
+ DC60CA6FEA738B8A
+ C9FC61DF96A769FE
+ 82E2457708658A20
+ 2BECEC9B3E7D93EC
+ 1340DAEC04588952
+ F533446AD5C50B1D
+
+ 31FD1C7F434A62CE
+ D16DAEDD1F281A39
+ 6B5D9648931D7057
+ 62FEE3392DBB06D5
+ 0358BC87B00DF25A
+ F3C882D22946175D
+ 65BA8F11B4516EFE
+ 2DA5A96E626DA4FE
+ DCC669F4CD6121F0
+ 7A47FAC054319CA2
+ 9661CFEE277284C8
+ 01E483A14F4EB23A
+ ADDC115507390607
+ 5AB47C343BD3B0BD
+ 4882FB3A3957B11F
+ 615B7C9C3626DD44
+ F79CF49562969219
+ 88C32C194EA78D27
+ DA8AFFE1353FF352
+ A7A3C331A64CB146
+
+ ibase = A
+
+ seed = 54.0950779151573258314404657465246373249101452529430389404296875000
+
+ ibase = G
+
+ for (i = 0; i < 64; ++i) {
+ rand()
+ }
+}
+
+print "Testing array...\n"
+
+ibase = A
+
+seed = s
+
+sum = 0
+
+for (i = 0; i < 100; ++i) {
+ a[i] == rand()
+ sum += a[i]
+ b[i] == irand(sum)
+}
+
+print "Exercising irand()...\n"
+
+scale = 256
+
+pow = (maxrand() + 1) ^ 4
+s =!2^256 + 2^128 + (irand(pow) / pow)
+seed = s
+seed < s
+
+s = -459.125
+seed = s
+seed == -s
+
+irand(0)
+irand(1)
+seed == -s
+irand(maxrand() + 1) <= maxrand()
+
+for (i = 0; i < 200; ++i) {
+ irand(20) < 20
+}
+
+seed = 738
+seed != 738
+
+s = 2398@0625
+seed = s
+seed != s
+
+pow = (maxrand() + 1) ^ 4
+s = 2^2560 + 2^128 + (irand(pow) / pow)
+seed = s
+seed < s
+
+b = 0
+m = maxrand() + 1
+n = m + 1
+
+for (i = 0; !b && i < 100; ++i) {
+ c = irand(n)
+ b = (c != 0 && c != m)
+ if (c >= n) print "irand() result is too large.\n"
+}
+
+b
+
+sqrt(-1)
diff --git a/tests/bc/errors/18.txt b/tests/bc/errors/18.txt
new file mode 100644
index 000000000000..18cde714e872
--- /dev/null
+++ b/tests/bc/errors/18.txt
@@ -0,0 +1,7 @@
+while (1) {
+
+define x(x) {
+ return x
+}
+
+}
diff --git a/tests/bc/errors/19.txt b/tests/bc/errors/19.txt
new file mode 100644
index 000000000000..bc2cf3a91eb5
--- /dev/null
+++ b/tests/bc/errors/19.txt
@@ -0,0 +1,16 @@
+define i(x) {
+
+i(11)
+ibase
+o(12)`ase
+}
+
+define o(x) {
+ñnbase=x
+ return obage
+}i(11)
+ibase
+_(12)
+obase
+r(15)
+sMale
diff --git a/tests/bc/errors/20.txt b/tests/bc/errors/20.txt
new file mode 100644
index 000000000000..db1908537a0b
--- /dev/null
+++ b/tests/bc/errors/20.txt
@@ -0,0 +1,68 @@
+define w() { auto z; return 1; }
+define x() {
+ "x"
+ return (1)
+}
+define y() {
+ "y"
+ return (2)
+}
+define z() {
+ "z"
+ return (3)
+}
+
+define v() { return }
+
+v()
+
+w()
+
+if (x() == y()) { 1 }
+1
+if (x() <= y()) { 2 }
+if (y() >= x()) { 3 }
+if (x() != y()) { 4 }
+if (x() < y()) { 5 }
+if (y() > x()) { 6 }
+
+if (x() == z()) { 11 }
+11
+if (x() <= z()) { 12 }
+if (z() >= x()) { 13 }
+if (x() != z()) { 14 }
+if (x() < z()) { 15 }
+if (z() > x()) { 16 }
+
+x = -10
+while (x <= 0) {
+ x
+ if (x == -5) break;
+ x += 1
+}
+
+define u() {
+ auto a[];
+ return a[H]
+}
+
+u()
+
+if (x == -4) x
+else x - (i += 1) print "true\ÿÿÿlse print "fal"
+
+i = ÿÿÿhile (i -= 2) print "i: ", i += 1, "\n"
+
+a = 5
+
+for (i = 5; i-= 1; --a) print "i: ", i, "; a: ", a, "\n"
+
+define void t(x, y) {
+ print "x: ", x, "; y: ", y, "\n"
+}
+
+t(i++, i++
+i
+
+t(++i, ++i)
+i
diff --git a/tests/bc/errors/21.txt b/tests/bc/errors/21.txt
new file mode 100644
index 000000000000..12d08653d9b5
--- /dev/null
+++ b/tests/bc/errors/21.txt
Binary files differ
diff --git a/tests/bc/errors/22.txt b/tests/bc/errors/22.txt
new file mode 100644
index 000000000000..07ed133da930
--- /dev/null
+++ b/tests/bc/errors/22.txt
@@ -0,0 +1,5 @@
+#! /\yefine z(a[]) {
+ for (i = 0; i < M; ++i) leiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii= length(aiiiiiiiiiii= l[])
+
+for (i = 0; i <= l\yefine z(a[]) {
+ \ No newline at end of file
diff --git a/tests/bc/exponent.txt b/tests/bc/exponent.txt
new file mode 100644
index 000000000000..40bcf3c5a585
--- /dev/null
+++ b/tests/bc/exponent.txt
@@ -0,0 +1,22 @@
+e(0)
+e(0.5)
+e(1)
+e(1.5)
+e(1.74)
+e(2)
+e(3.2345)
+e(5.283957)
+e(13.23857)
+e(100)
+e(283.238957)
+e(-0.5)
+e(-1)
+e(-1.5)
+e(-1.74)
+e(-2)
+e(-3.2345)
+e(-5.283957)
+e(-13.23857)
+e(-100)
+e(-283.238957)
+e(142.749502399)
diff --git a/tests/bc/exponent_results.txt b/tests/bc/exponent_results.txt
new file mode 100644
index 000000000000..a1f1fe2b4cfb
--- /dev/null
+++ b/tests/bc/exponent_results.txt
@@ -0,0 +1,25 @@
+1.00000000000000000000
+1.64872127070012814684
+2.71828182845904523536
+4.48168907033806482260
+5.69734342267199101193
+7.38905609893065022723
+25.39367176822616278859
+197.14845034328553587817
+561613.96621445383501864766
+26881171418161354484126255515800135873611118.77374192241519160861
+10212124131159922810249757193864245307850725332411569566443792548720\
+75182918653384240389953781407569563117008113027037939783.70141667971\
+570827872
+.60653065971263342360
+.36787944117144232159
+.22313016014842982893
+.17552040061699687169
+.13533528323661269189
+.03937988996342191888
+.00507231985977442865
+.00000178058250000525
+0
+0
+98928445824097165243611240348236907682258759298273030827411201.25833\
+645622510213538
diff --git a/tests/bc/functions.txt b/tests/bc/functions.txt
new file mode 100644
index 000000000000..5e540ed66a11
--- /dev/null
+++ b/tests/bc/functions.txt
@@ -0,0 +1,13 @@
+define x(x, y) {
+ return x - y + 5
+}
+
+define y(y, x) {
+ return x(y, x) + x(x, y)
+}
+
+y(1, 4)
+y(2, 4)
+y(3, 4)
+y(4, 3)
+y(3, 2)
diff --git a/tests/bc/functions_results.txt b/tests/bc/functions_results.txt
new file mode 100644
index 000000000000..f5c1b1de44a4
--- /dev/null
+++ b/tests/bc/functions_results.txt
@@ -0,0 +1,5 @@
+10
+10
+10
+10
+10
diff --git a/tests/bc/globals.txt b/tests/bc/globals.txt
new file mode 100644
index 000000000000..4b20f5725864
--- /dev/null
+++ b/tests/bc/globals.txt
@@ -0,0 +1,21 @@
+define i(x) {
+ ibase=x
+ return ibase
+}
+
+define o(x) {
+ obase=x
+ return obase
+}
+
+define r(x) {
+ scale=x
+ return scale
+}
+
+i(11)
+ibase
+o(12)
+obase
+r(15)
+scale
diff --git a/tests/bc/globals_results.txt b/tests/bc/globals_results.txt
new file mode 100644
index 000000000000..bf756acbe50d
--- /dev/null
+++ b/tests/bc/globals_results.txt
@@ -0,0 +1,6 @@
+11
+11
+10
+10
+13
+13
diff --git a/tests/bc/length.txt b/tests/bc/length.txt
new file mode 100644
index 000000000000..5461f76cbf59
--- /dev/null
+++ b/tests/bc/length.txt
@@ -0,0 +1,129 @@
+length(0)
+length(1)
+length(12)
+length(123)
+length(1234)
+length(12345)
+length(123456)
+length(1234567)
+length(12345678)
+length(123456789)
+length(1234567890)
+length(1.0)
+length(12.0)
+length(123.0)
+length(1234.0)
+length(12345.0)
+length(123456.0)
+length(1234567.0)
+length(12345678.0)
+length(123456789.0)
+length(1234567890.0)
+length(.1)
+length(.12)
+length(.123)
+length(.1234)
+length(.12345)
+length(.123456)
+length(.1234567)
+length(.12345678)
+length(.123456789)
+length(.1234567890)
+length(.01)
+length(.012)
+length(.0123)
+length(.01234)
+length(.012345)
+length(.0123456)
+length(.01234567)
+length(.012345678)
+length(.0123456789)
+length(.01234567890)
+length(.001)
+length(.0012)
+length(.00123)
+length(.001234)
+length(.0012345)
+length(.00123456)
+length(.001234567)
+length(.0012345678)
+length(.00123456789)
+length(.001234567890)
+length(.0001)
+length(.00012)
+length(.000123)
+length(.0001234)
+length(.00012345)
+length(.000123456)
+length(.0001234567)
+length(.00012345678)
+length(.000123456789)
+length(.0001234567890)
+length(.00001)
+length(.000012)
+length(.0000123)
+length(.00001234)
+length(.000012345)
+length(.0000123456)
+length(.00001234567)
+length(.000012345678)
+length(.0000123456789)
+length(.00001234567890)
+length(.000001)
+length(.0000012)
+length(.00000123)
+length(.000001234)
+length(.0000012345)
+length(.00000123456)
+length(.000001234567)
+length(.0000012345678)
+length(.00000123456789)
+length(.000001234567890)
+length(.0000001)
+length(.00000012)
+length(.000000123)
+length(.0000001234)
+length(.00000012345)
+length(.000000123456)
+length(.0000001234567)
+length(.00000012345678)
+length(.000000123456789)
+length(.0000001234567890)
+length(.00000001)
+length(.000000012)
+length(.0000000123)
+length(.00000001234)
+length(.000000012345)
+length(.0000000123456)
+length(.00000001234567)
+length(.000000012345678)
+length(.0000000123456789)
+length(.00000001234567890)
+length(.000000001)
+length(.0000000012)
+length(.00000000123)
+length(.000000001234)
+length(.0000000012345)
+length(.00000000123456)
+length(.000000001234567)
+length(.0000000012345678)
+length(.00000000123456789)
+length(.000000001234567890)
+length(.0000000001)
+length(.00000000012)
+length(.000000000123)
+length(.0000000001234)
+length(.00000000012345)
+length(.000000000123456)
+length(.0000000001234567)
+length(.00000000012345678)
+length(.000000000123456789)
+length(.0000000001234567890)
+length(289.29837)
+length(2893.00000)
+length(289.0)
+length(1802973.0000000238)
+length(.000000000000000093182394080000000000)
+a[0] = 0
+a[5] = 0
+length(a[])
diff --git a/tests/bc/length_results.txt b/tests/bc/length_results.txt
new file mode 100644
index 000000000000..53a58e2be678
--- /dev/null
+++ b/tests/bc/length_results.txt
@@ -0,0 +1,127 @@
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+8
+9
+4
+17
+20
+6
diff --git a/tests/bc/letters.txt b/tests/bc/letters.txt
new file mode 100644
index 000000000000..88993cd26fc4
--- /dev/null
+++ b/tests/bc/letters.txt
@@ -0,0 +1,53 @@
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+O
+P
+Q
+R
+S
+T
+U
+V
+W
+X
+Y
+Z
+AA
+ZZ
+ibase=B
+AA
+AB
+ZZ
+ibase=G
+AA
+AB
+B0
+Y0
+Y1
+YY
+YZ
+ZE
+ZF
+ZG
diff --git a/tests/bc/letters_results.txt b/tests/bc/letters_results.txt
new file mode 100644
index 000000000000..4f052f78c52f
--- /dev/null
+++ b/tests/bc/letters_results.txt
@@ -0,0 +1,51 @@
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+99
+99
+120
+120
+120
+170
+171
+176
+240
+241
+255
+255
+254
+255
+255
diff --git a/tests/bc/lib2.txt b/tests/bc/lib2.txt
new file mode 100644
index 000000000000..9fdf50d06141
--- /dev/null
+++ b/tests/bc/lib2.txt
@@ -0,0 +1,463 @@
+p(2, 8.0000)
+p(2, 8.0001)
+p(2, -8.0001)
+r(0, 0)
+r(0, 1)
+r(0, 100)
+r(1, 0)
+r(1, 3)
+r(1.4, 0)
+r(1.5, 0)
+r(34.45, 2)
+r(64.1223, 4)
+r(283.1983893, 6)
+r(283.1983895, 6)
+r(283.1983899, 6)
+r(99.999999999, 5)
+r(-1, 0)
+r(-1, 3)
+r(-1.4, 0)
+r(-1.5, 0)
+r(-34.45, 2)
+r(-64.1223, 4)
+r(-283.1983893, 6)
+r(-283.1983895, 6)
+r(-283.1983899, 6)
+r(-99.999999999, 5)
+ceil(0, 0)
+ceil(0, 1)
+ceil(0, 100)
+ceil(1, 0)
+ceil(1, 3)
+ceil(1.4, 0)
+ceil(1.5, 0)
+ceil(34.45, 2)
+ceil(64.1223, 4)
+ceil(283.1983893, 6)
+ceil(283.1983895, 6)
+ceil(283.1983899, 6)
+ceil(99.999999999, 5)
+ceil(-1, 0)
+ceil(-1, 3)
+ceil(-1.4, 0)
+ceil(-1.5, 0)
+ceil(-34.45, 2)
+ceil(-64.1223, 4)
+ceil(-283.1983893, 6)
+ceil(-283.1983895, 6)
+ceil(-283.1983899, 6)
+ceil(-99.999999999, 5)
+ceil(8770735.0705156250000000000, 0)
+l2(0)
+l2(1)
+l2(2)
+l2(7)
+l2(7.9999999999999999999999)
+l2(8)
+l10(0)
+l10(1)
+l10(2)
+l10(5)
+l10(9)
+l10(9.999999999999999999999)
+l10(10)
+l10(11)
+l10(99)
+l10(99.99999999999999999999)
+l10(100)
+l2(-1)
+l2(-2)
+l2(-7)
+l2(-7.9999999999999999999999)
+l2(-8)
+l10(-1)
+l10(-2)
+l10(-5)
+l10(-9)
+l10(-9.999999999999999999999)
+l10(-10)
+l10(-11)
+l10(-99)
+l10(-99.99999999999999999999)
+l10(-100)
+cbrt(27)
+cbrt(-27)
+cbrt(4096)
+cbrt(-4096)
+root(16, 4)
+root(3125, 5)
+root(-3125, 5)
+ubytes(0)
+ubytes(1)
+ubytes(2)
+ubytes(254)
+ubytes(255)
+ubytes(256)
+ubytes(65535)
+ubytes(65536)
+ubytes(131072)
+ubytes(4294967295)
+ubytes(4294967296)
+ubytes(18446744073709551615)
+ubytes(18446744073709551616)
+sbytes(0)
+sbytes(1)
+sbytes(-1)
+sbytes(2)
+sbytes(127)
+sbytes(128)
+sbytes(-127)
+sbytes(-128)
+sbytes(-129)
+sbytes(254)
+sbytes(255)
+sbytes(256)
+sbytes(32767)
+sbytes(32768)
+sbytes(-32767)
+sbytes(-32768)
+sbytes(65535)
+sbytes(65536)
+sbytes(131072)
+sbytes(2147483647)
+sbytes(2147483648)
+sbytes(2147483649)
+sbytes(-2147483647)
+sbytes(-2147483648)
+sbytes(-2147483649)
+sbytes(4294967295)
+sbytes(4294967296)
+sbytes(9223372036854775807)
+sbytes(9223372036854775808)
+sbytes(9223372036854775809)
+sbytes(-9223372036854775807)
+sbytes(-9223372036854775808)
+sbytes(-9223372036854775809)
+pi(0)
+pi(1)
+pi(2)
+pi(5)
+pi(100)
+p=pi(100)
+t(0)
+t(1)
+t(-1)
+t(2)
+t(-2)
+t(3)
+t(-3)
+t(p)
+t(-p)
+t(p/2)
+t(-p/2)
+t(p/3)
+t(-p/3)
+t(p/4)
+t(-p/4)
+t(p/5)
+t(-p/5)
+t(p/6)
+t(-p/6)
+t(p/7)
+t(-p/7)
+t(p/8)
+t(-p/8)
+t(p/9)
+t(-p/9)
+t(p/10)
+t(-p/10)
+t(p/15)
+t(-p/15)
+a2(0, 1)
+a2(1, 1)
+a2(2, 1)
+a2(1, 2)
+a2(0, -1)
+a2(1, -1)
+a2(2, -1)
+a2(1, -2)
+a2(-1, 1)
+a2(-2, 1)
+a2(-1, 2)
+a2(-1, -1)
+a2(-2, -1)
+a2(-1, -2)
+a2(1, 0)
+a2(2, 0)
+a2(-1, 0)
+a2(-2, 0)
+r2d(p)
+r2d(2 * p)
+r2d(p / 2)
+r2d(p / 4)
+r2d(p / 3)
+r2d(p / 5)
+r2d(p / 6)
+r2d(p / 10)
+r2d(-p)
+r2d(2 * -p)
+r2d(-p / 2)
+r2d(-p / 4)
+r2d(-p / 3)
+r2d(-p / 5)
+r2d(-p / 6)
+r2d(-p / 10)
+d2r(180)
+d2r(360)
+d2r(90)
+d2r(45)
+d2r(120)
+d2r(72)
+d2r(60)
+d2r(36)
+d2r(-180)
+d2r(-360)
+d2r(-90)
+d2r(-45)
+d2r(-120)
+d2r(-72)
+d2r(-60)
+d2r(-36)
+f(0)
+f(1)
+f(2)
+f(3)
+f(4)
+f(5)
+perm(10, 2)
+comb(10, 2)
+perm(6, 2)
+comb(6, 2)
+perm(12, 10)
+comb(12, 10)
+perm(24, 15)
+comb(24, 15)
+binary(0)
+hex(0)
+binary(1)
+hex(1)
+binary(2)
+hex(2)
+binary(15)
+hex(15)
+binary(16)
+hex(16)
+uint(0)
+int(0)
+uint(1)
+int(1)
+int(-1)
+uint(127)
+int(127)
+int(-127)
+uint(128)
+int(128)
+int(-128)
+uint(129)
+int(129)
+int(-129)
+uint(255)
+int(255)
+int(-255)
+uint(256)
+int(256)
+int(-256)
+uint(32767)
+int(32767)
+int(-32767)
+uint(32768)
+int(32768)
+int(-32768)
+uint(32769)
+int(32769)
+int(-32769)
+uint(65535)
+int(65535)
+int(-65535)
+uint(65536)
+int(65536)
+int(-65536)
+uint(2147483647)
+int(2147483647)
+int(-2147483647)
+uint(2147483648)
+int(2147483648)
+int(-2147483648)
+uint(2147483649)
+int(2147483649)
+int(-2147483649)
+uint(4294967295)
+int(4294967295)
+int(-4294967295)
+uint(4294967296)
+int(4294967296)
+int(-4294967296)
+uint8(0)
+int8(0)
+uint16(0)
+int16(0)
+uint32(0)
+int32(0)
+uint64(0)
+int64(0)
+uint8(1)
+int8(1)
+int8(-1)
+uint16(1)
+int16(1)
+int16(-1)
+uint32(1)
+int32(1)
+int32(-1)
+uint64(1)
+int64(1)
+int64(-1)
+uint8(127)
+int8(127)
+int8(-127)
+uint16(127)
+int16(127)
+int16(-127)
+uint32(127)
+int32(127)
+int32(-127)
+uint64(127)
+int64(127)
+int64(-127)
+uint8(128)
+int8(128)
+int8(-128)
+uint16(128)
+int16(128)
+int16(-128)
+uint32(128)
+int32(128)
+int32(-128)
+uint64(128)
+int64(128)
+int64(-128)
+uint8(129)
+int8(129)
+int8(-129)
+uint16(129)
+int16(129)
+int16(-129)
+uint32(129)
+int32(129)
+int32(-129)
+uint64(129)
+int64(129)
+int64(-129)
+uint8(255)
+int8(255)
+int8(-255)
+uint16(255)
+int16(255)
+int16(-255)
+uint32(255)
+int32(255)
+int32(-255)
+uint64(255)
+int64(255)
+int64(-255)
+uint8(256)
+int8(256)
+int8(-256)
+uint16(256)
+int16(256)
+int16(-256)
+uint32(256)
+int32(256)
+int32(-256)
+uint64(256)
+int64(256)
+int64(-256)
+uint16(32767)
+int16(32767)
+int16(-32767)
+uint32(32767)
+int32(32767)
+int32(-32767)
+uint64(32767)
+int64(32767)
+int64(-32767)
+uint16(32768)
+int16(32768)
+int16(-32768)
+uint32(32768)
+int32(32768)
+int32(-32768)
+uint64(32768)
+int64(32768)
+int64(-32768)
+uint16(32769)
+int16(32769)
+int16(-32769)
+uint32(32769)
+int32(32769)
+int32(-32769)
+uint64(32769)
+int64(32769)
+int64(-32769)
+uint16(65535)
+int16(65535)
+int16(-65535)
+uint32(65535)
+int32(65535)
+int32(-65535)
+uint64(65535)
+int64(65535)
+int64(-65535)
+uint16(65536)
+int16(65536)
+int16(-65536)
+uint32(65536)
+int32(65536)
+int32(-65536)
+uint64(65536)
+int64(65536)
+int64(-65536)
+uint32(2147483647)
+int32(2147483647)
+int32(-2147483647)
+uint64(2147483647)
+int64(2147483647)
+int64(-2147483647)
+uint32(2147483648)
+int32(2147483648)
+int32(-2147483648)
+uint64(2147483648)
+int64(2147483648)
+int64(-2147483648)
+uint32(2147483649)
+int32(2147483649)
+int32(-2147483649)
+uint64(2147483649)
+int64(2147483649)
+int64(-2147483649)
+uint32(4294967295)
+int32(4294967295)
+int32(-4294967295)
+uint64(4294967295)
+int64(4294967295)
+int64(-4294967295)
+uint32(4294967296)
+int32(4294967296)
+int32(-4294967296)
+uint64(4294967296)
+int64(4294967296)
+int64(-4294967296)
+uint(-3)
+uint(3.928375)
+int(4.000000)
+b = brand()
+b < 2
+b >= 0
+i = irand(maxrand() + 1)
+i <= maxrand()
+i >= 0
+f = frand(10)
+scale(f) == 10
+fi = ifrand(123, 28)
+scale(fi) == 28
+fi < 128
diff --git a/tests/bc/lib2_results.txt b/tests/bc/lib2_results.txt
new file mode 100644
index 000000000000..ca5a37cfce0a
--- /dev/null
+++ b/tests/bc/lib2_results.txt
@@ -0,0 +1,698 @@
+256.00000000000000000000
+256.01774518281640169821
+.00390597924876622489
+0
+0
+0
+1
+1.000
+1
+2
+34.45
+64.1223
+283.198389
+283.198390
+283.198390
+100.00000
+-1
+-1.000
+-1
+-2
+-34.45
+-64.1223
+-283.198389
+-283.198390
+-283.198390
+-100.00000
+0
+0
+0
+1
+1.000
+2
+2
+34.45
+64.1223
+283.198390
+283.198390
+283.198390
+100.00000
+-1
+-1.000
+-2
+-2
+-34.45
+-64.1223
+-283.198390
+-283.198390
+-283.198390
+-100.00000
+8770736
+-14426950408889634073599246810018921374265.01964302164603717234
+0
+1.00000000000000000000
+2.80735492205760410744
+2.99999999999999999999
+3.00000000000000000000
+-4342944819032518276511289189166050822943.53857128275332257904
+0
+.30102999566398119521
+.69897000433601880478
+.95424250943932487459
+.99999999999999999999
+1.00000000000000000000
+1.04139268515822504075
+1.99563519459754991534
+1.99999999999999999999
+2.00000000000000000000
+-14426950408889634073599246810018921374265.01964302164603717234
+-14426950408889634073599246810018921374265.01964302164603717234
+-14426950408889634073599246810018921374265.01964302164603717234
+-144269504088896340735992468100189213742664594.88013355604393225658
+-14426950408889634073599246810018921374265.01964302164603717234
+-4342944819032518276511289189166050822943.53857128275332257904
+-4342944819032518276511289189166050822943.53857128275332257904
+-4342944819032518276511289189166050822943.53857128275332257904
+-4342944819032518276511289189166050822943.53857128275332257904
+-434294481903251827651128918916605082294396.66367028674257491242
+-4342944819032518276511289189166050822943.53857128275332257904
+-4342944819032518276511289189166050822943.53857128275332257904
+-4342944819032518276511289189166050822943.53857128275332257904
+-4342944819032518276511289189166050822943.53857128275332257904
+-4342944819032518276511289189166050822943.53857128275332257904
+3.00000000000000000000
+-3.00000000000000000000
+16.00000000000000000000
+-16.00000000000000000000
+2.00000000000000000000
+5.00000000000000000000
+-5.00000000000000000000
+1
+1
+1
+1
+1
+2
+2
+4
+4
+4
+8
+8
+16
+1
+1
+1
+1
+1
+2
+1
+1
+2
+2
+2
+2
+2
+4
+2
+2
+4
+4
+4
+4
+8
+8
+4
+4
+8
+8
+8
+8
+16
+16
+8
+8
+16
+3
+3.1
+3.14
+3.14159
+3.141592653589793238462643383279502884197169399375105820974944592307\
+8164062862089986280348253421170679
+0
+1.55740772465490223050
+-1.55740772465490223050
+-2.18503986326151899164
+2.18503986326151899164
+-.14254654307427780529
+.14254654307427780529
+0
+0
+769230769230769230769.23076923076923076923
+-769230769230769230769.23076923076923076923
+1.73205080756887729351
+-1.73205080756887729351
+.99999999999999999998
+-.99999999999999999998
+.72654252800536088589
+-.72654252800536088589
+.57735026918962576449
+-.57735026918962576449
+.48157461880752864432
+-.48157461880752864432
+.41421356237309504879
+-.41421356237309504879
+.36397023426620236134
+-.36397023426620236134
+.32491969623290632614
+-.32491969623290632614
+.21255656167002212525
+-.21255656167002212525
+0
+.78539816339744830961
+1.10714871779409050301
+.46364760900080611621
+3.14159265358979323846
+2.35619449019234492884
+2.03444393579570273544
+2.67794504458898712224
+-.78539816339744830961
+-1.10714871779409050301
+-.46364760900080611621
+-2.35619449019234492884
+-2.03444393579570273544
+-2.67794504458898712224
+1.57079632679489661923
+1.57079632679489661923
+-1.57079632679489661923
+-1.57079632679489661923
+180.00000000000000000000
+360.00000000000000000000
+89.99999999999999999992
+44.99999999999999999967
+59.99999999999999999975
+35.99999999999999999985
+29.99999999999999999959
+17.99999999999999999964
+-180.00000000000000000000
+-360.00000000000000000000
+-89.99999999999999999992
+-44.99999999999999999967
+-59.99999999999999999975
+-35.99999999999999999985
+-29.99999999999999999959
+-17.99999999999999999964
+3.14159265358979323846
+6.28318530717958647692
+1.57079632679489661923
+.78539816339744830961
+2.09439510239319549230
+1.25663706143591729538
+1.04719755119659774615
+.62831853071795864769
+-3.14159265358979323846
+-6.28318530717958647692
+-1.57079632679489661923
+-.78539816339744830961
+-2.09439510239319549230
+-1.25663706143591729538
+-1.04719755119659774615
+-.62831853071795864769
+1
+1
+2
+6
+24
+120
+90
+45
+30
+15
+239500800
+66
+1709789466857472000
+1307504
+0
+0
+1
+1
+10
+2
+1111
+F
+10000
+10
+00000000
+00
+00000000
+00
+00000001
+01
+00000001
+01
+11111111
+FF
+01111111
+7F
+01111111
+7F
+10000001
+81
+10000000
+80
+00000000 10000000
+00 80
+10000000
+80
+10000001
+81
+00000000 10000001
+00 81
+11111111 01111111
+FF 7F
+11111111
+FF
+00000000 11111111
+00 FF
+11111111 00000001
+FF 01
+00000001 00000000
+01 00
+00000001 00000000
+01 00
+11111111 00000000
+FF 00
+01111111 11111111
+7F FF
+01111111 11111111
+7F FF
+10000000 00000001
+80 01
+10000000 00000000
+80 00
+00000000 00000000 10000000 00000000
+00 00 80 00
+10000000 00000000
+80 00
+10000000 00000001
+80 01
+00000000 00000000 10000000 00000001
+00 00 80 01
+11111111 11111111 01111111 11111111
+FF FF 7F FF
+11111111 11111111
+FF FF
+00000000 00000000 11111111 11111111
+00 00 FF FF
+11111111 11111111 00000000 00000001
+FF FF 00 01
+00000000 00000001 00000000 00000000
+00 01 00 00
+00000000 00000001 00000000 00000000
+00 01 00 00
+11111111 11111111 00000000 00000000
+FF FF 00 00
+01111111 11111111 11111111 11111111
+7F FF FF FF
+01111111 11111111 11111111 11111111
+7F FF FF FF
+10000000 00000000 00000000 00000001
+80 00 00 01
+10000000 00000000 00000000 00000000
+80 00 00 00
+00000000 00000000 00000000 00000000 10000000 00000000 00000000 00000\
+000
+00 00 00 00 80 00 00 00
+10000000 00000000 00000000 00000000
+80 00 00 00
+10000000 00000000 00000000 00000001
+80 00 00 01
+00000000 00000000 00000000 00000000 10000000 00000000 00000000 00000\
+001
+00 00 00 00 80 00 00 01
+11111111 11111111 11111111 11111111 01111111 11111111 11111111 11111\
+111
+FF FF FF FF 7F FF FF FF
+11111111 11111111 11111111 11111111
+FF FF FF FF
+00000000 00000000 00000000 00000000 11111111 11111111 11111111 11111\
+111
+00 00 00 00 FF FF FF FF
+11111111 11111111 11111111 11111111 00000000 00000000 00000000 00000\
+001
+FF FF FF FF 00 00 00 01
+00000000 00000000 00000000 00000001 00000000 00000000 00000000 00000\
+000
+00 00 00 01 00 00 00 00
+00000000 00000000 00000000 00000001 00000000 00000000 00000000 00000\
+000
+00 00 00 01 00 00 00 00
+11111111 11111111 11111111 11111111 00000000 00000000 00000000 00000\
+000
+FF FF FF FF 00 00 00 00
+00000000
+00
+00000000
+00
+00000000 00000000
+00 00
+00000000 00000000
+00 00
+00000000 00000000 00000000 00000000
+00 00 00 00
+00000000 00000000 00000000 00000000
+00 00 00 00
+00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000\
+000
+00 00 00 00 00 00 00 00
+00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000\
+000
+00 00 00 00 00 00 00 00
+00000001
+01
+00000001
+01
+11111111
+FF
+00000000 00000001
+00 01
+00000000 00000001
+00 01
+11111111 11111111
+FF FF
+00000000 00000000 00000000 00000001
+00 00 00 01
+00000000 00000000 00000000 00000001
+00 00 00 01
+11111111 11111111 11111111 11111111
+FF FF FF FF
+00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000\
+001
+00 00 00 00 00 00 00 01
+00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000\
+001
+00 00 00 00 00 00 00 01
+11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111\
+111
+FF FF FF FF FF FF FF FF
+01111111
+7F
+01111111
+7F
+10000001
+81
+00000000 01111111
+00 7F
+00000000 01111111
+00 7F
+11111111 10000001
+FF 81
+00000000 00000000 00000000 01111111
+00 00 00 7F
+00000000 00000000 00000000 01111111
+00 00 00 7F
+11111111 11111111 11111111 10000001
+FF FF FF 81
+00000000 00000000 00000000 00000000 00000000 00000000 00000000 01111\
+111
+00 00 00 00 00 00 00 7F
+00000000 00000000 00000000 00000000 00000000 00000000 00000000 01111\
+111
+00 00 00 00 00 00 00 7F
+11111111 11111111 11111111 11111111 11111111 11111111 11111111 10000\
+001
+FF FF FF FF FF FF FF 81
+10000000
+80
+Error: 128 cannot fit into 1 signed byte(s).
+10000000
+80
+00000000 10000000
+00 80
+00000000 10000000
+00 80
+11111111 10000000
+FF 80
+00000000 00000000 00000000 10000000
+00 00 00 80
+00000000 00000000 00000000 10000000
+00 00 00 80
+11111111 11111111 11111111 10000000
+FF FF FF 80
+00000000 00000000 00000000 00000000 00000000 00000000 00000000 10000\
+000
+00 00 00 00 00 00 00 80
+00000000 00000000 00000000 00000000 00000000 00000000 00000000 10000\
+000
+00 00 00 00 00 00 00 80
+11111111 11111111 11111111 11111111 11111111 11111111 11111111 10000\
+000
+FF FF FF FF FF FF FF 80
+10000001
+81
+Error: 129 cannot fit into 1 signed byte(s).
+Error: -129 cannot fit into 1 signed byte(s).
+00000000 10000001
+00 81
+00000000 10000001
+00 81
+11111111 01111111
+FF 7F
+00000000 00000000 00000000 10000001
+00 00 00 81
+00000000 00000000 00000000 10000001
+00 00 00 81
+11111111 11111111 11111111 01111111
+FF FF FF 7F
+00000000 00000000 00000000 00000000 00000000 00000000 00000000 10000\
+001
+00 00 00 00 00 00 00 81
+00000000 00000000 00000000 00000000 00000000 00000000 00000000 10000\
+001
+00 00 00 00 00 00 00 81
+11111111 11111111 11111111 11111111 11111111 11111111 11111111 01111\
+111
+FF FF FF FF FF FF FF 7F
+11111111
+FF
+Error: 255 cannot fit into 1 signed byte(s).
+Error: -255 cannot fit into 1 signed byte(s).
+00000000 11111111
+00 FF
+00000000 11111111
+00 FF
+11111111 00000001
+FF 01
+00000000 00000000 00000000 11111111
+00 00 00 FF
+00000000 00000000 00000000 11111111
+00 00 00 FF
+11111111 11111111 11111111 00000001
+FF FF FF 01
+00000000 00000000 00000000 00000000 00000000 00000000 00000000 11111\
+111
+00 00 00 00 00 00 00 FF
+00000000 00000000 00000000 00000000 00000000 00000000 00000000 11111\
+111
+00 00 00 00 00 00 00 FF
+11111111 11111111 11111111 11111111 11111111 11111111 11111111 00000\
+001
+FF FF FF FF FF FF FF 01
+Error: 256 cannot fit into 1 unsigned byte(s).
+Error: 256 cannot fit into 1 signed byte(s).
+Error: -256 cannot fit into 1 signed byte(s).
+00000001 00000000
+01 00
+00000001 00000000
+01 00
+11111111 00000000
+FF 00
+00000000 00000000 00000001 00000000
+00 00 01 00
+00000000 00000000 00000001 00000000
+00 00 01 00
+11111111 11111111 11111111 00000000
+FF FF FF 00
+00000000 00000000 00000000 00000000 00000000 00000000 00000001 00000\
+000
+00 00 00 00 00 00 01 00
+00000000 00000000 00000000 00000000 00000000 00000000 00000001 00000\
+000
+00 00 00 00 00 00 01 00
+11111111 11111111 11111111 11111111 11111111 11111111 11111111 00000\
+000
+FF FF FF FF FF FF FF 00
+01111111 11111111
+7F FF
+01111111 11111111
+7F FF
+10000000 00000001
+80 01
+00000000 00000000 01111111 11111111
+00 00 7F FF
+00000000 00000000 01111111 11111111
+00 00 7F FF
+11111111 11111111 10000000 00000001
+FF FF 80 01
+00000000 00000000 00000000 00000000 00000000 00000000 01111111 11111\
+111
+00 00 00 00 00 00 7F FF
+00000000 00000000 00000000 00000000 00000000 00000000 01111111 11111\
+111
+00 00 00 00 00 00 7F FF
+11111111 11111111 11111111 11111111 11111111 11111111 10000000 00000\
+001
+FF FF FF FF FF FF 80 01
+10000000 00000000
+80 00
+Error: 32768 cannot fit into 2 signed byte(s).
+10000000 00000000
+80 00
+00000000 00000000 10000000 00000000
+00 00 80 00
+00000000 00000000 10000000 00000000
+00 00 80 00
+11111111 11111111 10000000 00000000
+FF FF 80 00
+00000000 00000000 00000000 00000000 00000000 00000000 10000000 00000\
+000
+00 00 00 00 00 00 80 00
+00000000 00000000 00000000 00000000 00000000 00000000 10000000 00000\
+000
+00 00 00 00 00 00 80 00
+11111111 11111111 11111111 11111111 11111111 11111111 10000000 00000\
+000
+FF FF FF FF FF FF 80 00
+10000000 00000001
+80 01
+Error: 32769 cannot fit into 2 signed byte(s).
+Error: -32769 cannot fit into 2 signed byte(s).
+00000000 00000000 10000000 00000001
+00 00 80 01
+00000000 00000000 10000000 00000001
+00 00 80 01
+11111111 11111111 01111111 11111111
+FF FF 7F FF
+00000000 00000000 00000000 00000000 00000000 00000000 10000000 00000\
+001
+00 00 00 00 00 00 80 01
+00000000 00000000 00000000 00000000 00000000 00000000 10000000 00000\
+001
+00 00 00 00 00 00 80 01
+11111111 11111111 11111111 11111111 11111111 11111111 01111111 11111\
+111
+FF FF FF FF FF FF 7F FF
+11111111 11111111
+FF FF
+Error: 65535 cannot fit into 2 signed byte(s).
+Error: -65535 cannot fit into 2 signed byte(s).
+00000000 00000000 11111111 11111111
+00 00 FF FF
+00000000 00000000 11111111 11111111
+00 00 FF FF
+11111111 11111111 00000000 00000001
+FF FF 00 01
+00000000 00000000 00000000 00000000 00000000 00000000 11111111 11111\
+111
+00 00 00 00 00 00 FF FF
+00000000 00000000 00000000 00000000 00000000 00000000 11111111 11111\
+111
+00 00 00 00 00 00 FF FF
+11111111 11111111 11111111 11111111 11111111 11111111 00000000 00000\
+001
+FF FF FF FF FF FF 00 01
+Error: 65536 cannot fit into 2 unsigned byte(s).
+Error: 65536 cannot fit into 2 signed byte(s).
+Error: -65536 cannot fit into 2 signed byte(s).
+00000000 00000001 00000000 00000000
+00 01 00 00
+00000000 00000001 00000000 00000000
+00 01 00 00
+11111111 11111111 00000000 00000000
+FF FF 00 00
+00000000 00000000 00000000 00000000 00000000 00000001 00000000 00000\
+000
+00 00 00 00 00 01 00 00
+00000000 00000000 00000000 00000000 00000000 00000001 00000000 00000\
+000
+00 00 00 00 00 01 00 00
+11111111 11111111 11111111 11111111 11111111 11111111 00000000 00000\
+000
+FF FF FF FF FF FF 00 00
+01111111 11111111 11111111 11111111
+7F FF FF FF
+01111111 11111111 11111111 11111111
+7F FF FF FF
+10000000 00000000 00000000 00000001
+80 00 00 01
+00000000 00000000 00000000 00000000 01111111 11111111 11111111 11111\
+111
+00 00 00 00 7F FF FF FF
+00000000 00000000 00000000 00000000 01111111 11111111 11111111 11111\
+111
+00 00 00 00 7F FF FF FF
+11111111 11111111 11111111 11111111 10000000 00000000 00000000 00000\
+001
+FF FF FF FF 80 00 00 01
+10000000 00000000 00000000 00000000
+80 00 00 00
+Error: 2147483648 cannot fit into 4 signed byte(s).
+10000000 00000000 00000000 00000000
+80 00 00 00
+00000000 00000000 00000000 00000000 10000000 00000000 00000000 00000\
+000
+00 00 00 00 80 00 00 00
+00000000 00000000 00000000 00000000 10000000 00000000 00000000 00000\
+000
+00 00 00 00 80 00 00 00
+11111111 11111111 11111111 11111111 10000000 00000000 00000000 00000\
+000
+FF FF FF FF 80 00 00 00
+10000000 00000000 00000000 00000001
+80 00 00 01
+Error: 2147483649 cannot fit into 4 signed byte(s).
+Error: -2147483649 cannot fit into 4 signed byte(s).
+00000000 00000000 00000000 00000000 10000000 00000000 00000000 00000\
+001
+00 00 00 00 80 00 00 01
+00000000 00000000 00000000 00000000 10000000 00000000 00000000 00000\
+001
+00 00 00 00 80 00 00 01
+11111111 11111111 11111111 11111111 01111111 11111111 11111111 11111\
+111
+FF FF FF FF 7F FF FF FF
+11111111 11111111 11111111 11111111
+FF FF FF FF
+Error: 4294967295 cannot fit into 4 signed byte(s).
+Error: -4294967295 cannot fit into 4 signed byte(s).
+00000000 00000000 00000000 00000000 11111111 11111111 11111111 11111\
+111
+00 00 00 00 FF FF FF FF
+00000000 00000000 00000000 00000000 11111111 11111111 11111111 11111\
+111
+00 00 00 00 FF FF FF FF
+11111111 11111111 11111111 11111111 00000000 00000000 00000000 00000\
+001
+FF FF FF FF 00 00 00 01
+Error: 4294967296 cannot fit into 4 unsigned byte(s).
+Error: 4294967296 cannot fit into 4 signed byte(s).
+Error: -4294967296 cannot fit into 4 signed byte(s).
+00000000 00000000 00000000 00000001 00000000 00000000 00000000 00000\
+000
+00 00 00 01 00 00 00 00
+00000000 00000000 00000000 00000001 00000000 00000000 00000000 00000\
+000
+00 00 00 01 00 00 00 00
+11111111 11111111 11111111 11111111 00000000 00000000 00000000 00000\
+000
+FF FF FF FF 00 00 00 00
+Error: -3 is negative.
+Error: 3.928375 is not an integer.
+Error: 4.000000 is not an integer.
+1
+1
+1
+1
+1
+1
+1
diff --git a/tests/bc/log.txt b/tests/bc/log.txt
new file mode 100644
index 000000000000..54115e380ec7
--- /dev/null
+++ b/tests/bc/log.txt
@@ -0,0 +1,22 @@
+l(0)
+l(0.5)
+l(1)
+l(1.5)
+l(1.74)
+l(2)
+l(3.2345)
+l(5.283957)
+l(13.23857)
+l(100)
+l(283.238957)
+l(-0.5)
+l(-1)
+l(-1.5)
+l(-1.74)
+l(-2)
+l(-3.2345)
+l(-5.283957)
+l(-13.23857)
+l(-100)
+l(-283.238957)
+l(10430710.3325472917)
diff --git a/tests/bc/log_results.txt b/tests/bc/log_results.txt
new file mode 100644
index 000000000000..ce840a0d9e94
--- /dev/null
+++ b/tests/bc/log_results.txt
@@ -0,0 +1,22 @@
+-99999999999999999999.00000000000000000000
+-.69314718055994530941
+0
+.40546510810816438197
+.55388511322643765995
+.69314718055994530941
+1.17387435650190306676
+1.66467524885255369652
+2.58313453863349348434
+4.60517018598809136803
+5.64629091238730017971
+-99999999999999999999.00000000000000000000
+-99999999999999999999.00000000000000000000
+-99999999999999999999.00000000000000000000
+-99999999999999999999.00000000000000000000
+-99999999999999999999.00000000000000000000
+-99999999999999999999.00000000000000000000
+-99999999999999999999.00000000000000000000
+-99999999999999999999.00000000000000000000
+-99999999999999999999.00000000000000000000
+-99999999999999999999.00000000000000000000
+16.16026492940839137014
diff --git a/tests/bc/misc.txt b/tests/bc/misc.txt
new file mode 100644
index 000000000000..571f4a87e262
--- /dev/null
+++ b/tests/bc/misc.txt
@@ -0,0 +1,13 @@
+4.1*1.-13^ - 74 - 1284597623841*1.-13^ - 757
+4.1*1.\
+-1\
+3^ - 74 - 1284597623841*1.\
+-1\
+3^ - 757
+obase = 9
+4.1*1.-13^ - 74 - 1284597623841*1.-13^ - 757
+4.1*1.\
+-1\
+3^ - 74 - 1284597623841*1.\
+-1\
+3^ - 757
diff --git a/tests/bc/misc1.txt b/tests/bc/misc1.txt
new file mode 100644
index 000000000000..7e9d9660457f
--- /dev/null
+++ b/tests/bc/misc1.txt
@@ -0,0 +1,76 @@
+define x(x) {
+ return(x)
+}
+define y() {
+ return;
+}
+define z() {
+ return ();
+}
+scale = 0
+x=2
+x[0]=3
+x
+x[0]
+scale
+ibase
+obase
+x ( 7 )
+x + x( 8 )
+x - x[0]
+321 * x
+2 ^ x[0]
+x++
+--x
+x += 9
+x
+length(2381)
+sqrt(9)
+scale(238.1)
+x=2
+x[0]=3
+(x)
+(x[0])
+(scale)
+(ibase)
+(obase)
+(x ( 7 ))
+(x + x( 8 ))
+(x - x[0])
+(321 * x)
+(2 ^ x[0])
+(x++)
+(--x)
+(x += 9)
+(length(2381))
+(sqrt(9))
+(scale(238.1))
+(scale = 0)
+(x = 10)
+(x += 100)
+(x -= 10)
+(x *= 10)
+(x /= 100)
+(x ^= 10)
+(x = sqrt(x))
+(x[1 - 1])
+x[(1 - 1)]
+2 + \
+3
+++ibase
+--ibase
+++obase
+--obase
+++last
+--last
+last
+last = 100
+last
+. = 150
+.
+++scale
+--scale
+y()
+z()
+2 + /*
+*/3
diff --git a/tests/bc/misc1_results.txt b/tests/bc/misc1_results.txt
new file mode 100644
index 000000000000..a9c278069439
--- /dev/null
+++ b/tests/bc/misc1_results.txt
@@ -0,0 +1,57 @@
+2
+3
+0
+10
+10
+7
+10
+-1
+642
+8
+2
+2
+11
+4
+3
+1
+2
+3
+0
+10
+10
+7
+10
+-1
+642
+8
+2
+2
+11
+4
+3
+1
+0
+10
+110
+100
+1000
+10
+10000000000
+100000
+3
+3
+5
+11
+10
+10
+10
+11
+10
+10
+100
+150
+1
+0
+0
+0
+5
diff --git a/tests/bc/misc2.txt b/tests/bc/misc2.txt
new file mode 100644
index 000000000000..7cf162435c1b
--- /dev/null
+++ b/tests/bc/misc2.txt
@@ -0,0 +1,109 @@
+define w() { auto z; return 1; }
+define x() {
+ "x"
+ return (1)
+}
+define y() {
+ "y"
+ return (2)
+}
+define z() {
+ "z"
+ return (3)
+}
+
+define v() { return }
+
+v()
+
+w()
+
+if (x() == y()) { 1 }
+1
+if (x() <= y()) { 2 }
+if (y() >= x()) { 3 }
+if (x() != y()) { 4 }
+if (x() < y()) { 5 }
+if (y() > x()) { 6 }
+
+if (x() == z()) { 11 }
+11
+if (x() <= z()) { 12 }
+if (z() >= x()) { 13 }
+if (x() != z()) { 14 }
+if (x() < z()) { 15 }
+if (z() > x()) { 16 }
+
+x = -10
+while (x <= 0) {
+ x
+ if (x == -5) break;
+ x += 1
+}
+
+define u() {
+ auto a[];
+ return a[0]
+}
+
+u()
+
+if (x == -4) x
+else x - 4
+
+x = 1
+
+if (x == 1) 1 else 2
+if (x == 0) 1 else 2
+
+if (x == 1) 1 else if (x == 0) 2 else 3
+if (x == 0) 1 else if (x == 1) 2 else 3
+if (x == -1) 1 else if (x == 0) 2 else 3
+
+if (x == 1) if (x != 0) 1 else 2 else 3
+if (x == 1) if (x == 0) 1 else 2 else 3
+if (x != 1) if (x == 0) 1 else 2 else 3
+
+if (x == 1) while (x > 0) { x ; x -= 1 } else 0
+x = 1
+if (x == 0) while (x > 0) { x ; x -= 1 } else 0
+
+if(x == 1) {
+ 11
+ while(x == 1) {
+ 21
+ while(x == 1) {
+ 31
+ break
+ 32
+ }
+ 22
+ break
+ 23
+ }
+ 12
+}
+99
+
+for (;;) { 123 ; break; }
+for (i = 0;; ++i) { i ; if (i == 2) break; else i; }
+for (i = 0;; ++i) { i ; if (i != 2) i else break }
+
+while (i > 0) if (i == 1) break else i--
+while (i < 3) if (i != 2) i++ else break
+
+for(i=1; i<=3; i++) { i; if(i==2) continue; print i,i,"\n" }
+
+print 1,2,3
+print "\n"
+
+ifz = 1
+ifz
+++ifz
+ifz++
+ifz
+
+{
+ 4
+ 5
+}
diff --git a/tests/bc/misc2_results.txt b/tests/bc/misc2_results.txt
new file mode 100644
index 000000000000..986a3a2a13e1
--- /dev/null
+++ b/tests/bc/misc2_results.txt
@@ -0,0 +1,63 @@
+0
+1
+xy1
+xy2
+yx3
+xy4
+xy5
+yx6
+xz11
+xz12
+zx13
+xz14
+xz15
+zx16
+-10
+-9
+-8
+-7
+-6
+-5
+0
+-9
+1
+2
+1
+2
+3
+1
+2
+3
+1
+0
+11
+21
+31
+22
+12
+99
+123
+0
+0
+1
+1
+2
+0
+0
+1
+1
+2
+2
+1
+1
+11
+2
+3
+33
+123
+1
+2
+2
+3
+4
+5
diff --git a/tests/bc/misc3.txt b/tests/bc/misc3.txt
new file mode 100644
index 000000000000..7aad374c4ef6
--- /dev/null
+++ b/tests/bc/misc3.txt
@@ -0,0 +1,12 @@
+for (i = 0; i < A; ++i)
+{print "n"
+if(1)if(1){3
+}
+if(0)if(1){3
+}
+else 4
+if(0){if(1){3
+}}
+else 5
+{i}
+}
diff --git a/tests/bc/misc3_results.txt b/tests/bc/misc3_results.txt
new file mode 100644
index 000000000000..06d8bdcbd06e
--- /dev/null
+++ b/tests/bc/misc3_results.txt
@@ -0,0 +1,30 @@
+n3
+5
+0
+n3
+5
+1
+n3
+5
+2
+n3
+5
+3
+n3
+5
+4
+n3
+5
+5
+n3
+5
+6
+n3
+5
+7
+n3
+5
+8
+n3
+5
+9
diff --git a/tests/bc/misc4.txt b/tests/bc/misc4.txt
new file mode 100644
index 000000000000..b225b286fd5f
--- /dev/null
+++ b/tests/bc/misc4.txt
@@ -0,0 +1,2 @@
+if ( 1 != 1 ) 7
+maxibase() + 1
diff --git a/tests/bc/misc4_results.txt b/tests/bc/misc4_results.txt
new file mode 100644
index 000000000000..81b5c5d06cc0
--- /dev/null
+++ b/tests/bc/misc4_results.txt
@@ -0,0 +1 @@
+37
diff --git a/tests/bc/misc5.txt b/tests/bc/misc5.txt
new file mode 100644
index 000000000000..41852d4a2492
--- /dev/null
+++ b/tests/bc/misc5.txt
@@ -0,0 +1,20 @@
+if (1) {}
+else 4
+
+if (0) {}
+else 5
+
+if (1) 6
+else {}
+
+if (0) 7
+else {}
+
+{
+ if (1) if (1)
+}
+print "n\n"
+
+if (1) {
+ print "true\n"
+}
diff --git a/tests/bc/misc5_results.txt b/tests/bc/misc5_results.txt
new file mode 100644
index 000000000000..d8c70d83c1d5
--- /dev/null
+++ b/tests/bc/misc5_results.txt
@@ -0,0 +1,4 @@
+5
+6
+n
+true
diff --git a/tests/bc/misc_results.txt b/tests/bc/misc_results.txt
new file mode 100644
index 000000000000..e2db76e0ef90
--- /dev/null
+++ b/tests/bc/misc_results.txt
@@ -0,0 +1,4 @@
+-1284597623836.9
+-1284597623836.9
+-4483684050181.80
+-4483684050181.80
diff --git a/tests/bc/modulus.txt b/tests/bc/modulus.txt
new file mode 100644
index 000000000000..e2656a6e919c
--- /dev/null
+++ b/tests/bc/modulus.txt
@@ -0,0 +1,70 @@
+1 % 1
+2 % 1
+16 % 4
+15 % 4
+17 % 4
+2389473 % 5
+39240687239 % 1
+346728934 % 23958
+3496723859067234 % 298375462837546928347623059375486
+-1 % 1
+-2 % 1
+-47589634875689345 % 37869235
+-1274852934765 % 2387628935486273546
+-6324758963 % 237854962
+1 % -1
+2 % -1
+2 % -2
+2 % -3
+16 % 5
+15 % 5
+14 % 5
+89237423 % -237856923854
+123647238946 % -12467
+-1 % -1
+-2 % -1
+-2 % -2
+-2 % -3
+-13 % -7
+-14 % -7
+-15 % -7
+-12784956 % -32746
+-127849612 % -23712347682193
+1 % 0.2395672438567234
+scale = 0
+1 % 1
+2 % 1
+16 % 4
+15 % 4
+17 % 4
+2389473 % 5
+39240687239 % 1
+346728934 % 23958
+3496723859067234 % 298375462837546928347623059375486
+-1 % 1
+-2 % 1
+-47589634875689345 % 37869235
+-1274852934765 % 2387628935486273546
+-6324758963 % 237854962
+1 % -1
+2 % -1
+2 % -2
+2 % -3
+16 % 5
+15 % 5
+14 % 5
+89237423 % -237856923854
+123647238946 % -12467
+-1 % -1
+-2 % -1
+-2 % -2
+-2 % -3
+-13 % -7
+-14 % -7
+-15 % -7
+-12784956 % -32746
+-127849612 % -23712347682193
+-3191280681 % 641165986
+scale = 0; -899510228 % -2448300078.40314
+scale = 0; -7424863 % -207.2609738667
+scale = 0; 3769798918 % 0.6
diff --git a/tests/bc/modulus_results.txt b/tests/bc/modulus_results.txt
new file mode 100644
index 000000000000..e85145be70da
--- /dev/null
+++ b/tests/bc/modulus_results.txt
@@ -0,0 +1,69 @@
+0
+0
+0
+0
+0
+0
+0
+.00000000000000002026
+2747189239559.46904933397471305894
+0
+0
+-.00000000000011057855
+-.00076922992566770712
+-.00000000000050364144
+0
+0
+0
+.00000000000000000002
+0
+0
+0
+.00000000070585524350
+.00000000000000002898
+0
+0
+0
+-.00000000000000000002
+-.00000000000000000005
+0
+-.00000000000000000002
+-.00000000000000011722
+-.00000002640923745817
+.000000000000000000000404744340951948
+0
+0
+0
+3
+1
+3
+0
+8758
+3496723859067234
+0
+0
+-8236960
+-1274852934765
+-140529951
+0
+0
+0
+2
+1
+0
+4
+89237423
+6692
+0
+0
+0
+-2
+-6
+0
+-1
+-14016
+-127849612
+-626616737
+-899510228.00000
+-153.1331732059
+.4
diff --git a/tests/bc/multiply.txt b/tests/bc/multiply.txt
new file mode 100644
index 000000000000..e4b023d86d2f
--- /dev/null
+++ b/tests/bc/multiply.txt
@@ -0,0 +1,64 @@
+0 * 0
+0.000 * 0
+1 * 0
+0 * 1
+0 * 2498752389672835476
+873246913745129084576134 * 0
+1 * 472638590273489273456
+12374861230476103672835496 * 1
+1 * 1
+2 * 1
+1 * 2
+2 * 2
+3 * 14
+17 * 8
+1892467513846753 * 1872439821374591038746
+328962735862.2973546835638947635 * 1728465791348762356
+38745962374538.387427384672934867234 * 0.1932476528394672837568923754
+9878894576289457634856.2738627161689017387608947567654 * 37842939768237596237854203.29874372139852739126739621793162
+-1 * 1
+-1 * 2
+1 * -1
+2 * -1
+-1 * -1
+-1 * -2
+78893457 * -34876238956
+235678324957634 * -0.2349578349672389576
+-12849567821934 * 12738462937681
+1274861293467.927843682937462 * -28935678239
+2936077239872.12937462836 * -0.012842357682435762
+2387692387566.2378569237546 * -272189345628.123875629835876
+0.012348629356782835962 * -23487692356
+0.4768349567348675934 * -0.23756834576934857638495
+0.98748395367485962735486 * -4675839462354867.376834956738456
+-321784627934586 * -235762378596
+-32578623567892356 * -0.32567384579638456
+-35768232346876 * -2348672935602387620.28375682349576237856
+-0.2356728394765234 * -238759624356978
+-0.2345768212346780 * -0.235768124697074385948943532045
+-0.370873860736785306278630 * -7835678398607.7086378076867096270
+-78365713707.7089637863786730 * -738580798679306780
+-73867038956790490258249 * -0.7379862716391723672803679
+-378621971598721837710387 * -98465373878350798.09743896037963078560
+37164201 * 2931559660
+679468076118972457796560530571.46287161642138401685 * 93762.2836
+.000000000000000000000000001 * .0000000000000000000000001
+scale = 0; 237854962 * -26
+scale = 20; -989840367 * -604515309.000000000000000000000000000934882580147931989975995184020932681975029644558793192923907
+scale = 20; 623151276.1106104320046667401793737969130124845763706302869482103753909 * -605483272.00000000000000000000000000000000000000000000000000000000000000000001214399683339235971324443660465351061300645722062237312361947
+scale = 20; -4036255151 * -107387984.0000000000000000000000000000000000000211170318819607129506079448130618538050115777171523510326383
+scale = 19; 207225741.422284845290215111137445727462936392828872808516127361319675 * -1915632919.00000000000000000001200266819789205382734342543620744656564870683107249138254072
+scale = 4; -3700694776.00000000000000000000000001187600351487950366746489017325409746844911432455524847144387 * 3138176186.1604970875815488831816899415825759179598942878342303599901133
+scale = 4; 2471252773 * -2993804686
+scale = 5; -4136888605.1006664686088985948377077150956015758460597074849621165317181 * -356481995.883644326721780591302331282263396633424696084971708651216219
+scale = 10; -1226031704.000000000000000000000000000001604564576253363548680043729535457438899040946479243020383986 * -1255956056
+scale = 19; 1916023355.00000000000000000000000000000000000590795041191824027930567027047057471024023798017409006012644 * -3373891612
+scale = 22; 579072526.647812809110145427578413082391478903947155934872093047795435 * -2359518757
+scale = 16; 3426351583 * -1097923200.1397570019820419234583136053292187927164488359163611530503423
+scale = 29; 2500140133 * 2519408882.136359515749313850856768153433872015185470839039102302348122
+scale = 26; -2643644458 * -1308250843
+scale = 1; -1657954173 * 3046852834.163701388468236163905483103301582741070980569231164917728216
+scale = 19; -2350345163 * 1973064755
+scale = 23; -847296455 * 0
+scale = 32; -340132470 * 0
+scale = 30; 0 * -898777681
diff --git a/tests/bc/multiply_results.txt b/tests/bc/multiply_results.txt
new file mode 100644
index 000000000000..c37e8dea8899
--- /dev/null
+++ b/tests/bc/multiply_results.txt
@@ -0,0 +1,78 @@
+0
+0
+0
+0
+0
+0
+472638590273489273456
+12374861230476103672835496
+1
+2
+2
+4
+42
+136
+3543531533584430580556128344529291738
+568600835566479683035874339053.4411638427543228060
+7487566285885.8557453089005171423976251098
+373846412427291014394738378015501363938345620046.7869650248829232267\
+2297002026819
+-1
+-2
+-1
+-2
+1
+2
+-2751507058396910892
+-55374468980751.0837656919743223184
+-163683743464924630346895054
+-36888976187143312550878.567134791289418
+-37706154097.69662826215753378160
+-649904428532907022680241.94791869424754101064
+-290040807.350385412976669306472
+-.11328089187650139309272
+-4617316439035114.40320367843985107357898
+75864709277486862054521256
+10610005628108234.92015040406042336
+84007879267445533366251128067927.91168012197674537856
+56269158624557.1027018519702852
+.055305737239900889424090264801
+2906048299183.472237078104362540110129
+57879411419313585866282299201.3825582163029400
+54512860676747314187949.9414724679950990587298071
+37281153992026463004361915151761464058058.54968338992209002720
+108949072447731660
+63708478450213482928510139572007971.83536929222529239687
+0
+-6184229012
+598373655317678403.0000000000000000009253845162355359152488793941415\
+12541608457628205955407160901907953869
+-377307673610427838.287519137113381113465954298538150423110843701312\
+63603041103236754712381166109996409858143288621328522821527713676934\
+622001341437
+433445303575505584.0000000000000000000000000000852337287073951516265\
+237258332446395020869301754929979072465074948833
+-396968451932710729.832758175488621830920257166881504044017181955086\
+43506193467199715507328434681876
+-11613432218291755069.5762524259791142629353752893708044134847560553\
+8136567321175929541134735412916995398760
+-7398448132097894278
+1474726306694590904.736489533186588598709217518359873918376540725558\
+9059364344850
+1539841943486799424.000000000000000000002015262596788485739334351728\
+454883837115500449322577149746998662119216
+-6464455125830598260.00000000000000000000000001993278433888289570814\
+993810957844330769886942619318475359317157542128
+-1366332488288896656.12024861536905075619688089083311576513457394212\
+2626381474295
+-3761870894811282224.97650348201375765613020604657735333908053129235\
+37456182968609
+6298875257665779203.841305125739782495076325186750781083182842822393\
+239949380226
+3458550090770778094
+-5051542370918585682.13680622589660768869984918306341072395872527699\
+8697397045368
+-4637383203200030065
+0
+0
+0
diff --git a/tests/bc/pi.txt b/tests/bc/pi.txt
new file mode 100644
index 000000000000..b98419f1236b
--- /dev/null
+++ b/tests/bc/pi.txt
@@ -0,0 +1,4 @@
+for (i = 0; i <= 100; ++i) {
+ scale = i
+ 4 * a(1)
+}
diff --git a/tests/bc/pi_results.txt b/tests/bc/pi_results.txt
new file mode 100644
index 000000000000..128d6c0ca758
--- /dev/null
+++ b/tests/bc/pi_results.txt
@@ -0,0 +1,135 @@
+0
+2.8
+3.12
+3.140
+3.1412
+3.14156
+3.141592
+3.1415924
+3.14159264
+3.141592652
+3.1415926532
+3.14159265356
+3.141592653588
+3.1415926535896
+3.14159265358976
+3.141592653589792
+3.1415926535897932
+3.14159265358979320
+3.141592653589793236
+3.1415926535897932384
+3.14159265358979323844
+3.141592653589793238460
+3.1415926535897932384624
+3.14159265358979323846264
+3.141592653589793238462640
+3.1415926535897932384626432
+3.14159265358979323846264336
+3.141592653589793238462643380
+3.1415926535897932384626433832
+3.14159265358979323846264338324
+3.141592653589793238462643383276
+3.1415926535897932384626433832792
+3.14159265358979323846264338327948
+3.141592653589793238462643383279500
+3.1415926535897932384626433832795028
+3.14159265358979323846264338327950288
+3.141592653589793238462643383279502884
+3.1415926535897932384626433832795028840
+3.14159265358979323846264338327950288416
+3.141592653589793238462643383279502884196
+3.1415926535897932384626433832795028841968
+3.14159265358979323846264338327950288419716
+3.141592653589793238462643383279502884197168
+3.1415926535897932384626433832795028841971692
+3.14159265358979323846264338327950288419716936
+3.141592653589793238462643383279502884197169396
+3.1415926535897932384626433832795028841971693992
+3.14159265358979323846264338327950288419716939936
+3.141592653589793238462643383279502884197169399372
+3.1415926535897932384626433832795028841971693993748
+3.14159265358979323846264338327950288419716939937508
+3.141592653589793238462643383279502884197169399375104
+3.1415926535897932384626433832795028841971693993751056
+3.14159265358979323846264338327950288419716939937510580
+3.141592653589793238462643383279502884197169399375105820
+3.1415926535897932384626433832795028841971693993751058208
+3.14159265358979323846264338327950288419716939937510582096
+3.141592653589793238462643383279502884197169399375105820972
+3.1415926535897932384626433832795028841971693993751058209748
+3.14159265358979323846264338327950288419716939937510582097492
+3.141592653589793238462643383279502884197169399375105820974944
+3.1415926535897932384626433832795028841971693993751058209749444
+3.14159265358979323846264338327950288419716939937510582097494456
+3.141592653589793238462643383279502884197169399375105820974944592
+3.1415926535897932384626433832795028841971693993751058209749445920
+3.14159265358979323846264338327950288419716939937510582097494459228
+3.141592653589793238462643383279502884197169399375105820974944592304
+3.141592653589793238462643383279502884197169399375105820974944592307\
+6
+3.141592653589793238462643383279502884197169399375105820974944592307\
+80
+3.141592653589793238462643383279502884197169399375105820974944592307\
+816
+3.141592653589793238462643383279502884197169399375105820974944592307\
+8164
+3.141592653589793238462643383279502884197169399375105820974944592307\
+81640
+3.141592653589793238462643383279502884197169399375105820974944592307\
+816404
+3.141592653589793238462643383279502884197169399375105820974944592307\
+8164060
+3.141592653589793238462643383279502884197169399375105820974944592307\
+81640628
+3.141592653589793238462643383279502884197169399375105820974944592307\
+816406284
+3.141592653589793238462643383279502884197169399375105820974944592307\
+8164062860
+3.141592653589793238462643383279502884197169399375105820974944592307\
+81640628620
+3.141592653589793238462643383279502884197169399375105820974944592307\
+816406286208
+3.141592653589793238462643383279502884197169399375105820974944592307\
+8164062862088
+3.141592653589793238462643383279502884197169399375105820974944592307\
+81640628620896
+3.141592653589793238462643383279502884197169399375105820974944592307\
+816406286208996
+3.141592653589793238462643383279502884197169399375105820974944592307\
+8164062862089984
+3.141592653589793238462643383279502884197169399375105820974944592307\
+81640628620899860
+3.141592653589793238462643383279502884197169399375105820974944592307\
+816406286208998628
+3.141592653589793238462643383279502884197169399375105820974944592307\
+8164062862089986280
+3.141592653589793238462643383279502884197169399375105820974944592307\
+81640628620899862800
+3.141592653589793238462643383279502884197169399375105820974944592307\
+816406286208998628032
+3.141592653589793238462643383279502884197169399375105820974944592307\
+8164062862089986280348
+3.141592653589793238462643383279502884197169399375105820974944592307\
+81640628620899862803480
+3.141592653589793238462643383279502884197169399375105820974944592307\
+816406286208998628034824
+3.141592653589793238462643383279502884197169399375105820974944592307\
+8164062862089986280348252
+3.141592653589793238462643383279502884197169399375105820974944592307\
+81640628620899862803482532
+3.141592653589793238462643383279502884197169399375105820974944592307\
+816406286208998628034825340
+3.141592653589793238462643383279502884197169399375105820974944592307\
+8164062862089986280348253420
+3.141592653589793238462643383279502884197169399375105820974944592307\
+81640628620899862803482534208
+3.141592653589793238462643383279502884197169399375105820974944592307\
+816406286208998628034825342116
+3.141592653589793238462643383279502884197169399375105820974944592307\
+8164062862089986280348253421168
+3.141592653589793238462643383279502884197169399375105820974944592307\
+81640628620899862803482534211704
+3.141592653589793238462643383279502884197169399375105820974944592307\
+816406286208998628034825342117064
+3.141592653589793238462643383279502884197169399375105820974944592307\
+8164062862089986280348253421170676
diff --git a/tests/bc/places.txt b/tests/bc/places.txt
new file mode 100644
index 000000000000..f10952330a06
--- /dev/null
+++ b/tests/bc/places.txt
@@ -0,0 +1,20 @@
+0 @ 0
+1 @ 0
+2 @ 0
+0.0023896 @ 0
+1.298346 @ 0
+2.00000000 @ 0
+0.0023896 @ 3
+1.298346 @ 4
+2.00000000 @ 5
+289 @ 3
+18.34 @ 6
+-183.1 @ 0
+-23.238 @ 8
+-343.23 @ 2
+x = 89136.892348976
+x @= 7
+x
+-.1897263 @ 0
+.1982365 @ 0
+.0 @ 2
diff --git a/tests/bc/places_results.txt b/tests/bc/places_results.txt
new file mode 100644
index 000000000000..381ad9c3e54c
--- /dev/null
+++ b/tests/bc/places_results.txt
@@ -0,0 +1,18 @@
+0
+1
+2
+0
+1
+2
+.002
+1.2983
+2.00000
+289.000
+18.340000
+-183
+-23.23800000
+-343.23
+89136.8923489
+0
+0
+0
diff --git a/tests/bc/posix_errors.txt b/tests/bc/posix_errors.txt
new file mode 100644
index 000000000000..2bd5d9feed84
--- /dev/null
+++ b/tests/bc/posix_errors.txt
@@ -0,0 +1,31 @@
+aa = 0
+# This is a comment.
+while (q==0) { ++q; continue; }
+last
+print "i: ", i
+halt
+define x(e) { return 0; }
+define x(e) { return 4*(e+e); }
+define x(e) { return (e+e)*4; }
+limits
+.
+if (q!=0) { x=3; } else { x=4; }
+x<=0
+while (q!=0 && x==0) { ++q; }
+while (q!=0 || x==0) { ++q; }
+while (!q) { ++q; }
+for (; x<0; ++x) { y += 1; }
+for (x=0;; ++x) { y += 1; }
+for (x=0; x<0;) { y += 1; }
+for (x=0;;) { y += 1; }
+for (; x<0;) { y += 1; }
+for (;; ++x) { y += 1; }
+for (;;) { y += 1; }
+3e2981
+9.892108e-20
+obase = 0
+obase = 1
+define void a(e) { "stuff" }
+maxibase()
+maxobase()
+maxscale()
diff --git a/tests/bc/power.txt b/tests/bc/power.txt
new file mode 100644
index 000000000000..e4065fbfa256
--- /dev/null
+++ b/tests/bc/power.txt
@@ -0,0 +1,43 @@
+0 ^ 0
+0 ^ 1
+0 ^ 1894
+1 ^ 0
+39746823 ^ 0
+0.238672983047682 ^ 0
+18394762374689237468.97354862973846 ^ 0
+1 ^ 1
+2 ^ 1
+18927361346 ^ 1
+0.23523785962738592635777 ^ 1
+328956734869213746.89782398457234 ^ 1
+8937 ^ 98
+0.124876812394 ^ 2396
+93762.2836 ^ 13
+1 ^ -1
+2 ^ -1
+10 ^ -1
+683734768 ^ -1
+38579623756.897937568235 ^ -1
+1 ^ -32467
+2 ^ -53
+23897 ^ -213
+-1 ^ 1
+-1 ^ 2
+-2 ^ 1
+-2 ^ 2
+-237 ^ 294
+-3746 ^ 28
+-0.3548 ^ 35
+-4267.234 ^ 37
+-326.3246 ^ 78
+-1 ^ -1
+-1 ^ -2
+-2 ^ -1
+-2 ^ -2
+-237 ^ -293
+-784 ^ -23
+-86 ^ -7
+-0.23424398 ^ -781
+-178.234786 ^ -879
+-1274.346 ^ -768
+-0.2959371298 ^ 227
diff --git a/tests/bc/power_results.txt b/tests/bc/power_results.txt
new file mode 100644
index 000000000000..280347a9f258
--- /dev/null
+++ b/tests/bc/power_results.txt
@@ -0,0 +1,72 @@
+1
+0
+0
+1
+1
+1
+1
+1
+2
+18927361346
+.23523785962738592635777
+328956734869213746.89782398457234
+16473742664221279051571200630760751138799221376964991600670000200609\
+08006052596520320731708604393844468006290371918262741885989163144389\
+39367835091560809036359941703341471396407660150658436796925310445979\
+21333166245765946557344383284626113908419359990042883048537750217279\
+17481980123593363177308481941550382845381799410533956718500484099889\
+610805653325917409549921909941664118421333562129
+0
+43287877285033571298394739716218787350087163435619825150259705419.98\
+016445740928054425
+1.00000000000000000000
+.50000000000000000000
+.10000000000000000000
+.00000000146255543348
+.00000000002592041867
+1.00000000000000000000
+.00000000000000011102
+0
+-1
+1
+-2
+4
+14997322375665265051328725757939209353051902095893907150382724666290\
+49749481660976421019742616298227588464420182758442163654172400528243\
+00885441207762486233574213374503090372518590691583139696652847404883\
+08573912261119588874308960204159666762789603037188471170006223907416\
+60492840269152716750700089148882139254399347568222390231015487895905\
+73727080561379177721440905866857248917982113340543176658480139248897\
+54802503253413282808814063861470711399810899724515727713334909764746\
+27910290211411231279325882505708287941671508154740003122373284699097\
+78346501539634198926772266511968381368929692275950529960923432771985\
+12597189390708050983487158873301681237787429436264801751664042999180\
+3448659818912436089
+11478830555358864333472551120140548480416206583184496764727387456058\
+792742209537931243951391229607936
+-.00000000000000017759
+-2067373624686414405470850679965010694114490999957199847684803894306\
+56243666149296582304582679590231948238805965642713928910384741502707\
+.23224479257866798694
+11606078892843496082360561256965139908586179418605021706789617179085\
+85768049299693425729565480314913006780973928345684673490252494674985\
+0186164225375953066263609289359900615361965737717208159874390.293769\
+70206344604971
+-1.00000000000000000000
+1.00000000000000000000
+-.50000000000000000000
+.25000000000000000000
+0
+0
+-.00000000000002874159
+-1945134149489344891879057554905782841936258356736314337975569799825\
+94091939572752348215929683891336730843553721422164737465108229034947\
+87333189564755763444242676978610321731298729194092653999616928308494\
+26419468484566422775668903315088810746121307679948574976162519479931\
+18935243698160094347216562490000767121041786977792546155155934655909\
+14123833869470494708767968978717730012864171105540029928688274136791\
+98175053824022144065005509214813689232148489884560100200475909009813\
+340098100705258138.98542904577525702068
+0
+0
+0
diff --git a/tests/bc/print2.txt b/tests/bc/print2.txt
new file mode 100644
index 000000000000..7f65fbe4c106
--- /dev/null
+++ b/tests/bc/print2.txt
@@ -0,0 +1,194 @@
+define prnt(i) {
+
+ obase = i - 1
+ a
+ b
+ c
+
+ obase = i
+ a
+ b
+ c
+
+ return i
+}
+
+define prnt2(i) {
+
+ obase = i + 1
+ a
+ b
+ c
+
+ print "\n"
+
+ return i * 10
+}
+
+a = 999999999999999999999999999999999999
+b = a + 1
+c = b + 1
+
+i = 100
+i = prnt(i)
+
+if (i + 1 <= maxobase()) {
+ i = prnt2(i)
+}
+else {
+ print " 084 044 021 047 096 073 015 052 088 014 072 097 047 021 094 051 083\e\n 000\n"
+ print " 084 044 021 047 096 073 015 052 088 014 072 097 047 021 094 051 083\e\n 001\n"
+ print " 084 044 021 047 096 073 015 052 088 014 072 097 047 021 094 051 083\e\n 002\n"
+ print "\n"
+ i *= 10
+}
+
+if (i <= maxobase()) {
+ i = prnt(i)
+}
+else {
+ print " 001 012 066 220 495 792 924 792 495 220 066 012 000\n"
+ print " 001 012 066 220 495 792 924 792 495 220 066 012 001\n"
+ print " 001 012 066 220 495 792 924 792 495 220 066 012 002\n"
+ print " 999 999 999 999 999 999 999 999 999 999 999 999\n"
+ print " 001 000 000 000 000 000 000 000 000 000 000 000 000\n"
+ print " 001 000 000 000 000 000 000 000 000 000 000 000 001\n"
+}
+
+if (i + 1 <= maxobase()) {
+ i = prnt2(i)
+}
+else {
+ print " 0989 0065 0781 0494 0209 0923 0209 0494 0781 0065 0989 0000\n"
+ print " 0989 0065 0781 0494 0209 0923 0209 0494 0781 0065 0989 0001\n"
+ print " 0989 0065 0781 0494 0209 0923 0209 0494 0781 0065 0989 0002\n"
+ print "\n"
+ i *= 10
+}
+
+if (i <= maxobase()) {
+ i = prnt(i)
+}
+else {
+ print " 0001 0009 0036 0084 0126 0126 0084 0036 0009 0000\n"
+ print " 0001 0009 0036 0084 0126 0126 0084 0036 0009 0001\n"
+ print " 0001 0009 0036 0084 0126 0126 0084 0036 0009 0002\n"
+ print " 9999 9999 9999 9999 9999 9999 9999 9999 9999\n"
+ print " 0001 0000 0000 0000 0000 0000 0000 0000 0000 0000\n"
+ print " 0001 0000 0000 0000 0000 0000 0000 0000 0000 0001\n"
+}
+
+if (i + 1 <= maxobase()) {
+ i = prnt2(i)
+}
+else {
+ print " 09992 00035 09917 00125 09875 00083 09965 00008 09999\n"
+ print " 09992 00035 09917 00125 09875 00083 09965 00008 10000\n"
+ print " 09992 00035 09917 00125 09875 00083 09965 00009 00000\n"
+ print "\n"
+ i *= 10
+}
+
+if (i <= maxobase()) {
+ i = prnt(i)
+}
+else {
+ print " 00010 00070 00210 00350 00350 00210 00070 00009\n"
+ print " 00010 00070 00210 00350 00350 00210 00070 00010\n"
+ print " 00010 00070 00210 00350 00350 00210 00070 00011\n"
+ print " 00009 99999 99999 99999 99999 99999 99999 99999\n"
+ print " 00010 00000 00000 00000 00000 00000 00000 00000\n"
+ print " 00010 00000 00000 00000 00000 00000 00000 00001\n"
+}
+
+if (i + 1 <= maxobase()) {
+ i = prnt2(i)
+}
+else {
+ print " 000009 099931 000209 099651 000349 099791 000069 099990\n"
+ print " 000009 099931 000209 099651 000349 099791 000069 099991\n"
+ print " 000009 099931 000209 099651 000349 099791 000069 099992\n"
+ print "\n"
+ i *= 10
+}
+
+if (i <= maxobase()) {
+ i = prnt(i)
+}
+else {
+ print " 000001 000006 000015 000020 000015 000006 000000\n"
+ print " 000001 000006 000015 000020 000015 000006 000001\n"
+ print " 000001 000006 000015 000020 000015 000006 000002\n"
+ print " 999999 999999 999999 999999 999999 999999\n"
+ print " 000001 000000 000000 000000 000000 000000 000000\n"
+ print " 000001 000000 000000 000000 000000 000000 000001\n"
+}
+
+if (i + 1 <= maxobase()) {
+ i = prnt2(i)
+}
+else {
+ print " 0999995 0000014 0999981 0000014 0999995 0000000\n"
+ print " 0999995 0000014 0999981 0000014 0999995 0000001\n"
+ print " 0999995 0000014 0999981 0000014 0999995 0000002\n"
+ print "\n"
+ i *= 10
+}
+
+if (i <= maxobase()) {
+ i = prnt(i)
+}
+else {
+ print " 0000010 0000050 0000100 0000100 0000050 0000009\n"
+ print " 0000010 0000050 0000100 0000100 0000050 0000010\n"
+ print " 0000010 0000050 0000100 0000100 0000050 0000011\n"
+ print " 0000009 9999999 9999999 9999999 9999999 9999999\n"
+ print " 0000010 0000000 0000000 0000000 0000000 0000000\n"
+ print " 0000010 0000000 0000000 0000000 0000000 0000001\n"
+}
+
+if (i + 1 <= maxobase()) {
+ i = prnt2(i)
+}
+else {
+ print " 00000009 09999951 00000099 09999901 00000049 09999990\n"
+ print " 00000009 09999951 00000099 09999901 00000049 09999991\n"
+ print " 00000009 09999951 00000099 09999901 00000049 09999992\n"
+ print "\n"
+ i *= 10
+}
+
+if (i <= maxobase()) {
+ i = prnt(i)
+}
+else {
+ print " 00010000 00040000 00060000 00040000 00009999\n"
+ print " 00010000 00040000 00060000 00040000 00010000\n"
+ print " 00010000 00040000 00060000 00040000 00010001\n"
+ print " 00009999 99999999 99999999 99999999 99999999\n"
+ print " 00010000 00000000 00000000 00000000 00000000\n"
+ print " 00010000 00000000 00000000 00000000 00000001\n"
+}
+
+if (i + 1 <= maxobase()) {
+ i = prnt2(i)
+}
+else {
+ print " 000009999 099960001 000059999 099960001 000009999\n"
+ print " 000009999 099960001 000059999 099960001 000010000\n"
+ print " 000009999 099960001 000059999 099960001 000010001\n"
+ print "\n"
+ i *= 10
+}
+
+if (i <= maxobase()) {
+ i = prnt(i)
+}
+else {
+ print " 000000001 000000004 000000006 000000004 000000000\n"
+ print " 000000001 000000004 000000006 000000004 000000001\n"
+ print " 000000001 000000004 000000006 000000004 000000002\n"
+ print " 999999999 999999999 999999999 999999999\n"
+ print " 000000001 000000000 000000000 000000000 000000000\n"
+ print " 000000001 000000000 000000000 000000000 000000001\n"
+}
diff --git a/tests/bc/print2_results.txt b/tests/bc/print2_results.txt
new file mode 100644
index 000000000000..625e6f0bfd07
--- /dev/null
+++ b/tests/bc/print2_results.txt
@@ -0,0 +1,79 @@
+ 01 19 62 55 79 46 79 96 00 60 26 35 38 84 98 25 54 18 00
+ 01 19 62 55 79 46 79 96 00 60 26 35 38 84 98 25 54 18 01
+ 01 19 62 55 79 46 79 96 00 60 26 35 38 84 98 25 54 18 02
+ 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99
+ 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01
+ 084 044 021 047 096 073 015 052 088 014 072 097 047 021 094 051 083\
+ 000
+ 084 044 021 047 096 073 015 052 088 014 072 097 047 021 094 051 083\
+ 001
+ 084 044 021 047 096 073 015 052 088 014 072 097 047 021 094 051 083\
+ 002
+
+ 001 012 066 220 495 792 924 792 495 220 066 012 000
+ 001 012 066 220 495 792 924 792 495 220 066 012 001
+ 001 012 066 220 495 792 924 792 495 220 066 012 002
+ 999 999 999 999 999 999 999 999 999 999 999 999
+ 001 000 000 000 000 000 000 000 000 000 000 000 000
+ 001 000 000 000 000 000 000 000 000 000 000 000 001
+ 0989 0065 0781 0494 0209 0923 0209 0494 0781 0065 0989 0000
+ 0989 0065 0781 0494 0209 0923 0209 0494 0781 0065 0989 0001
+ 0989 0065 0781 0494 0209 0923 0209 0494 0781 0065 0989 0002
+
+ 0001 0009 0036 0084 0126 0126 0084 0036 0009 0000
+ 0001 0009 0036 0084 0126 0126 0084 0036 0009 0001
+ 0001 0009 0036 0084 0126 0126 0084 0036 0009 0002
+ 9999 9999 9999 9999 9999 9999 9999 9999 9999
+ 0001 0000 0000 0000 0000 0000 0000 0000 0000 0000
+ 0001 0000 0000 0000 0000 0000 0000 0000 0000 0001
+ 09992 00035 09917 00125 09875 00083 09965 00008 09999
+ 09992 00035 09917 00125 09875 00083 09965 00008 10000
+ 09992 00035 09917 00125 09875 00083 09965 00009 00000
+
+ 00010 00070 00210 00350 00350 00210 00070 00009
+ 00010 00070 00210 00350 00350 00210 00070 00010
+ 00010 00070 00210 00350 00350 00210 00070 00011
+ 00009 99999 99999 99999 99999 99999 99999 99999
+ 00010 00000 00000 00000 00000 00000 00000 00000
+ 00010 00000 00000 00000 00000 00000 00000 00001
+ 000009 099931 000209 099651 000349 099791 000069 099990
+ 000009 099931 000209 099651 000349 099791 000069 099991
+ 000009 099931 000209 099651 000349 099791 000069 099992
+
+ 000001 000006 000015 000020 000015 000006 000000
+ 000001 000006 000015 000020 000015 000006 000001
+ 000001 000006 000015 000020 000015 000006 000002
+ 999999 999999 999999 999999 999999 999999
+ 000001 000000 000000 000000 000000 000000 000000
+ 000001 000000 000000 000000 000000 000000 000001
+ 0999995 0000014 0999981 0000014 0999995 0000000
+ 0999995 0000014 0999981 0000014 0999995 0000001
+ 0999995 0000014 0999981 0000014 0999995 0000002
+
+ 0000010 0000050 0000100 0000100 0000050 0000009
+ 0000010 0000050 0000100 0000100 0000050 0000010
+ 0000010 0000050 0000100 0000100 0000050 0000011
+ 0000009 9999999 9999999 9999999 9999999 9999999
+ 0000010 0000000 0000000 0000000 0000000 0000000
+ 0000010 0000000 0000000 0000000 0000000 0000001
+ 00000009 09999951 00000099 09999901 00000049 09999990
+ 00000009 09999951 00000099 09999901 00000049 09999991
+ 00000009 09999951 00000099 09999901 00000049 09999992
+
+ 00010000 00040000 00060000 00040000 00009999
+ 00010000 00040000 00060000 00040000 00010000
+ 00010000 00040000 00060000 00040000 00010001
+ 00009999 99999999 99999999 99999999 99999999
+ 00010000 00000000 00000000 00000000 00000000
+ 00010000 00000000 00000000 00000000 00000001
+ 000009999 099960001 000059999 099960001 000009999
+ 000009999 099960001 000059999 099960001 000010000
+ 000009999 099960001 000059999 099960001 000010001
+
+ 000000001 000000004 000000006 000000004 000000000
+ 000000001 000000004 000000006 000000004 000000001
+ 000000001 000000004 000000006 000000004 000000002
+ 999999999 999999999 999999999 999999999
+ 000000001 000000000 000000000 000000000 000000000
+ 000000001 000000000 000000000 000000000 000000001
diff --git a/tests/bc/rand.txt b/tests/bc/rand.txt
new file mode 100644
index 000000000000..5b53d10debe6
--- /dev/null
+++ b/tests/bc/rand.txt
@@ -0,0 +1,323 @@
+print "Gathering array...\n"
+
+s = seed
+
+sum = 0
+
+for (i = 0; i < 100; ++i) {
+ a[i] = rand()
+ sum += a[i]
+ b[i] = irand(sum)
+}
+
+print "Testing implementation...\n"
+
+if (maxrand() >= 2^64 - 1) {
+
+ seed = 54.86785590782347282592869373784717814475564948862907968939359536927733440\
+ 901359008180088183692646452982444316148757934570312500000
+
+ ibase = G
+ obase = G
+
+ for (i = 0; i < 64; ++i) {
+ rand()
+ }
+
+ seed = 0.2890120
+
+ rand()
+
+ 7B47F409
+ BA1D3330
+ 83D2F293
+ BFA4784B
+ CBED606E
+ BFC6A3AD
+ 812FFF6D
+ E61F305A
+ F9384B90
+ 32DB86FE
+ 1DC035F9
+ ED786826
+ 3822441D
+ 2BA113D7
+ 1C5B818B
+ A233956A
+ 84DA65E3
+ CED67292
+ B2C0FE06
+ 91817130
+
+ 55FE8917
+ 47E92091
+ 486AF299
+ B1E882BB
+ C261E845
+ 1A9B90F6
+ 7964E884
+ 5F36D7A4
+ 1EE2052D
+ 8519F5D5
+ 293D4E4F
+ 6D8F99FC
+ C3421509
+ A06CD7C6
+ E43064D3
+ E20F9BF0
+ 401B50B7
+ 8EF1FF3E
+ E357E2B2
+ A4AEEE37
+
+ 2AD4426A
+ 9D11BE94
+ 7290C556
+ 6E6F3787
+ 050C2EE3
+ 4FD73703
+ C6FF478B
+ 4B1CA1E1
+ 1654EA91
+ CD08B2F2
+ F7FF3DA8
+ 78B1B8DA
+ A100602C
+ 9588585F
+ DA028873
+ 66B4F376
+ 0E6B4B9A
+ 48167094
+ 0D58CDA0
+ 8F7238BE
+
+ F79983F3
+ 07E5D324
+ AD78DF52
+ 1532BA74
+ 1E4899E2
+ 6C75DF64
+ 171DDC36
+ F2D8D74A
+ 24E6D907
+ 4780FD32
+ 9ADF408C
+ A25544CF
+ EFC6A738
+ 1AA23A54
+ C5A13EBB
+ F739EDC9
+ C3A015FA
+ 3D5E1511
+ AFC4D7FB
+ 3F413B5E
+
+ 4660CB73
+ 88FC773F
+ D6BED59C
+ 63B3B54A
+ D67D3DDE
+ 23394F8B
+ 13384B44
+ DD8B3ABC
+ FF59A21E
+ 3BB16D7E
+ 6E01CB68
+ EC34790E
+ B26C42AD
+ D723C830
+ DFD10FCA
+ 7E362AA1
+ 826FF323
+ CB8F63B5
+ 9B3227E5
+ 9A61E339
+
+ 40BDACF
+}
+else {
+
+ ibase = G
+ obase = G
+
+ 86B1DA1D72062B68
+ 1304AA46C9853D39
+ A3670E9E0DD50358
+ F9090E529A7DAE00
+ C85B9FD837996F2C
+ 606121F8E3919196
+ 7CE1C7FF478354BA
+ CBC4AC70E541310E
+ 74BE71999EC37F2C
+ B81F9C99A934F1A7
+ 120E9901A900C97F
+ 0F983BAD4B19F493
+ 5934619363660D96
+ D5A7FE2717A2014E
+ 6E437241C9E6676E
+ 6A75C9DD6329CD29
+ 2D9E477683673437
+ 51FB0CF3D4405437
+ 217BB90392D08B20
+ 47C528A018B07A82
+
+ 1B4E474C418C835E
+ BDB2BDA74A119ED6
+ C6DB79D0B9E43493
+ C3CF4834E94A41D1
+ AB8312FC7877C7DC
+ 094B108133E8B5EC
+ 37CA97AC830113BD
+ EF02D7347F9192BF
+ 959517DD9896C53A
+ 7A80EB7629EFE9F9
+ AE53C23F2B1CF57C
+ CA605CD189F6D5CD
+ 921C2704886A9622
+ B68C9FBF826AF7AA
+ 73F8C733124772C3
+ 6B57F7E459EFBCDF
+ 9DE7696DDB6B8E18
+ 02CA67560DC26877
+ A24E353080777DEC
+ 4D600156763FD65C
+
+ 5CDF9C7E26DD2C38
+ 6A32443BBBB16774
+ 3D8415FFECFB8B7F
+ 3090ED9C475635A3
+ 6DBF241361C3E652
+ 2CA9EF5A2AD971FC
+ 44FBE937A1CF0FFC
+ DB17CF0577CB7853
+ AA3747D98D31B24C
+ 5D9A104C5D7F43F7
+ BAE65E3E293B2C7B
+ 16A396F0DB4EF984
+ 6DD2BACDC4445A05
+ 7B7A13D1858E5CA8
+ F73722BCAA52447C
+ 31A2C7BBE77CBA00
+ 7FC8AF9003BA1ACE
+ 5703F11DD3F235EF
+ FA1952267EF836C7
+ BBFA558C9E2D51E2
+
+ 3A29661D8145AF36
+ 608DEA6358DABD7C
+ 9E34E9E53431B447
+ 325A05E35EA524EB
+ 63A87CCF0C80ABB1
+ 8EA183287A46F292
+ E2AA5F119CBF2A08
+ 2F3BEB0DE8B730C8
+ 4B8006A928CF8F5B
+ 57B8BA85069C201C
+ 3422D962DDF59474
+ FD744940BA7366A1
+ 23D24B06B5DA4F6F
+ AA187C608319D1DC
+ DC60CA6FEA738B8A
+ C9FC61DF96A769FE
+ 82E2457708658A20
+ 2BECEC9B3E7D93EC
+ 1340DAEC04588952
+ F533446AD5C50B1D
+
+ 31FD1C7F434A62CE
+ D16DAEDD1F281A39
+ 6B5D9648931D7057
+ 62FEE3392DBB06D5
+ 0358BC87B00DF25A
+ F3C882D22946175D
+ 65BA8F11B4516EFE
+ 2DA5A96E626DA4FE
+ DCC669F4CD6121F0
+ 7A47FAC054319CA2
+ 9661CFEE277284C8
+ 01E483A14F4EB23A
+ ADDC115507390607
+ 5AB47C343BD3B0BD
+ 4882FB3A3957B11F
+ 615B7C9C3626DD44
+ F79CF49562969219
+ 88C32C194EA78D27
+ DA8AFFE1353FF352
+ A7A3C331A64CB146
+
+ A1F53517A7BE0CAA
+
+ ibase = A
+
+ seed = 54.0950779151573258314404657465246373249101452529430389404296875000
+
+ ibase = G
+
+ for (i = 0; i < 64; ++i) {
+ rand()
+ }
+
+ seed = 0.2890120
+
+ rand()
+}
+
+print "Testing array...\n"
+
+ibase = A
+
+seed = s
+
+sum = 0
+
+for (i = 0; i < 100; ++i) {
+ a[i] == rand()
+ sum += a[i]
+ b[i] == irand(sum)
+}
+
+print "Exercising irand()...\n"
+
+scale = 256
+
+pow = (maxrand() + 1) ^ 4
+s = 2^256 + 2^128 + (irand(pow) / pow)
+seed = s
+seed < s
+
+s = -459.125
+seed = s
+seed == -s
+
+irand(0)
+irand(1)
+seed == -s
+irand(maxrand() + 1) <= maxrand()
+
+for (i = 0; i < 200; ++i) {
+ irand(20) < 20
+}
+
+seed = 738
+seed != 738
+
+s = 2398@0625
+seed = s
+seed != s
+
+pow = (maxrand() + 1) ^ 4
+s = 2^2560 + 2^128 + (irand(pow) / pow)
+seed = s
+seed < s
+
+b = 0
+m = maxrand() + 1
+n = m + 1
+
+for (i = 0; !b && i < 100; ++i) {
+ c = irand(n)
+ b = (c != 0 && c != m)
+ if (c >= n) print "irand() result is too large.\n"
+}
+
+b
diff --git a/tests/bc/rand_results.txt b/tests/bc/rand_results.txt
new file mode 100644
index 000000000000..fc6177f718e7
--- /dev/null
+++ b/tests/bc/rand_results.txt
@@ -0,0 +1,616 @@
+Gathering array...
+Testing implementation...
+86B1DA1D72062B68
+1304AA46C9853D39
+A3670E9E0DD50358
+F9090E529A7DAE00
+C85B9FD837996F2C
+606121F8E3919196
+7CE1C7FF478354BA
+CBC4AC70E541310E
+74BE71999EC37F2C
+B81F9C99A934F1A7
+120E9901A900C97F
+F983BAD4B19F493
+5934619363660D96
+D5A7FE2717A2014E
+6E437241C9E6676E
+6A75C9DD6329CD29
+2D9E477683673437
+51FB0CF3D4405437
+217BB90392D08B20
+47C528A018B07A82
+1B4E474C418C835E
+BDB2BDA74A119ED6
+C6DB79D0B9E43493
+C3CF4834E94A41D1
+AB8312FC7877C7DC
+94B108133E8B5EC
+37CA97AC830113BD
+EF02D7347F9192BF
+959517DD9896C53A
+7A80EB7629EFE9F9
+AE53C23F2B1CF57C
+CA605CD189F6D5CD
+921C2704886A9622
+B68C9FBF826AF7AA
+73F8C733124772C3
+6B57F7E459EFBCDF
+9DE7696DDB6B8E18
+2CA67560DC26877
+A24E353080777DEC
+4D600156763FD65C
+5CDF9C7E26DD2C38
+6A32443BBBB16774
+3D8415FFECFB8B7F
+3090ED9C475635A3
+6DBF241361C3E652
+2CA9EF5A2AD971FC
+44FBE937A1CF0FFC
+DB17CF0577CB7853
+AA3747D98D31B24C
+5D9A104C5D7F43F7
+BAE65E3E293B2C7B
+16A396F0DB4EF984
+6DD2BACDC4445A05
+7B7A13D1858E5CA8
+F73722BCAA52447C
+31A2C7BBE77CBA00
+7FC8AF9003BA1ACE
+5703F11DD3F235EF
+FA1952267EF836C7
+BBFA558C9E2D51E2
+3A29661D8145AF36
+608DEA6358DABD7C
+9E34E9E53431B447
+325A05E35EA524EB
+63A87CCF0C80ABB1
+8EA183287A46F292
+E2AA5F119CBF2A08
+2F3BEB0DE8B730C8
+4B8006A928CF8F5B
+57B8BA85069C201C
+3422D962DDF59474
+FD744940BA7366A1
+23D24B06B5DA4F6F
+AA187C608319D1DC
+DC60CA6FEA738B8A
+C9FC61DF96A769FE
+82E2457708658A20
+2BECEC9B3E7D93EC
+1340DAEC04588952
+F533446AD5C50B1D
+31FD1C7F434A62CE
+D16DAEDD1F281A39
+6B5D9648931D7057
+62FEE3392DBB06D5
+358BC87B00DF25A
+F3C882D22946175D
+65BA8F11B4516EFE
+2DA5A96E626DA4FE
+DCC669F4CD6121F0
+7A47FAC054319CA2
+9661CFEE277284C8
+1E483A14F4EB23A
+ADDC115507390607
+5AB47C343BD3B0BD
+4882FB3A3957B11F
+615B7C9C3626DD44
+F79CF49562969219
+88C32C194EA78D27
+DA8AFFE1353FF352
+A7A3C331A64CB146
+A1F53517A7BE0CAA
+7B47F409
+BA1D3330
+83D2F293
+BFA4784B
+CBED606E
+BFC6A3AD
+812FFF6D
+E61F305A
+F9384B90
+32DB86FE
+1DC035F9
+ED786826
+3822441D
+2BA113D7
+1C5B818B
+A233956A
+84DA65E3
+CED67292
+B2C0FE06
+91817130
+55FE8917
+47E92091
+486AF299
+B1E882BB
+C261E845
+1A9B90F6
+7964E884
+5F36D7A4
+1EE2052D
+8519F5D5
+293D4E4F
+6D8F99FC
+C3421509
+A06CD7C6
+E43064D3
+E20F9BF0
+401B50B7
+8EF1FF3E
+E357E2B2
+A4AEEE37
+2AD4426A
+9D11BE94
+7290C556
+6E6F3787
+50C2EE3
+4FD73703
+C6FF478B
+4B1CA1E1
+1654EA91
+CD08B2F2
+F7FF3DA8
+78B1B8DA
+A100602C
+9588585F
+DA028873
+66B4F376
+E6B4B9A
+48167094
+D58CDA0
+8F7238BE
+F79983F3
+7E5D324
+AD78DF52
+1532BA74
+1E4899E2
+6C75DF64
+171DDC36
+F2D8D74A
+24E6D907
+4780FD32
+9ADF408C
+A25544CF
+EFC6A738
+1AA23A54
+C5A13EBB
+F739EDC9
+C3A015FA
+3D5E1511
+AFC4D7FB
+3F413B5E
+4660CB73
+88FC773F
+D6BED59C
+63B3B54A
+D67D3DDE
+23394F8B
+13384B44
+DD8B3ABC
+FF59A21E
+3BB16D7E
+6E01CB68
+EC34790E
+B26C42AD
+D723C830
+DFD10FCA
+7E362AA1
+826FF323
+CB8F63B5
+9B3227E5
+9A61E339
+40BDACF
+Testing array...
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+Exercising irand()...
+1
+1
+0
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
diff --git a/tests/bc/read.txt b/tests/bc/read.txt
new file mode 100644
index 000000000000..8d2f0971e2ce
--- /dev/null
+++ b/tests/bc/read.txt
@@ -0,0 +1 @@
+1 + 1
diff --git a/tests/bc/read_errors.txt b/tests/bc/read_errors.txt
new file mode 100644
index 000000000000..1990eaeea621
--- /dev/null
+++ b/tests/bc/read_errors.txt
@@ -0,0 +1,2 @@
+5+5;
+read()
diff --git a/tests/bc/read_results.txt b/tests/bc/read_results.txt
new file mode 100644
index 000000000000..0cfbf08886fc
--- /dev/null
+++ b/tests/bc/read_results.txt
@@ -0,0 +1 @@
+2
diff --git a/tests/bc/scale.txt b/tests/bc/scale.txt
new file mode 100644
index 000000000000..e8bee791bce7
--- /dev/null
+++ b/tests/bc/scale.txt
@@ -0,0 +1,57 @@
+scale(0)
+scale(1)
+scale(12)
+scale(123)
+scale(1234)
+scale(12345)
+scale(123456)
+scale(1234567)
+scale(12345678)
+scale(123456789)
+scale(1234567890)
+scale(1.0)
+scale(12.0)
+scale(123.0)
+scale(1234.0)
+scale(12345.0)
+scale(123456.0)
+scale(1234567.0)
+scale(12345678.0)
+scale(123456789.0)
+scale(1234567890.0)
+scale(.1)
+scale(.12)
+scale(.123)
+scale(.1234)
+scale(.12345)
+scale(.123456)
+scale(.1234567)
+scale(.12345678)
+scale(.123456789)
+scale(.1234567890)
+scale(.01)
+scale(.012)
+scale(.0123)
+scale(.01234)
+scale(.012345)
+scale(.0123456)
+scale(.01234567)
+scale(.012345678)
+scale(.0123456789)
+scale(.01234567890)
+scale(.0000000001)
+scale(.00000000012)
+scale(.000000000123)
+scale(.0000000001234)
+scale(.00000000012345)
+scale(.000000000123456)
+scale(.0000000001234567)
+scale(.00000000012345678)
+scale(.000000000123456789)
+scale(.0000000001234567890)
+scale(289.29837)
+scale(2893.00000)
+scale(289.0)
+scale(1802973.0000000238)
+scale(.000000000000000093182394080000000000)
+scale(0.00000000000000000000)
diff --git a/tests/bc/scale_results.txt b/tests/bc/scale_results.txt
new file mode 100644
index 000000000000..386ef5422173
--- /dev/null
+++ b/tests/bc/scale_results.txt
@@ -0,0 +1,57 @@
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+5
+5
+1
+10
+36
+20
diff --git a/tests/bc/scientific.txt b/tests/bc/scientific.txt
new file mode 100644
index 000000000000..bd04562a8df3
--- /dev/null
+++ b/tests/bc/scientific.txt
@@ -0,0 +1,51 @@
+0e0
+0e1
+0e5
+0e-2
+0e-100
+1e0
+-1e1
+1e9
+-1e21
+1e-1
+-1e-2
+1e-5
+4.92837e5
+-3.28971028e20
+6.2e3
+-8.289371e2
+5.9817280937e8
+-3.28977e-1
+8.8927891e-20
+-7.98239e-4
+4.4892e-4
+-18937e0
+198273e10
+-18927e-4
+28937e-5
+-891072e-7
+.28972e0
+-.891273e-1
+.8928397e1
+-.0002983172e5
+.00022e3
+-.00022e4
+.0000328937e8
+obase=0
+0
+1
+10
+-289
+2894
+-89434
+894370
+-1239839
+28931708
+-8052098.8029731809
+.1
+-.01
+.001
+-.00038
+.0000483
+-.0002894378190
+.2893712083
diff --git a/tests/bc/scientific_results.txt b/tests/bc/scientific_results.txt
new file mode 100644
index 000000000000..557fcf61fe5e
--- /dev/null
+++ b/tests/bc/scientific_results.txt
@@ -0,0 +1,50 @@
+0
+0
+0
+0
+0
+1
+-10
+1000000000
+-1000000000000000000000
+.1
+-.01
+.00001
+492837
+-328971028000000000000
+6200
+-828.9371
+598172809.37
+-.328977
+.000000000000000000088927891
+-.000798239
+.00044892
+-18937
+1982730000000000
+-1.8927
+.28937
+-.0891072
+.28972
+-.0891273
+8.928397
+-29.83172
+.22
+-2.2
+3289.37
+0
+1e0
+1.0e1
+-2.89e2
+2.894e3
+-8.9434e4
+8.94370e5
+-1.239839e6
+2.8931708e7
+-8.0520988029731809e6
+1e-1
+-1e-2
+1e-3
+-3.8e-4
+4.83e-5
+-2.894378190e-4
+2.893712083e-1
diff --git a/tests/bc/scripts/add.bc b/tests/bc/scripts/add.bc
new file mode 100644
index 000000000000..03f8581251be
--- /dev/null
+++ b/tests/bc/scripts/add.bc
@@ -0,0 +1,17 @@
+#! /usr/bin/bc -lq
+
+scale = 20
+x = 1234567890 / scale
+len = length(x) + 1 + scale
+len *= 2
+
+for (i = 0; i <= len; ++i) {
+ a[i] = x * (10^i)
+ a[i]
+}
+
+for (i = 1; i <= 10000; ++i) {
+ for (j = 0; j < len; ++j) {
+ a[0] + a[j]
+ }
+}
diff --git a/tests/bc/scripts/array.bc b/tests/bc/scripts/array.bc
new file mode 100755
index 000000000000..dac232804914
--- /dev/null
+++ b/tests/bc/scripts/array.bc
@@ -0,0 +1,60 @@
+#! /usr/bin/bc -q
+
+define z(a[]) {
+ for (i = 0; i < l; ++i) {
+ a[i]
+ }
+}
+
+define x(a[]) {
+
+ # Test for separate vars and arrays.
+ auto a
+
+ for (a = 0; a < l; ++a) {
+ a[a] = -a
+ }
+
+ z(a[])
+}
+
+define g(x[], y[]) {
+ return x[0] - y[0]
+}
+
+define h(y[], x[]) {
+ return g(x[], y[])
+}
+
+define m(*x[], *y[]) {
+ return x[0] / y[0]
+}
+
+define n(*y[], *x[]) {
+ return m(x[], y[])
+}
+
+for (i = 0; i < 101; ++i) {
+ a[i] = i
+}
+
+a[104] = 204
+
+l = length(a[])
+
+for (i = 0; i <= l; ++i) {
+ a[i]
+}
+
+z(a[])
+x(a[])
+z(a[])
+l
+
+x[0] = 5
+y[0] = 4
+
+h(x[], y[])
+n(x[], y[])
+
+halt
diff --git a/tests/bc/scripts/array.txt b/tests/bc/scripts/array.txt
new file mode 100644
index 000000000000..2e30ae5899e8
--- /dev/null
+++ b/tests/bc/scripts/array.txt
@@ -0,0 +1,428 @@
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+0
+0
+0
+204
+0
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+0
+0
+0
+204
+0
+0
+-1
+-2
+-3
+-4
+-5
+-6
+-7
+-8
+-9
+-10
+-11
+-12
+-13
+-14
+-15
+-16
+-17
+-18
+-19
+-20
+-21
+-22
+-23
+-24
+-25
+-26
+-27
+-28
+-29
+-30
+-31
+-32
+-33
+-34
+-35
+-36
+-37
+-38
+-39
+-40
+-41
+-42
+-43
+-44
+-45
+-46
+-47
+-48
+-49
+-50
+-51
+-52
+-53
+-54
+-55
+-56
+-57
+-58
+-59
+-60
+-61
+-62
+-63
+-64
+-65
+-66
+-67
+-68
+-69
+-70
+-71
+-72
+-73
+-74
+-75
+-76
+-77
+-78
+-79
+-80
+-81
+-82
+-83
+-84
+-85
+-86
+-87
+-88
+-89
+-90
+-91
+-92
+-93
+-94
+-95
+-96
+-97
+-98
+-99
+-100
+-101
+-102
+-103
+-104
+0
+0
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+0
+0
+0
+204
+0
+105
+-1
+.80000000000000000000
diff --git a/tests/bc/scripts/atan.bc b/tests/bc/scripts/atan.bc
new file mode 100755
index 000000000000..9d47f415c5b5
--- /dev/null
+++ b/tests/bc/scripts/atan.bc
@@ -0,0 +1,11 @@
+#! /usr/bin/bc -q
+
+for (i = 1; i <= 100; ++i) {
+ print "scale = ", i, "\n"
+ print "a(.267)\n"
+ print "a(1)\n"
+}
+
+print "halt\n"
+
+halt
diff --git a/tests/bc/scripts/atan.txt b/tests/bc/scripts/atan.txt
new file mode 100644
index 000000000000..f4383f544ec6
--- /dev/null
+++ b/tests/bc/scripts/atan.txt
@@ -0,0 +1,301 @@
+scale = 1
+a(.267)
+a(1)
+scale = 2
+a(.267)
+a(1)
+scale = 3
+a(.267)
+a(1)
+scale = 4
+a(.267)
+a(1)
+scale = 5
+a(.267)
+a(1)
+scale = 6
+a(.267)
+a(1)
+scale = 7
+a(.267)
+a(1)
+scale = 8
+a(.267)
+a(1)
+scale = 9
+a(.267)
+a(1)
+scale = 10
+a(.267)
+a(1)
+scale = 11
+a(.267)
+a(1)
+scale = 12
+a(.267)
+a(1)
+scale = 13
+a(.267)
+a(1)
+scale = 14
+a(.267)
+a(1)
+scale = 15
+a(.267)
+a(1)
+scale = 16
+a(.267)
+a(1)
+scale = 17
+a(.267)
+a(1)
+scale = 18
+a(.267)
+a(1)
+scale = 19
+a(.267)
+a(1)
+scale = 20
+a(.267)
+a(1)
+scale = 21
+a(.267)
+a(1)
+scale = 22
+a(.267)
+a(1)
+scale = 23
+a(.267)
+a(1)
+scale = 24
+a(.267)
+a(1)
+scale = 25
+a(.267)
+a(1)
+scale = 26
+a(.267)
+a(1)
+scale = 27
+a(.267)
+a(1)
+scale = 28
+a(.267)
+a(1)
+scale = 29
+a(.267)
+a(1)
+scale = 30
+a(.267)
+a(1)
+scale = 31
+a(.267)
+a(1)
+scale = 32
+a(.267)
+a(1)
+scale = 33
+a(.267)
+a(1)
+scale = 34
+a(.267)
+a(1)
+scale = 35
+a(.267)
+a(1)
+scale = 36
+a(.267)
+a(1)
+scale = 37
+a(.267)
+a(1)
+scale = 38
+a(.267)
+a(1)
+scale = 39
+a(.267)
+a(1)
+scale = 40
+a(.267)
+a(1)
+scale = 41
+a(.267)
+a(1)
+scale = 42
+a(.267)
+a(1)
+scale = 43
+a(.267)
+a(1)
+scale = 44
+a(.267)
+a(1)
+scale = 45
+a(.267)
+a(1)
+scale = 46
+a(.267)
+a(1)
+scale = 47
+a(.267)
+a(1)
+scale = 48
+a(.267)
+a(1)
+scale = 49
+a(.267)
+a(1)
+scale = 50
+a(.267)
+a(1)
+scale = 51
+a(.267)
+a(1)
+scale = 52
+a(.267)
+a(1)
+scale = 53
+a(.267)
+a(1)
+scale = 54
+a(.267)
+a(1)
+scale = 55
+a(.267)
+a(1)
+scale = 56
+a(.267)
+a(1)
+scale = 57
+a(.267)
+a(1)
+scale = 58
+a(.267)
+a(1)
+scale = 59
+a(.267)
+a(1)
+scale = 60
+a(.267)
+a(1)
+scale = 61
+a(.267)
+a(1)
+scale = 62
+a(.267)
+a(1)
+scale = 63
+a(.267)
+a(1)
+scale = 64
+a(.267)
+a(1)
+scale = 65
+a(.267)
+a(1)
+scale = 66
+a(.267)
+a(1)
+scale = 67
+a(.267)
+a(1)
+scale = 68
+a(.267)
+a(1)
+scale = 69
+a(.267)
+a(1)
+scale = 70
+a(.267)
+a(1)
+scale = 71
+a(.267)
+a(1)
+scale = 72
+a(.267)
+a(1)
+scale = 73
+a(.267)
+a(1)
+scale = 74
+a(.267)
+a(1)
+scale = 75
+a(.267)
+a(1)
+scale = 76
+a(.267)
+a(1)
+scale = 77
+a(.267)
+a(1)
+scale = 78
+a(.267)
+a(1)
+scale = 79
+a(.267)
+a(1)
+scale = 80
+a(.267)
+a(1)
+scale = 81
+a(.267)
+a(1)
+scale = 82
+a(.267)
+a(1)
+scale = 83
+a(.267)
+a(1)
+scale = 84
+a(.267)
+a(1)
+scale = 85
+a(.267)
+a(1)
+scale = 86
+a(.267)
+a(1)
+scale = 87
+a(.267)
+a(1)
+scale = 88
+a(.267)
+a(1)
+scale = 89
+a(.267)
+a(1)
+scale = 90
+a(.267)
+a(1)
+scale = 91
+a(.267)
+a(1)
+scale = 92
+a(.267)
+a(1)
+scale = 93
+a(.267)
+a(1)
+scale = 94
+a(.267)
+a(1)
+scale = 95
+a(.267)
+a(1)
+scale = 96
+a(.267)
+a(1)
+scale = 97
+a(.267)
+a(1)
+scale = 98
+a(.267)
+a(1)
+scale = 99
+a(.267)
+a(1)
+scale = 100
+a(.267)
+a(1)
+halt
diff --git a/tests/bc/scripts/bessel.bc b/tests/bc/scripts/bessel.bc
new file mode 100755
index 000000000000..b82eee30d19e
--- /dev/null
+++ b/tests/bc/scripts/bessel.bc
@@ -0,0 +1,43 @@
+#! /usr/bin/bc -q
+
+t[0] = 0
+t[1] = 0.5
+t[2] = 1
+t[3] = 1.5
+t[4] = 1.74
+t[5] = 2
+t[6] = 3.2345
+t[7] = 100
+t[8] = -0.5
+t[9] = -1
+t[10] = -1.5
+t[11] = -1.74
+t[12] = -2
+t[13] = -3.2345
+t[14] = -100
+
+l = 15
+
+a[0] = t[0]
+
+for (i = 1; i < l; ++i) {
+ a[i * 2 - 1] = t[i]
+ a[i * 2] = -t[i]
+}
+
+l *= 2
+l -= 1
+
+for (i = 0; i < l; ++i) {
+ for (j = 0; j < l; ++j) {
+ print "j(", a[i], ", ", a[j], ")\n"
+ }
+}
+
+# These are specific tests that bc could not pass at one time.
+print "j(3, 0.75)\n"
+print "scale = 0; j(40, 0.75)\n"
+
+print "halt\n"
+
+halt
diff --git a/tests/bc/scripts/divide.bc b/tests/bc/scripts/divide.bc
new file mode 100644
index 000000000000..8527ffc35666
--- /dev/null
+++ b/tests/bc/scripts/divide.bc
@@ -0,0 +1,22 @@
+#! /usr/bin/bc -lq
+
+scale = 20
+x = 1234567890 * 10^(-scale)
+len = 1 + 2 * scale
+
+x
+scale += 10
+
+for (i = 0; i <= len; ++i) {
+ a[i] = x * (10^i)
+ a[i]
+}
+
+for (i = 1; i <= 10000; ++i) {
+ for (j = 0; j < len; ++j) {
+ a[0] / a[j]
+ (a[0] * i) / a[j]
+ a[0] / (a[j] * i)
+ (a[0] * i) / (a[j] * i)
+ }
+}
diff --git a/tests/bc/scripts/functions.bc b/tests/bc/scripts/functions.bc
new file mode 100644
index 000000000000..80d6d1623d8d
--- /dev/null
+++ b/tests/bc/scripts/functions.bc
@@ -0,0 +1,7 @@
+e(0.5)
+
+define e(x) {
+ return x
+}
+
+e(0.5)
diff --git a/tests/bc/scripts/functions.txt b/tests/bc/scripts/functions.txt
new file mode 100644
index 000000000000..6e5975cb9d67
--- /dev/null
+++ b/tests/bc/scripts/functions.txt
@@ -0,0 +1,2 @@
+1.64872127070012814684
+.5
diff --git a/tests/bc/scripts/globals.bc b/tests/bc/scripts/globals.bc
new file mode 100755
index 000000000000..e9a0c6dbacd3
--- /dev/null
+++ b/tests/bc/scripts/globals.bc
@@ -0,0 +1,23 @@
+#! /usr/bin/bc -gq
+
+define i(x) {
+ ibase=x
+ return ibase
+}
+
+define o(x) {
+ obase=x
+ return obase
+}
+
+define r(x) {
+ scale=x
+ return scale
+}
+
+i(11)
+ibase
+o(12)
+obase
+r(15)
+scale
diff --git a/tests/bc/scripts/globals.txt b/tests/bc/scripts/globals.txt
new file mode 100644
index 000000000000..e7faccdfed0b
--- /dev/null
+++ b/tests/bc/scripts/globals.txt
@@ -0,0 +1,6 @@
+11
+10
+12
+10
+15
+20
diff --git a/tests/bc/scripts/len.bc b/tests/bc/scripts/len.bc
new file mode 100644
index 000000000000..ec931f2386a5
--- /dev/null
+++ b/tests/bc/scripts/len.bc
@@ -0,0 +1,48 @@
+define fast_gcd(a, b) {
+
+ if (a == b) return a;
+ if (a > b) return fast_gcd(a - b, b)
+
+ return fast_gcd(a, b - a);
+}
+
+define void r_reduce(*r[]) {
+
+ auto g,s;
+
+ if (length(r[]) != 2) sqrt(-1);
+ if (scale(r[0])) 2^r[0];
+ if (scale(r[1])) 2^r[1];
+
+ if (r[0] >= 0 && r[1] >= 0) g = fast_gcd(r[0], r[1]);
+ else g = gcd(r[0], r[1]);
+
+ s = scale;
+ scale = 0;
+
+ r[0] /= g;
+ r[1] /= g;
+
+ scale = s;
+}
+
+define void r_init(*r[], a, b) {
+ r[0] = a;
+ r[1] = b;
+ r_reduce(r[]);
+}
+
+define void r_initi(*r[], i, a, b) {
+
+ length(r[]);
+
+ r[0] = i * b + a;
+ r[1] = b;
+
+ length(r[]);
+
+ r_reduce(r[]);
+}
+
+length(a[])
+r_initi(a[], 5, 63, 94);
diff --git a/tests/bc/scripts/len.txt b/tests/bc/scripts/len.txt
new file mode 100644
index 000000000000..33280629d45d
--- /dev/null
+++ b/tests/bc/scripts/len.txt
@@ -0,0 +1,3 @@
+1
+1
+2
diff --git a/tests/bc/scripts/multiply.bc b/tests/bc/scripts/multiply.bc
new file mode 100644
index 000000000000..2eb975aa68c4
--- /dev/null
+++ b/tests/bc/scripts/multiply.bc
@@ -0,0 +1,19 @@
+#! /usr/bin/bc -lq
+
+scale = 20
+x = 1234567890 / scale
+len = length(x) + 1 + scale
+
+for (i = 0; i <= len; ++i) {
+ a[i] = x * (10^i)
+ a[i]
+}
+
+for (i = 1; i <= 10000; ++i) {
+ for (j = 0; j < len; ++j) {
+ a[0] * a[j]
+ (a[0] * i) * a[j]
+ a[0] * (a[j] * i)
+ (a[0] * i) * (a[j] * i)
+ }
+}
diff --git a/tests/bc/scripts/parse.bc b/tests/bc/scripts/parse.bc
new file mode 100755
index 000000000000..179daf116efd
--- /dev/null
+++ b/tests/bc/scripts/parse.bc
@@ -0,0 +1,20 @@
+#! /usr/bin/bc -q
+
+for (b = 2; b <= 16; ++b) {
+ if (b == 10) continue
+ obase = 10
+ print "ibase = A; ibase = ", b, "\n"
+ print "\qibase = \q\n"
+ b
+ obase = b
+ for (i = 0; i <= 4096; ++i) {
+ i
+ print "0.", i, "\n"
+ print ".", i, "\n"
+ print "1.", i, "\n"
+ print i, ".", "\n"
+ print i, ".", i, "\n"
+ }
+}
+
+halt
diff --git a/tests/bc/scripts/print.bc b/tests/bc/scripts/print.bc
new file mode 100755
index 000000000000..9530cbdb3fc2
--- /dev/null
+++ b/tests/bc/scripts/print.bc
@@ -0,0 +1,25 @@
+#! /usr/bin/bc -q
+
+for (b = 2; b <= 100; ++b) {
+
+ if (b == 10) continue
+
+ s = b * b
+
+ print "obase = ", b, "\n"
+ print "\qobase = \q\n"
+ b
+
+ for (i = 0; i <= s; ++i) {
+ i
+ print "0.", i, "\n"
+ print ".", i, "\n"
+ print "1.", i, "\n"
+ print i, ".", "\n"
+ print i, ".", i, "\n"
+ }
+
+ 2189432174861923048671023498128347619023487610234689172304.192748960128745108927461089237469018723460
+}
+
+halt
diff --git a/tests/bc/scripts/rand.bc b/tests/bc/scripts/rand.bc
new file mode 100644
index 000000000000..54173c713612
--- /dev/null
+++ b/tests/bc/scripts/rand.bc
@@ -0,0 +1,97 @@
+#! /usr/bin/bc
+
+define x(x) {
+ seed = x
+ seed@20
+ return seed
+}
+
+define y(x) {
+ auto s
+ seed@20
+ s = x(x)
+ seed@20
+ return s
+}
+
+define void u(x) {
+ seed = x
+ seed@20
+}
+
+define void v(x) {
+ u(x)
+ seed@20
+}
+
+define g(x) {
+ auto s
+ s = irand(x)
+ s < x
+ return seed
+}
+
+define h(x) {
+ auto s
+ s = g(x)
+ s == seed
+ return s
+}
+
+define j(x) {
+ auto s, r
+ seed@20
+ s = seed
+ r = rand()
+ seed = x
+ s != seed
+ return rand()
+}
+
+define k(x) {
+ auto s, r
+ s = seed
+ seed@20
+ r = j(x)
+ s != seed
+ seed = x
+ rand() == r
+ return r
+}
+
+define m(*a[]) {
+ auto i
+ seed = seed
+ for (i = 0; i < 100; ++i) {
+ a[i] = rand()
+ }
+ return seed
+}
+
+v(50.5)
+seed@20
+
+s = y(75.25)
+s@20
+seed@20
+
+r = rand()
+i = irand(r)
+
+i < r
+
+s = h(maxrand() ^ 4)
+s == seed
+
+seed = 2398.0625
+r = k(38.45)
+seed = 38.45
+r == rand()
+
+s = m(a[])
+
+for (i = 0; i < 100; ++i) {
+ rand() == a[i]
+}
+
+s == seed
diff --git a/tests/bc/scripts/rand.txt b/tests/bc/scripts/rand.txt
new file mode 100644
index 000000000000..886daca15ec0
--- /dev/null
+++ b/tests/bc/scripts/rand.txt
@@ -0,0 +1,119 @@
+50.50000000000000000000
+50.50000000000000000000
+50.50000000000000000000
+50.50000000000000000000
+75.25000000000000000000
+50.50000000000000000000
+75.25000000000000000000
+50.50000000000000000000
+1
+1
+1
+1
+2398.06250000000000000000
+2398.06250000000000000000
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
diff --git a/tests/bc/scripts/references.bc b/tests/bc/scripts/references.bc
new file mode 100755
index 000000000000..8188f17aa017
--- /dev/null
+++ b/tests/bc/scripts/references.bc
@@ -0,0 +1,408 @@
+#! /usr/bin/bc -q
+
+define printarray(a[], len) {
+
+ auto i
+
+ for (i = 0; i < len; ++i) {
+ a[i]
+ }
+}
+
+define a2(a[], len) {
+
+ auto i
+
+ for (i = 0; i < len; ++i) {
+ a[i] = a[i] * a[i]
+ }
+
+ printarray(a[], len)
+}
+
+define a4(a__[], len) {
+
+ auto i
+
+ for (i = 0; i < len; ++i) {
+ a__[i] = a__[i] * a__[i]
+ }
+
+ printarray(a__[], len)
+}
+
+define a6(*a__[], len) {
+
+ auto i
+
+ for (i = 0; i < len; ++i) {
+ a__[i] = a__[i] * a__[i]
+ }
+
+ printarray(a__[], len)
+}
+
+define a1(*a[], len) {
+
+ auto i
+
+ for (i = 0; i < len; ++i) {
+ a[i] = i
+ }
+
+ a2(a[], len)
+
+ printarray(a[], len)
+}
+
+define a3(*a__[], len) {
+
+ auto i
+
+ for (i = 0; i < len; ++i) {
+ a__[i] = i
+ }
+
+ a4(a__[], len)
+
+ printarray(a__[], len)
+}
+
+define a5(*a__[], len) {
+
+ auto i
+
+ for (i = 0; i < len; ++i) {
+ a__[i] = i
+ }
+
+ a2(a__[], len)
+
+ printarray(a__[], len)
+}
+
+define a7(*a__[], len) {
+
+ auto i
+
+ for (i = 0; i < len; ++i) {
+ a__[i] = i
+ }
+
+ a6(a__[], len)
+
+ printarray(a__[], len)
+}
+
+len = 16
+
+a1(a[], len)
+printarray(a[], len)
+a3(a[], len)
+printarray(a[], len)
+a5(a[], len)
+printarray(a[], len)
+a7(a[], len)
+printarray(a[], len)
+
+a1(b[], len)
+printarray(b[], len)
+a3(b[], len)
+printarray(b[], len)
+a5(b[], len)
+printarray(b[], len)
+a7(b[], len)
+printarray(b[], len)
+
+a1[0] = 0
+a2[0] = 0
+a3[0] = 0
+a4[0] = 0
+a5[0] = 0
+a6[0] = 0
+a7[0] = 0
+a8[0] = 0
+a9[0] = 0
+a10[0] = 0
+a11[0] = 0
+a12[0] = 0
+a13[0] = 0
+a14[0] = 0
+a15[0] = 0
+a16[0] = 0
+a17[0] = 0
+a18[0] = 0
+a19[0] = 0
+a20[0] = 0
+a21[0] = 0
+a22[0] = 0
+a23[0] = 0
+a24[0] = 0
+a25[0] = 0
+a26[0] = 0
+a27[0] = 0
+a28[0] = 0
+a29[0] = 0
+a30[0] = 0
+a31[0] = 0
+a32[0] = 0
+a33[0] = 0
+a34[0] = 0
+a35[0] = 0
+a36[0] = 0
+a37[0] = 0
+a38[0] = 0
+a39[0] = 0
+a40[0] = 0
+a41[0] = 0
+a42[0] = 0
+a43[0] = 0
+a44[0] = 0
+a45[0] = 0
+a46[0] = 0
+a47[0] = 0
+a48[0] = 0
+a49[0] = 0
+a50[0] = 0
+a51[0] = 0
+a52[0] = 0
+a53[0] = 0
+a54[0] = 0
+a55[0] = 0
+a56[0] = 0
+a57[0] = 0
+a58[0] = 0
+a59[0] = 0
+a60[0] = 0
+a61[0] = 0
+a62[0] = 0
+a63[0] = 0
+a64[0] = 0
+a65[0] = 0
+a66[0] = 0
+a67[0] = 0
+a68[0] = 0
+a69[0] = 0
+a70[0] = 0
+a71[0] = 0
+a72[0] = 0
+a73[0] = 0
+a74[0] = 0
+a75[0] = 0
+a76[0] = 0
+a77[0] = 0
+a78[0] = 0
+a79[0] = 0
+a80[0] = 0
+a81[0] = 0
+a82[0] = 0
+a83[0] = 0
+a84[0] = 0
+a85[0] = 0
+a86[0] = 0
+a87[0] = 0
+a88[0] = 0
+a89[0] = 0
+a90[0] = 0
+a91[0] = 0
+a92[0] = 0
+a93[0] = 0
+a94[0] = 0
+a95[0] = 0
+a96[0] = 0
+a97[0] = 0
+a98[0] = 0
+a99[0] = 0
+a100[0] = 0
+a101[0] = 0
+a102[0] = 0
+a103[0] = 0
+a104[0] = 0
+a105[0] = 0
+a106[0] = 0
+a107[0] = 0
+a108[0] = 0
+a109[0] = 0
+a110[0] = 0
+a111[0] = 0
+a112[0] = 0
+a113[0] = 0
+a114[0] = 0
+a115[0] = 0
+a116[0] = 0
+a117[0] = 0
+a118[0] = 0
+a119[0] = 0
+a120[0] = 0
+a121[0] = 0
+a122[0] = 0
+a123[0] = 0
+a124[0] = 0
+a125[0] = 0
+a126[0] = 0
+a127[0] = 0
+a128[0] = 0
+a129[0] = 0
+a130[0] = 0
+a131[0] = 0
+a132[0] = 0
+a133[0] = 0
+a134[0] = 0
+a135[0] = 0
+a136[0] = 0
+a137[0] = 0
+a138[0] = 0
+a139[0] = 0
+a140[0] = 0
+a141[0] = 0
+a142[0] = 0
+a143[0] = 0
+a144[0] = 0
+a145[0] = 0
+a146[0] = 0
+a147[0] = 0
+a148[0] = 0
+a149[0] = 0
+a150[0] = 0
+a151[0] = 0
+a152[0] = 0
+a153[0] = 0
+a154[0] = 0
+a155[0] = 0
+a156[0] = 0
+a157[0] = 0
+a158[0] = 0
+a159[0] = 0
+a160[0] = 0
+a161[0] = 0
+a162[0] = 0
+a163[0] = 0
+a164[0] = 0
+a165[0] = 0
+a166[0] = 0
+a167[0] = 0
+a168[0] = 0
+a169[0] = 0
+a170[0] = 0
+a171[0] = 0
+a172[0] = 0
+a173[0] = 0
+a174[0] = 0
+a175[0] = 0
+a176[0] = 0
+a177[0] = 0
+a178[0] = 0
+a179[0] = 0
+a180[0] = 0
+a181[0] = 0
+a182[0] = 0
+a183[0] = 0
+a184[0] = 0
+a185[0] = 0
+a186[0] = 0
+a187[0] = 0
+a188[0] = 0
+a189[0] = 0
+a190[0] = 0
+a191[0] = 0
+a192[0] = 0
+a193[0] = 0
+a194[0] = 0
+a195[0] = 0
+a196[0] = 0
+a197[0] = 0
+a198[0] = 0
+a199[0] = 0
+a200[0] = 0
+a201[0] = 0
+a202[0] = 0
+a203[0] = 0
+a204[0] = 0
+a205[0] = 0
+a206[0] = 0
+a207[0] = 0
+a208[0] = 0
+a209[0] = 0
+a210[0] = 0
+a211[0] = 0
+a212[0] = 0
+a213[0] = 0
+a214[0] = 0
+a215[0] = 0
+a216[0] = 0
+a217[0] = 0
+a218[0] = 0
+a219[0] = 0
+a220[0] = 0
+a221[0] = 0
+a222[0] = 0
+a223[0] = 0
+a224[0] = 0
+a225[0] = 0
+a226[0] = 0
+a227[0] = 0
+a228[0] = 0
+a229[0] = 0
+a230[0] = 0
+a231[0] = 0
+a232[0] = 0
+a233[0] = 0
+a234[0] = 0
+a235[0] = 0
+a236[0] = 0
+a237[0] = 0
+a238[0] = 0
+a239[0] = 0
+a240[0] = 0
+a241[0] = 0
+a242[0] = 0
+a243[0] = 0
+a244[0] = 0
+a245[0] = 0
+a246[0] = 0
+a247[0] = 0
+a248[0] = 0
+a249[0] = 0
+a250[0] = 0
+a251[0] = 0
+a252[0] = 0
+a253[0] = 0
+a254[0] = 0
+a255[0] = 0
+a256[0] = 0
+
+a1(a253[], len)
+printarray(a253[], len)
+a3(a253[], len)
+printarray(a253[], len)
+a5(a253[], len)
+printarray(a253[], len)
+a7(a253[], len)
+printarray(a253[], len)
+
+a1(a254[], len)
+printarray(a254[], len)
+a3(a254[], len)
+printarray(a254[], len)
+a5(a254[], len)
+printarray(a254[], len)
+a7(a254[], len)
+printarray(a254[], len)
+
+a1(a255[], len)
+printarray(a255[], len)
+a3(a255[], len)
+printarray(a255[], len)
+a5(a255[], len)
+printarray(a255[], len)
+a7(a255[], len)
+printarray(a255[], len)
+
+a1(a256[], len)
+printarray(a256[], len)
+a3(a256[], len)
+printarray(a256[], len)
+a5(a256[], len)
+printarray(a256[], len)
+a7(a256[], len)
+printarray(a256[], len)
diff --git a/tests/bc/scripts/references.txt b/tests/bc/scripts/references.txt
new file mode 100644
index 000000000000..1e5f65faf75c
--- /dev/null
+++ b/tests/bc/scripts/references.txt
@@ -0,0 +1,1272 @@
+0
+1
+4
+9
+16
+25
+36
+49
+64
+81
+100
+121
+144
+169
+196
+225
+0
+0
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+0
+0
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+0
+0
+1
+4
+9
+16
+25
+36
+49
+64
+81
+100
+121
+144
+169
+196
+225
+0
+0
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+0
+0
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+0
+0
+1
+4
+9
+16
+25
+36
+49
+64
+81
+100
+121
+144
+169
+196
+225
+0
+0
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+0
+0
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+0
+0
+1
+4
+9
+16
+25
+36
+49
+64
+81
+100
+121
+144
+169
+196
+225
+0
+0
+0
+1
+4
+9
+16
+25
+36
+49
+64
+81
+100
+121
+144
+169
+196
+225
+0
+0
+0
+1
+4
+9
+16
+25
+36
+49
+64
+81
+100
+121
+144
+169
+196
+225
+0
+0
+1
+4
+9
+16
+25
+36
+49
+64
+81
+100
+121
+144
+169
+196
+225
+0
+0
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+0
+0
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+0
+0
+1
+4
+9
+16
+25
+36
+49
+64
+81
+100
+121
+144
+169
+196
+225
+0
+0
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+0
+0
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+0
+0
+1
+4
+9
+16
+25
+36
+49
+64
+81
+100
+121
+144
+169
+196
+225
+0
+0
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+0
+0
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+0
+0
+1
+4
+9
+16
+25
+36
+49
+64
+81
+100
+121
+144
+169
+196
+225
+0
+0
+0
+1
+4
+9
+16
+25
+36
+49
+64
+81
+100
+121
+144
+169
+196
+225
+0
+0
+0
+1
+4
+9
+16
+25
+36
+49
+64
+81
+100
+121
+144
+169
+196
+225
+0
+0
+1
+4
+9
+16
+25
+36
+49
+64
+81
+100
+121
+144
+169
+196
+225
+0
+0
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+0
+0
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+0
+0
+1
+4
+9
+16
+25
+36
+49
+64
+81
+100
+121
+144
+169
+196
+225
+0
+0
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+0
+0
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+0
+0
+1
+4
+9
+16
+25
+36
+49
+64
+81
+100
+121
+144
+169
+196
+225
+0
+0
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+0
+0
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+0
+0
+1
+4
+9
+16
+25
+36
+49
+64
+81
+100
+121
+144
+169
+196
+225
+0
+0
+0
+1
+4
+9
+16
+25
+36
+49
+64
+81
+100
+121
+144
+169
+196
+225
+0
+0
+0
+1
+4
+9
+16
+25
+36
+49
+64
+81
+100
+121
+144
+169
+196
+225
+0
+0
+1
+4
+9
+16
+25
+36
+49
+64
+81
+100
+121
+144
+169
+196
+225
+0
+0
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+0
+0
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+0
+0
+1
+4
+9
+16
+25
+36
+49
+64
+81
+100
+121
+144
+169
+196
+225
+0
+0
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+0
+0
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+0
+0
+1
+4
+9
+16
+25
+36
+49
+64
+81
+100
+121
+144
+169
+196
+225
+0
+0
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+0
+0
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+0
+0
+1
+4
+9
+16
+25
+36
+49
+64
+81
+100
+121
+144
+169
+196
+225
+0
+0
+0
+1
+4
+9
+16
+25
+36
+49
+64
+81
+100
+121
+144
+169
+196
+225
+0
+0
+0
+1
+4
+9
+16
+25
+36
+49
+64
+81
+100
+121
+144
+169
+196
+225
+0
+0
+1
+4
+9
+16
+25
+36
+49
+64
+81
+100
+121
+144
+169
+196
+225
+0
+0
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+0
+0
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+0
+0
+1
+4
+9
+16
+25
+36
+49
+64
+81
+100
+121
+144
+169
+196
+225
+0
+0
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+0
+0
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+0
+0
+1
+4
+9
+16
+25
+36
+49
+64
+81
+100
+121
+144
+169
+196
+225
+0
+0
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+0
+0
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+0
+0
+1
+4
+9
+16
+25
+36
+49
+64
+81
+100
+121
+144
+169
+196
+225
+0
+0
+0
+1
+4
+9
+16
+25
+36
+49
+64
+81
+100
+121
+144
+169
+196
+225
+0
+0
+0
+1
+4
+9
+16
+25
+36
+49
+64
+81
+100
+121
+144
+169
+196
+225
+0
+0
+1
+4
+9
+16
+25
+36
+49
+64
+81
+100
+121
+144
+169
+196
+225
+0
+0
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+0
+0
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+0
+0
+1
+4
+9
+16
+25
+36
+49
+64
+81
+100
+121
+144
+169
+196
+225
+0
+0
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+0
+0
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+0
+0
+1
+4
+9
+16
+25
+36
+49
+64
+81
+100
+121
+144
+169
+196
+225
+0
+0
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+0
+0
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+0
+0
+1
+4
+9
+16
+25
+36
+49
+64
+81
+100
+121
+144
+169
+196
+225
+0
+0
+0
+1
+4
+9
+16
+25
+36
+49
+64
+81
+100
+121
+144
+169
+196
+225
+0
+0
+0
+1
+4
+9
+16
+25
+36
+49
+64
+81
+100
+121
+144
+169
+196
+225
+0
diff --git a/tests/bc/scripts/screen.bc b/tests/bc/scripts/screen.bc
new file mode 100755
index 000000000000..ea36b5ff4bea
--- /dev/null
+++ b/tests/bc/scripts/screen.bc
@@ -0,0 +1,20 @@
+#! /usr/bin/bc -q
+
+define a(i, j) {
+ scale = 0
+ if(i % 2 == 0) return i;
+ if(j - i >= 0.5) return i + 1;
+ return i - 1;
+}
+
+define x(w, h, n) {
+ scale = 20
+ f = w / n
+ scale = 0
+ i = h / f
+ scale = 1
+ j = h / f
+ return a(i, j);
+}
+
+x(720, 576, 600)
diff --git a/tests/bc/scripts/screen.txt b/tests/bc/scripts/screen.txt
new file mode 100644
index 000000000000..36e082614b99
--- /dev/null
+++ b/tests/bc/scripts/screen.txt
@@ -0,0 +1 @@
+480
diff --git a/tests/bc/scripts/subtract.bc b/tests/bc/scripts/subtract.bc
new file mode 100644
index 000000000000..81ac895c49ed
--- /dev/null
+++ b/tests/bc/scripts/subtract.bc
@@ -0,0 +1,17 @@
+#! /usr/bin/bc -lq
+
+scale = 20
+x = 1234567890 / scale
+len = length(x) + 1 + scale
+len *= 2
+
+for (i = 0; i <= len; ++i) {
+ a[i] = x * (10^i)
+ a[i]
+}
+
+for (i = 1; i <= 10000; ++i) {
+ for (j = 0; j < len; ++j) {
+ a[0] - a[j]
+ }
+}
diff --git a/tests/bc/shift.txt b/tests/bc/shift.txt
new file mode 100644
index 000000000000..40b973358f96
--- /dev/null
+++ b/tests/bc/shift.txt
@@ -0,0 +1,5341 @@
+0 << 0
+1 << 0
+2 << 0
+0.0023896 << 0
+1.298346 << 0
+2.00000000 << 0
+0.0023896 << 3
+1.298346 << 4
+2.00000000 << 5
+x = 89136.892348976
+x <<= 7
+x
+x = 1892634051829351283289298
+x <<= 24
+x
+0 >> 0
+1 >> 0
+2 >> 0
+0.0023896 >> 0
+1.298346 >> 0
+2.00000000 >> 0
+0.0023896 >> 3
+1.298346 >> 4
+2.00000000 >> 5
+x = 89136.892348976
+x >>= 7
+x
+x = 1892634051829351283289298
+x >>= 24
+x
+-1 << 0
+-2 << 0
+-0.0023896 << 0
+-1.298346 << 0
+-2.00000000 << 0
+-0.0023896 << 3
+-1.298346 << 4
+-2.00000000 << 5
+x = -89136.892348976
+x <<= 7
+x
+x = -1892634051829351283289298
+x <<= 24
+x
+-1 >> 0
+-2 >> 0
+-0.0023896 >> 0
+-1.298346 >> 0
+-2.00000000 >> 0
+-0.0023896 >> 3
+-1.298346 >> 4
+-2.00000000 >> 5
+x = -89136.892348976
+x >>= 7
+x
+-x
+x = -1892634051829351283289298
+x >>= 24
+x
+-x
+(0 >> 12) / 2
+0 << 0
+0 << 1
+0 << 2
+0 << 3
+0 << 4
+0 << 5
+0 << 6
+0 << 7
+0 << 8
+0 << 9
+0 << 10
+0 << 11
+0 << 12
+0 << 13
+0 << 14
+0 << 15
+0 << 16
+0 << 17
+0 << 18
+0 << 19
+0.1 << 0
+0.1 << 1
+0.1 << 2
+0.1 << 3
+0.1 << 4
+0.1 << 5
+0.1 << 6
+0.1 << 7
+0.1 << 8
+0.1 << 9
+0.1 << 10
+0.1 << 11
+0.1 << 12
+0.1 << 13
+0.1 << 14
+0.1 << 15
+0.1 << 16
+0.1 << 17
+0.1 << 18
+0.1 << 19
+0.01 << 0
+0.01 << 1
+0.01 << 2
+0.01 << 3
+0.01 << 4
+0.01 << 5
+0.01 << 6
+0.01 << 7
+0.01 << 8
+0.01 << 9
+0.01 << 10
+0.01 << 11
+0.01 << 12
+0.01 << 13
+0.01 << 14
+0.01 << 15
+0.01 << 16
+0.01 << 17
+0.01 << 18
+0.01 << 19
+0.001 << 0
+0.001 << 1
+0.001 << 2
+0.001 << 3
+0.001 << 4
+0.001 << 5
+0.001 << 6
+0.001 << 7
+0.001 << 8
+0.001 << 9
+0.001 << 10
+0.001 << 11
+0.001 << 12
+0.001 << 13
+0.001 << 14
+0.001 << 15
+0.001 << 16
+0.001 << 17
+0.001 << 18
+0.001 << 19
+0.0001 << 0
+0.0001 << 1
+0.0001 << 2
+0.0001 << 3
+0.0001 << 4
+0.0001 << 5
+0.0001 << 6
+0.0001 << 7
+0.0001 << 8
+0.0001 << 9
+0.0001 << 10
+0.0001 << 11
+0.0001 << 12
+0.0001 << 13
+0.0001 << 14
+0.0001 << 15
+0.0001 << 16
+0.0001 << 17
+0.0001 << 18
+0.0001 << 19
+0.00001 << 0
+0.00001 << 1
+0.00001 << 2
+0.00001 << 3
+0.00001 << 4
+0.00001 << 5
+0.00001 << 6
+0.00001 << 7
+0.00001 << 8
+0.00001 << 9
+0.00001 << 10
+0.00001 << 11
+0.00001 << 12
+0.00001 << 13
+0.00001 << 14
+0.00001 << 15
+0.00001 << 16
+0.00001 << 17
+0.00001 << 18
+0.00001 << 19
+0.000001 << 0
+0.000001 << 1
+0.000001 << 2
+0.000001 << 3
+0.000001 << 4
+0.000001 << 5
+0.000001 << 6
+0.000001 << 7
+0.000001 << 8
+0.000001 << 9
+0.000001 << 10
+0.000001 << 11
+0.000001 << 12
+0.000001 << 13
+0.000001 << 14
+0.000001 << 15
+0.000001 << 16
+0.000001 << 17
+0.000001 << 18
+0.000001 << 19
+0.0000001 << 0
+0.0000001 << 1
+0.0000001 << 2
+0.0000001 << 3
+0.0000001 << 4
+0.0000001 << 5
+0.0000001 << 6
+0.0000001 << 7
+0.0000001 << 8
+0.0000001 << 9
+0.0000001 << 10
+0.0000001 << 11
+0.0000001 << 12
+0.0000001 << 13
+0.0000001 << 14
+0.0000001 << 15
+0.0000001 << 16
+0.0000001 << 17
+0.0000001 << 18
+0.0000001 << 19
+0.00000001 << 0
+0.00000001 << 1
+0.00000001 << 2
+0.00000001 << 3
+0.00000001 << 4
+0.00000001 << 5
+0.00000001 << 6
+0.00000001 << 7
+0.00000001 << 8
+0.00000001 << 9
+0.00000001 << 10
+0.00000001 << 11
+0.00000001 << 12
+0.00000001 << 13
+0.00000001 << 14
+0.00000001 << 15
+0.00000001 << 16
+0.00000001 << 17
+0.00000001 << 18
+0.00000001 << 19
+0.000000001 << 0
+0.000000001 << 1
+0.000000001 << 2
+0.000000001 << 3
+0.000000001 << 4
+0.000000001 << 5
+0.000000001 << 6
+0.000000001 << 7
+0.000000001 << 8
+0.000000001 << 9
+0.000000001 << 10
+0.000000001 << 11
+0.000000001 << 12
+0.000000001 << 13
+0.000000001 << 14
+0.000000001 << 15
+0.000000001 << 16
+0.000000001 << 17
+0.000000001 << 18
+0.000000001 << 19
+0.0000000001 << 0
+0.0000000001 << 1
+0.0000000001 << 2
+0.0000000001 << 3
+0.0000000001 << 4
+0.0000000001 << 5
+0.0000000001 << 6
+0.0000000001 << 7
+0.0000000001 << 8
+0.0000000001 << 9
+0.0000000001 << 10
+0.0000000001 << 11
+0.0000000001 << 12
+0.0000000001 << 13
+0.0000000001 << 14
+0.0000000001 << 15
+0.0000000001 << 16
+0.0000000001 << 17
+0.0000000001 << 18
+0.0000000001 << 19
+1 << 0
+1 << 1
+1 << 2
+1 << 3
+1 << 4
+1 << 5
+1 << 6
+1 << 7
+1 << 8
+1 << 9
+1 << 10
+1 << 11
+1 << 12
+1 << 13
+1 << 14
+1 << 15
+1 << 16
+1 << 17
+1 << 18
+1 << 19
+1.1 << 0
+1.1 << 1
+1.1 << 2
+1.1 << 3
+1.1 << 4
+1.1 << 5
+1.1 << 6
+1.1 << 7
+1.1 << 8
+1.1 << 9
+1.1 << 10
+1.1 << 11
+1.1 << 12
+1.1 << 13
+1.1 << 14
+1.1 << 15
+1.1 << 16
+1.1 << 17
+1.1 << 18
+1.1 << 19
+1.01 << 0
+1.01 << 1
+1.01 << 2
+1.01 << 3
+1.01 << 4
+1.01 << 5
+1.01 << 6
+1.01 << 7
+1.01 << 8
+1.01 << 9
+1.01 << 10
+1.01 << 11
+1.01 << 12
+1.01 << 13
+1.01 << 14
+1.01 << 15
+1.01 << 16
+1.01 << 17
+1.01 << 18
+1.01 << 19
+1.001 << 0
+1.001 << 1
+1.001 << 2
+1.001 << 3
+1.001 << 4
+1.001 << 5
+1.001 << 6
+1.001 << 7
+1.001 << 8
+1.001 << 9
+1.001 << 10
+1.001 << 11
+1.001 << 12
+1.001 << 13
+1.001 << 14
+1.001 << 15
+1.001 << 16
+1.001 << 17
+1.001 << 18
+1.001 << 19
+1.0001 << 0
+1.0001 << 1
+1.0001 << 2
+1.0001 << 3
+1.0001 << 4
+1.0001 << 5
+1.0001 << 6
+1.0001 << 7
+1.0001 << 8
+1.0001 << 9
+1.0001 << 10
+1.0001 << 11
+1.0001 << 12
+1.0001 << 13
+1.0001 << 14
+1.0001 << 15
+1.0001 << 16
+1.0001 << 17
+1.0001 << 18
+1.0001 << 19
+1.00001 << 0
+1.00001 << 1
+1.00001 << 2
+1.00001 << 3
+1.00001 << 4
+1.00001 << 5
+1.00001 << 6
+1.00001 << 7
+1.00001 << 8
+1.00001 << 9
+1.00001 << 10
+1.00001 << 11
+1.00001 << 12
+1.00001 << 13
+1.00001 << 14
+1.00001 << 15
+1.00001 << 16
+1.00001 << 17
+1.00001 << 18
+1.00001 << 19
+1.000001 << 0
+1.000001 << 1
+1.000001 << 2
+1.000001 << 3
+1.000001 << 4
+1.000001 << 5
+1.000001 << 6
+1.000001 << 7
+1.000001 << 8
+1.000001 << 9
+1.000001 << 10
+1.000001 << 11
+1.000001 << 12
+1.000001 << 13
+1.000001 << 14
+1.000001 << 15
+1.000001 << 16
+1.000001 << 17
+1.000001 << 18
+1.000001 << 19
+1.0000001 << 0
+1.0000001 << 1
+1.0000001 << 2
+1.0000001 << 3
+1.0000001 << 4
+1.0000001 << 5
+1.0000001 << 6
+1.0000001 << 7
+1.0000001 << 8
+1.0000001 << 9
+1.0000001 << 10
+1.0000001 << 11
+1.0000001 << 12
+1.0000001 << 13
+1.0000001 << 14
+1.0000001 << 15
+1.0000001 << 16
+1.0000001 << 17
+1.0000001 << 18
+1.0000001 << 19
+1.00000001 << 0
+1.00000001 << 1
+1.00000001 << 2
+1.00000001 << 3
+1.00000001 << 4
+1.00000001 << 5
+1.00000001 << 6
+1.00000001 << 7
+1.00000001 << 8
+1.00000001 << 9
+1.00000001 << 10
+1.00000001 << 11
+1.00000001 << 12
+1.00000001 << 13
+1.00000001 << 14
+1.00000001 << 15
+1.00000001 << 16
+1.00000001 << 17
+1.00000001 << 18
+1.00000001 << 19
+1.000000001 << 0
+1.000000001 << 1
+1.000000001 << 2
+1.000000001 << 3
+1.000000001 << 4
+1.000000001 << 5
+1.000000001 << 6
+1.000000001 << 7
+1.000000001 << 8
+1.000000001 << 9
+1.000000001 << 10
+1.000000001 << 11
+1.000000001 << 12
+1.000000001 << 13
+1.000000001 << 14
+1.000000001 << 15
+1.000000001 << 16
+1.000000001 << 17
+1.000000001 << 18
+1.000000001 << 19
+1.0000000001 << 0
+1.0000000001 << 1
+1.0000000001 << 2
+1.0000000001 << 3
+1.0000000001 << 4
+1.0000000001 << 5
+1.0000000001 << 6
+1.0000000001 << 7
+1.0000000001 << 8
+1.0000000001 << 9
+1.0000000001 << 10
+1.0000000001 << 11
+1.0000000001 << 12
+1.0000000001 << 13
+1.0000000001 << 14
+1.0000000001 << 15
+1.0000000001 << 16
+1.0000000001 << 17
+1.0000000001 << 18
+1.0000000001 << 19
+10 << 0
+10 << 1
+10 << 2
+10 << 3
+10 << 4
+10 << 5
+10 << 6
+10 << 7
+10 << 8
+10 << 9
+10 << 10
+10 << 11
+10 << 12
+10 << 13
+10 << 14
+10 << 15
+10 << 16
+10 << 17
+10 << 18
+10 << 19
+10.1 << 0
+10.1 << 1
+10.1 << 2
+10.1 << 3
+10.1 << 4
+10.1 << 5
+10.1 << 6
+10.1 << 7
+10.1 << 8
+10.1 << 9
+10.1 << 10
+10.1 << 11
+10.1 << 12
+10.1 << 13
+10.1 << 14
+10.1 << 15
+10.1 << 16
+10.1 << 17
+10.1 << 18
+10.1 << 19
+10.01 << 0
+10.01 << 1
+10.01 << 2
+10.01 << 3
+10.01 << 4
+10.01 << 5
+10.01 << 6
+10.01 << 7
+10.01 << 8
+10.01 << 9
+10.01 << 10
+10.01 << 11
+10.01 << 12
+10.01 << 13
+10.01 << 14
+10.01 << 15
+10.01 << 16
+10.01 << 17
+10.01 << 18
+10.01 << 19
+10.001 << 0
+10.001 << 1
+10.001 << 2
+10.001 << 3
+10.001 << 4
+10.001 << 5
+10.001 << 6
+10.001 << 7
+10.001 << 8
+10.001 << 9
+10.001 << 10
+10.001 << 11
+10.001 << 12
+10.001 << 13
+10.001 << 14
+10.001 << 15
+10.001 << 16
+10.001 << 17
+10.001 << 18
+10.001 << 19
+10.0001 << 0
+10.0001 << 1
+10.0001 << 2
+10.0001 << 3
+10.0001 << 4
+10.0001 << 5
+10.0001 << 6
+10.0001 << 7
+10.0001 << 8
+10.0001 << 9
+10.0001 << 10
+10.0001 << 11
+10.0001 << 12
+10.0001 << 13
+10.0001 << 14
+10.0001 << 15
+10.0001 << 16
+10.0001 << 17
+10.0001 << 18
+10.0001 << 19
+10.00001 << 0
+10.00001 << 1
+10.00001 << 2
+10.00001 << 3
+10.00001 << 4
+10.00001 << 5
+10.00001 << 6
+10.00001 << 7
+10.00001 << 8
+10.00001 << 9
+10.00001 << 10
+10.00001 << 11
+10.00001 << 12
+10.00001 << 13
+10.00001 << 14
+10.00001 << 15
+10.00001 << 16
+10.00001 << 17
+10.00001 << 18
+10.00001 << 19
+10.000001 << 0
+10.000001 << 1
+10.000001 << 2
+10.000001 << 3
+10.000001 << 4
+10.000001 << 5
+10.000001 << 6
+10.000001 << 7
+10.000001 << 8
+10.000001 << 9
+10.000001 << 10
+10.000001 << 11
+10.000001 << 12
+10.000001 << 13
+10.000001 << 14
+10.000001 << 15
+10.000001 << 16
+10.000001 << 17
+10.000001 << 18
+10.000001 << 19
+10.0000001 << 0
+10.0000001 << 1
+10.0000001 << 2
+10.0000001 << 3
+10.0000001 << 4
+10.0000001 << 5
+10.0000001 << 6
+10.0000001 << 7
+10.0000001 << 8
+10.0000001 << 9
+10.0000001 << 10
+10.0000001 << 11
+10.0000001 << 12
+10.0000001 << 13
+10.0000001 << 14
+10.0000001 << 15
+10.0000001 << 16
+10.0000001 << 17
+10.0000001 << 18
+10.0000001 << 19
+10.00000001 << 0
+10.00000001 << 1
+10.00000001 << 2
+10.00000001 << 3
+10.00000001 << 4
+10.00000001 << 5
+10.00000001 << 6
+10.00000001 << 7
+10.00000001 << 8
+10.00000001 << 9
+10.00000001 << 10
+10.00000001 << 11
+10.00000001 << 12
+10.00000001 << 13
+10.00000001 << 14
+10.00000001 << 15
+10.00000001 << 16
+10.00000001 << 17
+10.00000001 << 18
+10.00000001 << 19
+10.000000001 << 0
+10.000000001 << 1
+10.000000001 << 2
+10.000000001 << 3
+10.000000001 << 4
+10.000000001 << 5
+10.000000001 << 6
+10.000000001 << 7
+10.000000001 << 8
+10.000000001 << 9
+10.000000001 << 10
+10.000000001 << 11
+10.000000001 << 12
+10.000000001 << 13
+10.000000001 << 14
+10.000000001 << 15
+10.000000001 << 16
+10.000000001 << 17
+10.000000001 << 18
+10.000000001 << 19
+10.0000000001 << 0
+10.0000000001 << 1
+10.0000000001 << 2
+10.0000000001 << 3
+10.0000000001 << 4
+10.0000000001 << 5
+10.0000000001 << 6
+10.0000000001 << 7
+10.0000000001 << 8
+10.0000000001 << 9
+10.0000000001 << 10
+10.0000000001 << 11
+10.0000000001 << 12
+10.0000000001 << 13
+10.0000000001 << 14
+10.0000000001 << 15
+10.0000000001 << 16
+10.0000000001 << 17
+10.0000000001 << 18
+10.0000000001 << 19
+100 << 0
+100 << 1
+100 << 2
+100 << 3
+100 << 4
+100 << 5
+100 << 6
+100 << 7
+100 << 8
+100 << 9
+100 << 10
+100 << 11
+100 << 12
+100 << 13
+100 << 14
+100 << 15
+100 << 16
+100 << 17
+100 << 18
+100 << 19
+100.1 << 0
+100.1 << 1
+100.1 << 2
+100.1 << 3
+100.1 << 4
+100.1 << 5
+100.1 << 6
+100.1 << 7
+100.1 << 8
+100.1 << 9
+100.1 << 10
+100.1 << 11
+100.1 << 12
+100.1 << 13
+100.1 << 14
+100.1 << 15
+100.1 << 16
+100.1 << 17
+100.1 << 18
+100.1 << 19
+100.01 << 0
+100.01 << 1
+100.01 << 2
+100.01 << 3
+100.01 << 4
+100.01 << 5
+100.01 << 6
+100.01 << 7
+100.01 << 8
+100.01 << 9
+100.01 << 10
+100.01 << 11
+100.01 << 12
+100.01 << 13
+100.01 << 14
+100.01 << 15
+100.01 << 16
+100.01 << 17
+100.01 << 18
+100.01 << 19
+100.001 << 0
+100.001 << 1
+100.001 << 2
+100.001 << 3
+100.001 << 4
+100.001 << 5
+100.001 << 6
+100.001 << 7
+100.001 << 8
+100.001 << 9
+100.001 << 10
+100.001 << 11
+100.001 << 12
+100.001 << 13
+100.001 << 14
+100.001 << 15
+100.001 << 16
+100.001 << 17
+100.001 << 18
+100.001 << 19
+100.0001 << 0
+100.0001 << 1
+100.0001 << 2
+100.0001 << 3
+100.0001 << 4
+100.0001 << 5
+100.0001 << 6
+100.0001 << 7
+100.0001 << 8
+100.0001 << 9
+100.0001 << 10
+100.0001 << 11
+100.0001 << 12
+100.0001 << 13
+100.0001 << 14
+100.0001 << 15
+100.0001 << 16
+100.0001 << 17
+100.0001 << 18
+100.0001 << 19
+100.00001 << 0
+100.00001 << 1
+100.00001 << 2
+100.00001 << 3
+100.00001 << 4
+100.00001 << 5
+100.00001 << 6
+100.00001 << 7
+100.00001 << 8
+100.00001 << 9
+100.00001 << 10
+100.00001 << 11
+100.00001 << 12
+100.00001 << 13
+100.00001 << 14
+100.00001 << 15
+100.00001 << 16
+100.00001 << 17
+100.00001 << 18
+100.00001 << 19
+100.000001 << 0
+100.000001 << 1
+100.000001 << 2
+100.000001 << 3
+100.000001 << 4
+100.000001 << 5
+100.000001 << 6
+100.000001 << 7
+100.000001 << 8
+100.000001 << 9
+100.000001 << 10
+100.000001 << 11
+100.000001 << 12
+100.000001 << 13
+100.000001 << 14
+100.000001 << 15
+100.000001 << 16
+100.000001 << 17
+100.000001 << 18
+100.000001 << 19
+100.0000001 << 0
+100.0000001 << 1
+100.0000001 << 2
+100.0000001 << 3
+100.0000001 << 4
+100.0000001 << 5
+100.0000001 << 6
+100.0000001 << 7
+100.0000001 << 8
+100.0000001 << 9
+100.0000001 << 10
+100.0000001 << 11
+100.0000001 << 12
+100.0000001 << 13
+100.0000001 << 14
+100.0000001 << 15
+100.0000001 << 16
+100.0000001 << 17
+100.0000001 << 18
+100.0000001 << 19
+100.00000001 << 0
+100.00000001 << 1
+100.00000001 << 2
+100.00000001 << 3
+100.00000001 << 4
+100.00000001 << 5
+100.00000001 << 6
+100.00000001 << 7
+100.00000001 << 8
+100.00000001 << 9
+100.00000001 << 10
+100.00000001 << 11
+100.00000001 << 12
+100.00000001 << 13
+100.00000001 << 14
+100.00000001 << 15
+100.00000001 << 16
+100.00000001 << 17
+100.00000001 << 18
+100.00000001 << 19
+100.000000001 << 0
+100.000000001 << 1
+100.000000001 << 2
+100.000000001 << 3
+100.000000001 << 4
+100.000000001 << 5
+100.000000001 << 6
+100.000000001 << 7
+100.000000001 << 8
+100.000000001 << 9
+100.000000001 << 10
+100.000000001 << 11
+100.000000001 << 12
+100.000000001 << 13
+100.000000001 << 14
+100.000000001 << 15
+100.000000001 << 16
+100.000000001 << 17
+100.000000001 << 18
+100.000000001 << 19
+100.0000000001 << 0
+100.0000000001 << 1
+100.0000000001 << 2
+100.0000000001 << 3
+100.0000000001 << 4
+100.0000000001 << 5
+100.0000000001 << 6
+100.0000000001 << 7
+100.0000000001 << 8
+100.0000000001 << 9
+100.0000000001 << 10
+100.0000000001 << 11
+100.0000000001 << 12
+100.0000000001 << 13
+100.0000000001 << 14
+100.0000000001 << 15
+100.0000000001 << 16
+100.0000000001 << 17
+100.0000000001 << 18
+100.0000000001 << 19
+1000 << 0
+1000 << 1
+1000 << 2
+1000 << 3
+1000 << 4
+1000 << 5
+1000 << 6
+1000 << 7
+1000 << 8
+1000 << 9
+1000 << 10
+1000 << 11
+1000 << 12
+1000 << 13
+1000 << 14
+1000 << 15
+1000 << 16
+1000 << 17
+1000 << 18
+1000 << 19
+1000.1 << 0
+1000.1 << 1
+1000.1 << 2
+1000.1 << 3
+1000.1 << 4
+1000.1 << 5
+1000.1 << 6
+1000.1 << 7
+1000.1 << 8
+1000.1 << 9
+1000.1 << 10
+1000.1 << 11
+1000.1 << 12
+1000.1 << 13
+1000.1 << 14
+1000.1 << 15
+1000.1 << 16
+1000.1 << 17
+1000.1 << 18
+1000.1 << 19
+1000.01 << 0
+1000.01 << 1
+1000.01 << 2
+1000.01 << 3
+1000.01 << 4
+1000.01 << 5
+1000.01 << 6
+1000.01 << 7
+1000.01 << 8
+1000.01 << 9
+1000.01 << 10
+1000.01 << 11
+1000.01 << 12
+1000.01 << 13
+1000.01 << 14
+1000.01 << 15
+1000.01 << 16
+1000.01 << 17
+1000.01 << 18
+1000.01 << 19
+1000.001 << 0
+1000.001 << 1
+1000.001 << 2
+1000.001 << 3
+1000.001 << 4
+1000.001 << 5
+1000.001 << 6
+1000.001 << 7
+1000.001 << 8
+1000.001 << 9
+1000.001 << 10
+1000.001 << 11
+1000.001 << 12
+1000.001 << 13
+1000.001 << 14
+1000.001 << 15
+1000.001 << 16
+1000.001 << 17
+1000.001 << 18
+1000.001 << 19
+1000.0001 << 0
+1000.0001 << 1
+1000.0001 << 2
+1000.0001 << 3
+1000.0001 << 4
+1000.0001 << 5
+1000.0001 << 6
+1000.0001 << 7
+1000.0001 << 8
+1000.0001 << 9
+1000.0001 << 10
+1000.0001 << 11
+1000.0001 << 12
+1000.0001 << 13
+1000.0001 << 14
+1000.0001 << 15
+1000.0001 << 16
+1000.0001 << 17
+1000.0001 << 18
+1000.0001 << 19
+1000.00001 << 0
+1000.00001 << 1
+1000.00001 << 2
+1000.00001 << 3
+1000.00001 << 4
+1000.00001 << 5
+1000.00001 << 6
+1000.00001 << 7
+1000.00001 << 8
+1000.00001 << 9
+1000.00001 << 10
+1000.00001 << 11
+1000.00001 << 12
+1000.00001 << 13
+1000.00001 << 14
+1000.00001 << 15
+1000.00001 << 16
+1000.00001 << 17
+1000.00001 << 18
+1000.00001 << 19
+1000.000001 << 0
+1000.000001 << 1
+1000.000001 << 2
+1000.000001 << 3
+1000.000001 << 4
+1000.000001 << 5
+1000.000001 << 6
+1000.000001 << 7
+1000.000001 << 8
+1000.000001 << 9
+1000.000001 << 10
+1000.000001 << 11
+1000.000001 << 12
+1000.000001 << 13
+1000.000001 << 14
+1000.000001 << 15
+1000.000001 << 16
+1000.000001 << 17
+1000.000001 << 18
+1000.000001 << 19
+1000.0000001 << 0
+1000.0000001 << 1
+1000.0000001 << 2
+1000.0000001 << 3
+1000.0000001 << 4
+1000.0000001 << 5
+1000.0000001 << 6
+1000.0000001 << 7
+1000.0000001 << 8
+1000.0000001 << 9
+1000.0000001 << 10
+1000.0000001 << 11
+1000.0000001 << 12
+1000.0000001 << 13
+1000.0000001 << 14
+1000.0000001 << 15
+1000.0000001 << 16
+1000.0000001 << 17
+1000.0000001 << 18
+1000.0000001 << 19
+1000.00000001 << 0
+1000.00000001 << 1
+1000.00000001 << 2
+1000.00000001 << 3
+1000.00000001 << 4
+1000.00000001 << 5
+1000.00000001 << 6
+1000.00000001 << 7
+1000.00000001 << 8
+1000.00000001 << 9
+1000.00000001 << 10
+1000.00000001 << 11
+1000.00000001 << 12
+1000.00000001 << 13
+1000.00000001 << 14
+1000.00000001 << 15
+1000.00000001 << 16
+1000.00000001 << 17
+1000.00000001 << 18
+1000.00000001 << 19
+1000.000000001 << 0
+1000.000000001 << 1
+1000.000000001 << 2
+1000.000000001 << 3
+1000.000000001 << 4
+1000.000000001 << 5
+1000.000000001 << 6
+1000.000000001 << 7
+1000.000000001 << 8
+1000.000000001 << 9
+1000.000000001 << 10
+1000.000000001 << 11
+1000.000000001 << 12
+1000.000000001 << 13
+1000.000000001 << 14
+1000.000000001 << 15
+1000.000000001 << 16
+1000.000000001 << 17
+1000.000000001 << 18
+1000.000000001 << 19
+1000.0000000001 << 0
+1000.0000000001 << 1
+1000.0000000001 << 2
+1000.0000000001 << 3
+1000.0000000001 << 4
+1000.0000000001 << 5
+1000.0000000001 << 6
+1000.0000000001 << 7
+1000.0000000001 << 8
+1000.0000000001 << 9
+1000.0000000001 << 10
+1000.0000000001 << 11
+1000.0000000001 << 12
+1000.0000000001 << 13
+1000.0000000001 << 14
+1000.0000000001 << 15
+1000.0000000001 << 16
+1000.0000000001 << 17
+1000.0000000001 << 18
+1000.0000000001 << 19
+10000 << 0
+10000 << 1
+10000 << 2
+10000 << 3
+10000 << 4
+10000 << 5
+10000 << 6
+10000 << 7
+10000 << 8
+10000 << 9
+10000 << 10
+10000 << 11
+10000 << 12
+10000 << 13
+10000 << 14
+10000 << 15
+10000 << 16
+10000 << 17
+10000 << 18
+10000 << 19
+10000.1 << 0
+10000.1 << 1
+10000.1 << 2
+10000.1 << 3
+10000.1 << 4
+10000.1 << 5
+10000.1 << 6
+10000.1 << 7
+10000.1 << 8
+10000.1 << 9
+10000.1 << 10
+10000.1 << 11
+10000.1 << 12
+10000.1 << 13
+10000.1 << 14
+10000.1 << 15
+10000.1 << 16
+10000.1 << 17
+10000.1 << 18
+10000.1 << 19
+10000.01 << 0
+10000.01 << 1
+10000.01 << 2
+10000.01 << 3
+10000.01 << 4
+10000.01 << 5
+10000.01 << 6
+10000.01 << 7
+10000.01 << 8
+10000.01 << 9
+10000.01 << 10
+10000.01 << 11
+10000.01 << 12
+10000.01 << 13
+10000.01 << 14
+10000.01 << 15
+10000.01 << 16
+10000.01 << 17
+10000.01 << 18
+10000.01 << 19
+10000.001 << 0
+10000.001 << 1
+10000.001 << 2
+10000.001 << 3
+10000.001 << 4
+10000.001 << 5
+10000.001 << 6
+10000.001 << 7
+10000.001 << 8
+10000.001 << 9
+10000.001 << 10
+10000.001 << 11
+10000.001 << 12
+10000.001 << 13
+10000.001 << 14
+10000.001 << 15
+10000.001 << 16
+10000.001 << 17
+10000.001 << 18
+10000.001 << 19
+10000.0001 << 0
+10000.0001 << 1
+10000.0001 << 2
+10000.0001 << 3
+10000.0001 << 4
+10000.0001 << 5
+10000.0001 << 6
+10000.0001 << 7
+10000.0001 << 8
+10000.0001 << 9
+10000.0001 << 10
+10000.0001 << 11
+10000.0001 << 12
+10000.0001 << 13
+10000.0001 << 14
+10000.0001 << 15
+10000.0001 << 16
+10000.0001 << 17
+10000.0001 << 18
+10000.0001 << 19
+10000.00001 << 0
+10000.00001 << 1
+10000.00001 << 2
+10000.00001 << 3
+10000.00001 << 4
+10000.00001 << 5
+10000.00001 << 6
+10000.00001 << 7
+10000.00001 << 8
+10000.00001 << 9
+10000.00001 << 10
+10000.00001 << 11
+10000.00001 << 12
+10000.00001 << 13
+10000.00001 << 14
+10000.00001 << 15
+10000.00001 << 16
+10000.00001 << 17
+10000.00001 << 18
+10000.00001 << 19
+10000.000001 << 0
+10000.000001 << 1
+10000.000001 << 2
+10000.000001 << 3
+10000.000001 << 4
+10000.000001 << 5
+10000.000001 << 6
+10000.000001 << 7
+10000.000001 << 8
+10000.000001 << 9
+10000.000001 << 10
+10000.000001 << 11
+10000.000001 << 12
+10000.000001 << 13
+10000.000001 << 14
+10000.000001 << 15
+10000.000001 << 16
+10000.000001 << 17
+10000.000001 << 18
+10000.000001 << 19
+10000.0000001 << 0
+10000.0000001 << 1
+10000.0000001 << 2
+10000.0000001 << 3
+10000.0000001 << 4
+10000.0000001 << 5
+10000.0000001 << 6
+10000.0000001 << 7
+10000.0000001 << 8
+10000.0000001 << 9
+10000.0000001 << 10
+10000.0000001 << 11
+10000.0000001 << 12
+10000.0000001 << 13
+10000.0000001 << 14
+10000.0000001 << 15
+10000.0000001 << 16
+10000.0000001 << 17
+10000.0000001 << 18
+10000.0000001 << 19
+10000.00000001 << 0
+10000.00000001 << 1
+10000.00000001 << 2
+10000.00000001 << 3
+10000.00000001 << 4
+10000.00000001 << 5
+10000.00000001 << 6
+10000.00000001 << 7
+10000.00000001 << 8
+10000.00000001 << 9
+10000.00000001 << 10
+10000.00000001 << 11
+10000.00000001 << 12
+10000.00000001 << 13
+10000.00000001 << 14
+10000.00000001 << 15
+10000.00000001 << 16
+10000.00000001 << 17
+10000.00000001 << 18
+10000.00000001 << 19
+10000.000000001 << 0
+10000.000000001 << 1
+10000.000000001 << 2
+10000.000000001 << 3
+10000.000000001 << 4
+10000.000000001 << 5
+10000.000000001 << 6
+10000.000000001 << 7
+10000.000000001 << 8
+10000.000000001 << 9
+10000.000000001 << 10
+10000.000000001 << 11
+10000.000000001 << 12
+10000.000000001 << 13
+10000.000000001 << 14
+10000.000000001 << 15
+10000.000000001 << 16
+10000.000000001 << 17
+10000.000000001 << 18
+10000.000000001 << 19
+10000.0000000001 << 0
+10000.0000000001 << 1
+10000.0000000001 << 2
+10000.0000000001 << 3
+10000.0000000001 << 4
+10000.0000000001 << 5
+10000.0000000001 << 6
+10000.0000000001 << 7
+10000.0000000001 << 8
+10000.0000000001 << 9
+10000.0000000001 << 10
+10000.0000000001 << 11
+10000.0000000001 << 12
+10000.0000000001 << 13
+10000.0000000001 << 14
+10000.0000000001 << 15
+10000.0000000001 << 16
+10000.0000000001 << 17
+10000.0000000001 << 18
+10000.0000000001 << 19
+100000 << 0
+100000 << 1
+100000 << 2
+100000 << 3
+100000 << 4
+100000 << 5
+100000 << 6
+100000 << 7
+100000 << 8
+100000 << 9
+100000 << 10
+100000 << 11
+100000 << 12
+100000 << 13
+100000 << 14
+100000 << 15
+100000 << 16
+100000 << 17
+100000 << 18
+100000 << 19
+100000.1 << 0
+100000.1 << 1
+100000.1 << 2
+100000.1 << 3
+100000.1 << 4
+100000.1 << 5
+100000.1 << 6
+100000.1 << 7
+100000.1 << 8
+100000.1 << 9
+100000.1 << 10
+100000.1 << 11
+100000.1 << 12
+100000.1 << 13
+100000.1 << 14
+100000.1 << 15
+100000.1 << 16
+100000.1 << 17
+100000.1 << 18
+100000.1 << 19
+100000.01 << 0
+100000.01 << 1
+100000.01 << 2
+100000.01 << 3
+100000.01 << 4
+100000.01 << 5
+100000.01 << 6
+100000.01 << 7
+100000.01 << 8
+100000.01 << 9
+100000.01 << 10
+100000.01 << 11
+100000.01 << 12
+100000.01 << 13
+100000.01 << 14
+100000.01 << 15
+100000.01 << 16
+100000.01 << 17
+100000.01 << 18
+100000.01 << 19
+100000.001 << 0
+100000.001 << 1
+100000.001 << 2
+100000.001 << 3
+100000.001 << 4
+100000.001 << 5
+100000.001 << 6
+100000.001 << 7
+100000.001 << 8
+100000.001 << 9
+100000.001 << 10
+100000.001 << 11
+100000.001 << 12
+100000.001 << 13
+100000.001 << 14
+100000.001 << 15
+100000.001 << 16
+100000.001 << 17
+100000.001 << 18
+100000.001 << 19
+100000.0001 << 0
+100000.0001 << 1
+100000.0001 << 2
+100000.0001 << 3
+100000.0001 << 4
+100000.0001 << 5
+100000.0001 << 6
+100000.0001 << 7
+100000.0001 << 8
+100000.0001 << 9
+100000.0001 << 10
+100000.0001 << 11
+100000.0001 << 12
+100000.0001 << 13
+100000.0001 << 14
+100000.0001 << 15
+100000.0001 << 16
+100000.0001 << 17
+100000.0001 << 18
+100000.0001 << 19
+100000.00001 << 0
+100000.00001 << 1
+100000.00001 << 2
+100000.00001 << 3
+100000.00001 << 4
+100000.00001 << 5
+100000.00001 << 6
+100000.00001 << 7
+100000.00001 << 8
+100000.00001 << 9
+100000.00001 << 10
+100000.00001 << 11
+100000.00001 << 12
+100000.00001 << 13
+100000.00001 << 14
+100000.00001 << 15
+100000.00001 << 16
+100000.00001 << 17
+100000.00001 << 18
+100000.00001 << 19
+100000.000001 << 0
+100000.000001 << 1
+100000.000001 << 2
+100000.000001 << 3
+100000.000001 << 4
+100000.000001 << 5
+100000.000001 << 6
+100000.000001 << 7
+100000.000001 << 8
+100000.000001 << 9
+100000.000001 << 10
+100000.000001 << 11
+100000.000001 << 12
+100000.000001 << 13
+100000.000001 << 14
+100000.000001 << 15
+100000.000001 << 16
+100000.000001 << 17
+100000.000001 << 18
+100000.000001 << 19
+100000.0000001 << 0
+100000.0000001 << 1
+100000.0000001 << 2
+100000.0000001 << 3
+100000.0000001 << 4
+100000.0000001 << 5
+100000.0000001 << 6
+100000.0000001 << 7
+100000.0000001 << 8
+100000.0000001 << 9
+100000.0000001 << 10
+100000.0000001 << 11
+100000.0000001 << 12
+100000.0000001 << 13
+100000.0000001 << 14
+100000.0000001 << 15
+100000.0000001 << 16
+100000.0000001 << 17
+100000.0000001 << 18
+100000.0000001 << 19
+100000.00000001 << 0
+100000.00000001 << 1
+100000.00000001 << 2
+100000.00000001 << 3
+100000.00000001 << 4
+100000.00000001 << 5
+100000.00000001 << 6
+100000.00000001 << 7
+100000.00000001 << 8
+100000.00000001 << 9
+100000.00000001 << 10
+100000.00000001 << 11
+100000.00000001 << 12
+100000.00000001 << 13
+100000.00000001 << 14
+100000.00000001 << 15
+100000.00000001 << 16
+100000.00000001 << 17
+100000.00000001 << 18
+100000.00000001 << 19
+100000.000000001 << 0
+100000.000000001 << 1
+100000.000000001 << 2
+100000.000000001 << 3
+100000.000000001 << 4
+100000.000000001 << 5
+100000.000000001 << 6
+100000.000000001 << 7
+100000.000000001 << 8
+100000.000000001 << 9
+100000.000000001 << 10
+100000.000000001 << 11
+100000.000000001 << 12
+100000.000000001 << 13
+100000.000000001 << 14
+100000.000000001 << 15
+100000.000000001 << 16
+100000.000000001 << 17
+100000.000000001 << 18
+100000.000000001 << 19
+100000.0000000001 << 0
+100000.0000000001 << 1
+100000.0000000001 << 2
+100000.0000000001 << 3
+100000.0000000001 << 4
+100000.0000000001 << 5
+100000.0000000001 << 6
+100000.0000000001 << 7
+100000.0000000001 << 8
+100000.0000000001 << 9
+100000.0000000001 << 10
+100000.0000000001 << 11
+100000.0000000001 << 12
+100000.0000000001 << 13
+100000.0000000001 << 14
+100000.0000000001 << 15
+100000.0000000001 << 16
+100000.0000000001 << 17
+100000.0000000001 << 18
+100000.0000000001 << 19
+1000000 << 0
+1000000 << 1
+1000000 << 2
+1000000 << 3
+1000000 << 4
+1000000 << 5
+1000000 << 6
+1000000 << 7
+1000000 << 8
+1000000 << 9
+1000000 << 10
+1000000 << 11
+1000000 << 12
+1000000 << 13
+1000000 << 14
+1000000 << 15
+1000000 << 16
+1000000 << 17
+1000000 << 18
+1000000 << 19
+1000000.1 << 0
+1000000.1 << 1
+1000000.1 << 2
+1000000.1 << 3
+1000000.1 << 4
+1000000.1 << 5
+1000000.1 << 6
+1000000.1 << 7
+1000000.1 << 8
+1000000.1 << 9
+1000000.1 << 10
+1000000.1 << 11
+1000000.1 << 12
+1000000.1 << 13
+1000000.1 << 14
+1000000.1 << 15
+1000000.1 << 16
+1000000.1 << 17
+1000000.1 << 18
+1000000.1 << 19
+1000000.01 << 0
+1000000.01 << 1
+1000000.01 << 2
+1000000.01 << 3
+1000000.01 << 4
+1000000.01 << 5
+1000000.01 << 6
+1000000.01 << 7
+1000000.01 << 8
+1000000.01 << 9
+1000000.01 << 10
+1000000.01 << 11
+1000000.01 << 12
+1000000.01 << 13
+1000000.01 << 14
+1000000.01 << 15
+1000000.01 << 16
+1000000.01 << 17
+1000000.01 << 18
+1000000.01 << 19
+1000000.001 << 0
+1000000.001 << 1
+1000000.001 << 2
+1000000.001 << 3
+1000000.001 << 4
+1000000.001 << 5
+1000000.001 << 6
+1000000.001 << 7
+1000000.001 << 8
+1000000.001 << 9
+1000000.001 << 10
+1000000.001 << 11
+1000000.001 << 12
+1000000.001 << 13
+1000000.001 << 14
+1000000.001 << 15
+1000000.001 << 16
+1000000.001 << 17
+1000000.001 << 18
+1000000.001 << 19
+1000000.0001 << 0
+1000000.0001 << 1
+1000000.0001 << 2
+1000000.0001 << 3
+1000000.0001 << 4
+1000000.0001 << 5
+1000000.0001 << 6
+1000000.0001 << 7
+1000000.0001 << 8
+1000000.0001 << 9
+1000000.0001 << 10
+1000000.0001 << 11
+1000000.0001 << 12
+1000000.0001 << 13
+1000000.0001 << 14
+1000000.0001 << 15
+1000000.0001 << 16
+1000000.0001 << 17
+1000000.0001 << 18
+1000000.0001 << 19
+1000000.00001 << 0
+1000000.00001 << 1
+1000000.00001 << 2
+1000000.00001 << 3
+1000000.00001 << 4
+1000000.00001 << 5
+1000000.00001 << 6
+1000000.00001 << 7
+1000000.00001 << 8
+1000000.00001 << 9
+1000000.00001 << 10
+1000000.00001 << 11
+1000000.00001 << 12
+1000000.00001 << 13
+1000000.00001 << 14
+1000000.00001 << 15
+1000000.00001 << 16
+1000000.00001 << 17
+1000000.00001 << 18
+1000000.00001 << 19
+1000000.000001 << 0
+1000000.000001 << 1
+1000000.000001 << 2
+1000000.000001 << 3
+1000000.000001 << 4
+1000000.000001 << 5
+1000000.000001 << 6
+1000000.000001 << 7
+1000000.000001 << 8
+1000000.000001 << 9
+1000000.000001 << 10
+1000000.000001 << 11
+1000000.000001 << 12
+1000000.000001 << 13
+1000000.000001 << 14
+1000000.000001 << 15
+1000000.000001 << 16
+1000000.000001 << 17
+1000000.000001 << 18
+1000000.000001 << 19
+1000000.0000001 << 0
+1000000.0000001 << 1
+1000000.0000001 << 2
+1000000.0000001 << 3
+1000000.0000001 << 4
+1000000.0000001 << 5
+1000000.0000001 << 6
+1000000.0000001 << 7
+1000000.0000001 << 8
+1000000.0000001 << 9
+1000000.0000001 << 10
+1000000.0000001 << 11
+1000000.0000001 << 12
+1000000.0000001 << 13
+1000000.0000001 << 14
+1000000.0000001 << 15
+1000000.0000001 << 16
+1000000.0000001 << 17
+1000000.0000001 << 18
+1000000.0000001 << 19
+1000000.00000001 << 0
+1000000.00000001 << 1
+1000000.00000001 << 2
+1000000.00000001 << 3
+1000000.00000001 << 4
+1000000.00000001 << 5
+1000000.00000001 << 6
+1000000.00000001 << 7
+1000000.00000001 << 8
+1000000.00000001 << 9
+1000000.00000001 << 10
+1000000.00000001 << 11
+1000000.00000001 << 12
+1000000.00000001 << 13
+1000000.00000001 << 14
+1000000.00000001 << 15
+1000000.00000001 << 16
+1000000.00000001 << 17
+1000000.00000001 << 18
+1000000.00000001 << 19
+1000000.000000001 << 0
+1000000.000000001 << 1
+1000000.000000001 << 2
+1000000.000000001 << 3
+1000000.000000001 << 4
+1000000.000000001 << 5
+1000000.000000001 << 6
+1000000.000000001 << 7
+1000000.000000001 << 8
+1000000.000000001 << 9
+1000000.000000001 << 10
+1000000.000000001 << 11
+1000000.000000001 << 12
+1000000.000000001 << 13
+1000000.000000001 << 14
+1000000.000000001 << 15
+1000000.000000001 << 16
+1000000.000000001 << 17
+1000000.000000001 << 18
+1000000.000000001 << 19
+1000000.0000000001 << 0
+1000000.0000000001 << 1
+1000000.0000000001 << 2
+1000000.0000000001 << 3
+1000000.0000000001 << 4
+1000000.0000000001 << 5
+1000000.0000000001 << 6
+1000000.0000000001 << 7
+1000000.0000000001 << 8
+1000000.0000000001 << 9
+1000000.0000000001 << 10
+1000000.0000000001 << 11
+1000000.0000000001 << 12
+1000000.0000000001 << 13
+1000000.0000000001 << 14
+1000000.0000000001 << 15
+1000000.0000000001 << 16
+1000000.0000000001 << 17
+1000000.0000000001 << 18
+1000000.0000000001 << 19
+10000000 << 0
+10000000 << 1
+10000000 << 2
+10000000 << 3
+10000000 << 4
+10000000 << 5
+10000000 << 6
+10000000 << 7
+10000000 << 8
+10000000 << 9
+10000000 << 10
+10000000 << 11
+10000000 << 12
+10000000 << 13
+10000000 << 14
+10000000 << 15
+10000000 << 16
+10000000 << 17
+10000000 << 18
+10000000 << 19
+10000000.1 << 0
+10000000.1 << 1
+10000000.1 << 2
+10000000.1 << 3
+10000000.1 << 4
+10000000.1 << 5
+10000000.1 << 6
+10000000.1 << 7
+10000000.1 << 8
+10000000.1 << 9
+10000000.1 << 10
+10000000.1 << 11
+10000000.1 << 12
+10000000.1 << 13
+10000000.1 << 14
+10000000.1 << 15
+10000000.1 << 16
+10000000.1 << 17
+10000000.1 << 18
+10000000.1 << 19
+10000000.01 << 0
+10000000.01 << 1
+10000000.01 << 2
+10000000.01 << 3
+10000000.01 << 4
+10000000.01 << 5
+10000000.01 << 6
+10000000.01 << 7
+10000000.01 << 8
+10000000.01 << 9
+10000000.01 << 10
+10000000.01 << 11
+10000000.01 << 12
+10000000.01 << 13
+10000000.01 << 14
+10000000.01 << 15
+10000000.01 << 16
+10000000.01 << 17
+10000000.01 << 18
+10000000.01 << 19
+10000000.001 << 0
+10000000.001 << 1
+10000000.001 << 2
+10000000.001 << 3
+10000000.001 << 4
+10000000.001 << 5
+10000000.001 << 6
+10000000.001 << 7
+10000000.001 << 8
+10000000.001 << 9
+10000000.001 << 10
+10000000.001 << 11
+10000000.001 << 12
+10000000.001 << 13
+10000000.001 << 14
+10000000.001 << 15
+10000000.001 << 16
+10000000.001 << 17
+10000000.001 << 18
+10000000.001 << 19
+10000000.0001 << 0
+10000000.0001 << 1
+10000000.0001 << 2
+10000000.0001 << 3
+10000000.0001 << 4
+10000000.0001 << 5
+10000000.0001 << 6
+10000000.0001 << 7
+10000000.0001 << 8
+10000000.0001 << 9
+10000000.0001 << 10
+10000000.0001 << 11
+10000000.0001 << 12
+10000000.0001 << 13
+10000000.0001 << 14
+10000000.0001 << 15
+10000000.0001 << 16
+10000000.0001 << 17
+10000000.0001 << 18
+10000000.0001 << 19
+10000000.00001 << 0
+10000000.00001 << 1
+10000000.00001 << 2
+10000000.00001 << 3
+10000000.00001 << 4
+10000000.00001 << 5
+10000000.00001 << 6
+10000000.00001 << 7
+10000000.00001 << 8
+10000000.00001 << 9
+10000000.00001 << 10
+10000000.00001 << 11
+10000000.00001 << 12
+10000000.00001 << 13
+10000000.00001 << 14
+10000000.00001 << 15
+10000000.00001 << 16
+10000000.00001 << 17
+10000000.00001 << 18
+10000000.00001 << 19
+10000000.000001 << 0
+10000000.000001 << 1
+10000000.000001 << 2
+10000000.000001 << 3
+10000000.000001 << 4
+10000000.000001 << 5
+10000000.000001 << 6
+10000000.000001 << 7
+10000000.000001 << 8
+10000000.000001 << 9
+10000000.000001 << 10
+10000000.000001 << 11
+10000000.000001 << 12
+10000000.000001 << 13
+10000000.000001 << 14
+10000000.000001 << 15
+10000000.000001 << 16
+10000000.000001 << 17
+10000000.000001 << 18
+10000000.000001 << 19
+10000000.0000001 << 0
+10000000.0000001 << 1
+10000000.0000001 << 2
+10000000.0000001 << 3
+10000000.0000001 << 4
+10000000.0000001 << 5
+10000000.0000001 << 6
+10000000.0000001 << 7
+10000000.0000001 << 8
+10000000.0000001 << 9
+10000000.0000001 << 10
+10000000.0000001 << 11
+10000000.0000001 << 12
+10000000.0000001 << 13
+10000000.0000001 << 14
+10000000.0000001 << 15
+10000000.0000001 << 16
+10000000.0000001 << 17
+10000000.0000001 << 18
+10000000.0000001 << 19
+10000000.00000001 << 0
+10000000.00000001 << 1
+10000000.00000001 << 2
+10000000.00000001 << 3
+10000000.00000001 << 4
+10000000.00000001 << 5
+10000000.00000001 << 6
+10000000.00000001 << 7
+10000000.00000001 << 8
+10000000.00000001 << 9
+10000000.00000001 << 10
+10000000.00000001 << 11
+10000000.00000001 << 12
+10000000.00000001 << 13
+10000000.00000001 << 14
+10000000.00000001 << 15
+10000000.00000001 << 16
+10000000.00000001 << 17
+10000000.00000001 << 18
+10000000.00000001 << 19
+10000000.000000001 << 0
+10000000.000000001 << 1
+10000000.000000001 << 2
+10000000.000000001 << 3
+10000000.000000001 << 4
+10000000.000000001 << 5
+10000000.000000001 << 6
+10000000.000000001 << 7
+10000000.000000001 << 8
+10000000.000000001 << 9
+10000000.000000001 << 10
+10000000.000000001 << 11
+10000000.000000001 << 12
+10000000.000000001 << 13
+10000000.000000001 << 14
+10000000.000000001 << 15
+10000000.000000001 << 16
+10000000.000000001 << 17
+10000000.000000001 << 18
+10000000.000000001 << 19
+10000000.0000000001 << 0
+10000000.0000000001 << 1
+10000000.0000000001 << 2
+10000000.0000000001 << 3
+10000000.0000000001 << 4
+10000000.0000000001 << 5
+10000000.0000000001 << 6
+10000000.0000000001 << 7
+10000000.0000000001 << 8
+10000000.0000000001 << 9
+10000000.0000000001 << 10
+10000000.0000000001 << 11
+10000000.0000000001 << 12
+10000000.0000000001 << 13
+10000000.0000000001 << 14
+10000000.0000000001 << 15
+10000000.0000000001 << 16
+10000000.0000000001 << 17
+10000000.0000000001 << 18
+10000000.0000000001 << 19
+100000000 << 0
+100000000 << 1
+100000000 << 2
+100000000 << 3
+100000000 << 4
+100000000 << 5
+100000000 << 6
+100000000 << 7
+100000000 << 8
+100000000 << 9
+100000000 << 10
+100000000 << 11
+100000000 << 12
+100000000 << 13
+100000000 << 14
+100000000 << 15
+100000000 << 16
+100000000 << 17
+100000000 << 18
+100000000 << 19
+100000000.1 << 0
+100000000.1 << 1
+100000000.1 << 2
+100000000.1 << 3
+100000000.1 << 4
+100000000.1 << 5
+100000000.1 << 6
+100000000.1 << 7
+100000000.1 << 8
+100000000.1 << 9
+100000000.1 << 10
+100000000.1 << 11
+100000000.1 << 12
+100000000.1 << 13
+100000000.1 << 14
+100000000.1 << 15
+100000000.1 << 16
+100000000.1 << 17
+100000000.1 << 18
+100000000.1 << 19
+100000000.01 << 0
+100000000.01 << 1
+100000000.01 << 2
+100000000.01 << 3
+100000000.01 << 4
+100000000.01 << 5
+100000000.01 << 6
+100000000.01 << 7
+100000000.01 << 8
+100000000.01 << 9
+100000000.01 << 10
+100000000.01 << 11
+100000000.01 << 12
+100000000.01 << 13
+100000000.01 << 14
+100000000.01 << 15
+100000000.01 << 16
+100000000.01 << 17
+100000000.01 << 18
+100000000.01 << 19
+100000000.001 << 0
+100000000.001 << 1
+100000000.001 << 2
+100000000.001 << 3
+100000000.001 << 4
+100000000.001 << 5
+100000000.001 << 6
+100000000.001 << 7
+100000000.001 << 8
+100000000.001 << 9
+100000000.001 << 10
+100000000.001 << 11
+100000000.001 << 12
+100000000.001 << 13
+100000000.001 << 14
+100000000.001 << 15
+100000000.001 << 16
+100000000.001 << 17
+100000000.001 << 18
+100000000.001 << 19
+100000000.0001 << 0
+100000000.0001 << 1
+100000000.0001 << 2
+100000000.0001 << 3
+100000000.0001 << 4
+100000000.0001 << 5
+100000000.0001 << 6
+100000000.0001 << 7
+100000000.0001 << 8
+100000000.0001 << 9
+100000000.0001 << 10
+100000000.0001 << 11
+100000000.0001 << 12
+100000000.0001 << 13
+100000000.0001 << 14
+100000000.0001 << 15
+100000000.0001 << 16
+100000000.0001 << 17
+100000000.0001 << 18
+100000000.0001 << 19
+100000000.00001 << 0
+100000000.00001 << 1
+100000000.00001 << 2
+100000000.00001 << 3
+100000000.00001 << 4
+100000000.00001 << 5
+100000000.00001 << 6
+100000000.00001 << 7
+100000000.00001 << 8
+100000000.00001 << 9
+100000000.00001 << 10
+100000000.00001 << 11
+100000000.00001 << 12
+100000000.00001 << 13
+100000000.00001 << 14
+100000000.00001 << 15
+100000000.00001 << 16
+100000000.00001 << 17
+100000000.00001 << 18
+100000000.00001 << 19
+100000000.000001 << 0
+100000000.000001 << 1
+100000000.000001 << 2
+100000000.000001 << 3
+100000000.000001 << 4
+100000000.000001 << 5
+100000000.000001 << 6
+100000000.000001 << 7
+100000000.000001 << 8
+100000000.000001 << 9
+100000000.000001 << 10
+100000000.000001 << 11
+100000000.000001 << 12
+100000000.000001 << 13
+100000000.000001 << 14
+100000000.000001 << 15
+100000000.000001 << 16
+100000000.000001 << 17
+100000000.000001 << 18
+100000000.000001 << 19
+100000000.0000001 << 0
+100000000.0000001 << 1
+100000000.0000001 << 2
+100000000.0000001 << 3
+100000000.0000001 << 4
+100000000.0000001 << 5
+100000000.0000001 << 6
+100000000.0000001 << 7
+100000000.0000001 << 8
+100000000.0000001 << 9
+100000000.0000001 << 10
+100000000.0000001 << 11
+100000000.0000001 << 12
+100000000.0000001 << 13
+100000000.0000001 << 14
+100000000.0000001 << 15
+100000000.0000001 << 16
+100000000.0000001 << 17
+100000000.0000001 << 18
+100000000.0000001 << 19
+100000000.00000001 << 0
+100000000.00000001 << 1
+100000000.00000001 << 2
+100000000.00000001 << 3
+100000000.00000001 << 4
+100000000.00000001 << 5
+100000000.00000001 << 6
+100000000.00000001 << 7
+100000000.00000001 << 8
+100000000.00000001 << 9
+100000000.00000001 << 10
+100000000.00000001 << 11
+100000000.00000001 << 12
+100000000.00000001 << 13
+100000000.00000001 << 14
+100000000.00000001 << 15
+100000000.00000001 << 16
+100000000.00000001 << 17
+100000000.00000001 << 18
+100000000.00000001 << 19
+100000000.000000001 << 0
+100000000.000000001 << 1
+100000000.000000001 << 2
+100000000.000000001 << 3
+100000000.000000001 << 4
+100000000.000000001 << 5
+100000000.000000001 << 6
+100000000.000000001 << 7
+100000000.000000001 << 8
+100000000.000000001 << 9
+100000000.000000001 << 10
+100000000.000000001 << 11
+100000000.000000001 << 12
+100000000.000000001 << 13
+100000000.000000001 << 14
+100000000.000000001 << 15
+100000000.000000001 << 16
+100000000.000000001 << 17
+100000000.000000001 << 18
+100000000.000000001 << 19
+100000000.0000000001 << 0
+100000000.0000000001 << 1
+100000000.0000000001 << 2
+100000000.0000000001 << 3
+100000000.0000000001 << 4
+100000000.0000000001 << 5
+100000000.0000000001 << 6
+100000000.0000000001 << 7
+100000000.0000000001 << 8
+100000000.0000000001 << 9
+100000000.0000000001 << 10
+100000000.0000000001 << 11
+100000000.0000000001 << 12
+100000000.0000000001 << 13
+100000000.0000000001 << 14
+100000000.0000000001 << 15
+100000000.0000000001 << 16
+100000000.0000000001 << 17
+100000000.0000000001 << 18
+100000000.0000000001 << 19
+1000000000 << 0
+1000000000 << 1
+1000000000 << 2
+1000000000 << 3
+1000000000 << 4
+1000000000 << 5
+1000000000 << 6
+1000000000 << 7
+1000000000 << 8
+1000000000 << 9
+1000000000 << 10
+1000000000 << 11
+1000000000 << 12
+1000000000 << 13
+1000000000 << 14
+1000000000 << 15
+1000000000 << 16
+1000000000 << 17
+1000000000 << 18
+1000000000 << 19
+1000000000.1 << 0
+1000000000.1 << 1
+1000000000.1 << 2
+1000000000.1 << 3
+1000000000.1 << 4
+1000000000.1 << 5
+1000000000.1 << 6
+1000000000.1 << 7
+1000000000.1 << 8
+1000000000.1 << 9
+1000000000.1 << 10
+1000000000.1 << 11
+1000000000.1 << 12
+1000000000.1 << 13
+1000000000.1 << 14
+1000000000.1 << 15
+1000000000.1 << 16
+1000000000.1 << 17
+1000000000.1 << 18
+1000000000.1 << 19
+1000000000.01 << 0
+1000000000.01 << 1
+1000000000.01 << 2
+1000000000.01 << 3
+1000000000.01 << 4
+1000000000.01 << 5
+1000000000.01 << 6
+1000000000.01 << 7
+1000000000.01 << 8
+1000000000.01 << 9
+1000000000.01 << 10
+1000000000.01 << 11
+1000000000.01 << 12
+1000000000.01 << 13
+1000000000.01 << 14
+1000000000.01 << 15
+1000000000.01 << 16
+1000000000.01 << 17
+1000000000.01 << 18
+1000000000.01 << 19
+1000000000.001 << 0
+1000000000.001 << 1
+1000000000.001 << 2
+1000000000.001 << 3
+1000000000.001 << 4
+1000000000.001 << 5
+1000000000.001 << 6
+1000000000.001 << 7
+1000000000.001 << 8
+1000000000.001 << 9
+1000000000.001 << 10
+1000000000.001 << 11
+1000000000.001 << 12
+1000000000.001 << 13
+1000000000.001 << 14
+1000000000.001 << 15
+1000000000.001 << 16
+1000000000.001 << 17
+1000000000.001 << 18
+1000000000.001 << 19
+1000000000.0001 << 0
+1000000000.0001 << 1
+1000000000.0001 << 2
+1000000000.0001 << 3
+1000000000.0001 << 4
+1000000000.0001 << 5
+1000000000.0001 << 6
+1000000000.0001 << 7
+1000000000.0001 << 8
+1000000000.0001 << 9
+1000000000.0001 << 10
+1000000000.0001 << 11
+1000000000.0001 << 12
+1000000000.0001 << 13
+1000000000.0001 << 14
+1000000000.0001 << 15
+1000000000.0001 << 16
+1000000000.0001 << 17
+1000000000.0001 << 18
+1000000000.0001 << 19
+1000000000.00001 << 0
+1000000000.00001 << 1
+1000000000.00001 << 2
+1000000000.00001 << 3
+1000000000.00001 << 4
+1000000000.00001 << 5
+1000000000.00001 << 6
+1000000000.00001 << 7
+1000000000.00001 << 8
+1000000000.00001 << 9
+1000000000.00001 << 10
+1000000000.00001 << 11
+1000000000.00001 << 12
+1000000000.00001 << 13
+1000000000.00001 << 14
+1000000000.00001 << 15
+1000000000.00001 << 16
+1000000000.00001 << 17
+1000000000.00001 << 18
+1000000000.00001 << 19
+1000000000.000001 << 0
+1000000000.000001 << 1
+1000000000.000001 << 2
+1000000000.000001 << 3
+1000000000.000001 << 4
+1000000000.000001 << 5
+1000000000.000001 << 6
+1000000000.000001 << 7
+1000000000.000001 << 8
+1000000000.000001 << 9
+1000000000.000001 << 10
+1000000000.000001 << 11
+1000000000.000001 << 12
+1000000000.000001 << 13
+1000000000.000001 << 14
+1000000000.000001 << 15
+1000000000.000001 << 16
+1000000000.000001 << 17
+1000000000.000001 << 18
+1000000000.000001 << 19
+1000000000.0000001 << 0
+1000000000.0000001 << 1
+1000000000.0000001 << 2
+1000000000.0000001 << 3
+1000000000.0000001 << 4
+1000000000.0000001 << 5
+1000000000.0000001 << 6
+1000000000.0000001 << 7
+1000000000.0000001 << 8
+1000000000.0000001 << 9
+1000000000.0000001 << 10
+1000000000.0000001 << 11
+1000000000.0000001 << 12
+1000000000.0000001 << 13
+1000000000.0000001 << 14
+1000000000.0000001 << 15
+1000000000.0000001 << 16
+1000000000.0000001 << 17
+1000000000.0000001 << 18
+1000000000.0000001 << 19
+1000000000.00000001 << 0
+1000000000.00000001 << 1
+1000000000.00000001 << 2
+1000000000.00000001 << 3
+1000000000.00000001 << 4
+1000000000.00000001 << 5
+1000000000.00000001 << 6
+1000000000.00000001 << 7
+1000000000.00000001 << 8
+1000000000.00000001 << 9
+1000000000.00000001 << 10
+1000000000.00000001 << 11
+1000000000.00000001 << 12
+1000000000.00000001 << 13
+1000000000.00000001 << 14
+1000000000.00000001 << 15
+1000000000.00000001 << 16
+1000000000.00000001 << 17
+1000000000.00000001 << 18
+1000000000.00000001 << 19
+1000000000.000000001 << 0
+1000000000.000000001 << 1
+1000000000.000000001 << 2
+1000000000.000000001 << 3
+1000000000.000000001 << 4
+1000000000.000000001 << 5
+1000000000.000000001 << 6
+1000000000.000000001 << 7
+1000000000.000000001 << 8
+1000000000.000000001 << 9
+1000000000.000000001 << 10
+1000000000.000000001 << 11
+1000000000.000000001 << 12
+1000000000.000000001 << 13
+1000000000.000000001 << 14
+1000000000.000000001 << 15
+1000000000.000000001 << 16
+1000000000.000000001 << 17
+1000000000.000000001 << 18
+1000000000.000000001 << 19
+1000000000.0000000001 << 0
+1000000000.0000000001 << 1
+1000000000.0000000001 << 2
+1000000000.0000000001 << 3
+1000000000.0000000001 << 4
+1000000000.0000000001 << 5
+1000000000.0000000001 << 6
+1000000000.0000000001 << 7
+1000000000.0000000001 << 8
+1000000000.0000000001 << 9
+1000000000.0000000001 << 10
+1000000000.0000000001 << 11
+1000000000.0000000001 << 12
+1000000000.0000000001 << 13
+1000000000.0000000001 << 14
+1000000000.0000000001 << 15
+1000000000.0000000001 << 16
+1000000000.0000000001 << 17
+1000000000.0000000001 << 18
+1000000000.0000000001 << 19
+10000000000 << 0
+10000000000 << 1
+10000000000 << 2
+10000000000 << 3
+10000000000 << 4
+10000000000 << 5
+10000000000 << 6
+10000000000 << 7
+10000000000 << 8
+10000000000 << 9
+10000000000 << 10
+10000000000 << 11
+10000000000 << 12
+10000000000 << 13
+10000000000 << 14
+10000000000 << 15
+10000000000 << 16
+10000000000 << 17
+10000000000 << 18
+10000000000 << 19
+10000000000.1 << 0
+10000000000.1 << 1
+10000000000.1 << 2
+10000000000.1 << 3
+10000000000.1 << 4
+10000000000.1 << 5
+10000000000.1 << 6
+10000000000.1 << 7
+10000000000.1 << 8
+10000000000.1 << 9
+10000000000.1 << 10
+10000000000.1 << 11
+10000000000.1 << 12
+10000000000.1 << 13
+10000000000.1 << 14
+10000000000.1 << 15
+10000000000.1 << 16
+10000000000.1 << 17
+10000000000.1 << 18
+10000000000.1 << 19
+10000000000.01 << 0
+10000000000.01 << 1
+10000000000.01 << 2
+10000000000.01 << 3
+10000000000.01 << 4
+10000000000.01 << 5
+10000000000.01 << 6
+10000000000.01 << 7
+10000000000.01 << 8
+10000000000.01 << 9
+10000000000.01 << 10
+10000000000.01 << 11
+10000000000.01 << 12
+10000000000.01 << 13
+10000000000.01 << 14
+10000000000.01 << 15
+10000000000.01 << 16
+10000000000.01 << 17
+10000000000.01 << 18
+10000000000.01 << 19
+10000000000.001 << 0
+10000000000.001 << 1
+10000000000.001 << 2
+10000000000.001 << 3
+10000000000.001 << 4
+10000000000.001 << 5
+10000000000.001 << 6
+10000000000.001 << 7
+10000000000.001 << 8
+10000000000.001 << 9
+10000000000.001 << 10
+10000000000.001 << 11
+10000000000.001 << 12
+10000000000.001 << 13
+10000000000.001 << 14
+10000000000.001 << 15
+10000000000.001 << 16
+10000000000.001 << 17
+10000000000.001 << 18
+10000000000.001 << 19
+10000000000.0001 << 0
+10000000000.0001 << 1
+10000000000.0001 << 2
+10000000000.0001 << 3
+10000000000.0001 << 4
+10000000000.0001 << 5
+10000000000.0001 << 6
+10000000000.0001 << 7
+10000000000.0001 << 8
+10000000000.0001 << 9
+10000000000.0001 << 10
+10000000000.0001 << 11
+10000000000.0001 << 12
+10000000000.0001 << 13
+10000000000.0001 << 14
+10000000000.0001 << 15
+10000000000.0001 << 16
+10000000000.0001 << 17
+10000000000.0001 << 18
+10000000000.0001 << 19
+10000000000.00001 << 0
+10000000000.00001 << 1
+10000000000.00001 << 2
+10000000000.00001 << 3
+10000000000.00001 << 4
+10000000000.00001 << 5
+10000000000.00001 << 6
+10000000000.00001 << 7
+10000000000.00001 << 8
+10000000000.00001 << 9
+10000000000.00001 << 10
+10000000000.00001 << 11
+10000000000.00001 << 12
+10000000000.00001 << 13
+10000000000.00001 << 14
+10000000000.00001 << 15
+10000000000.00001 << 16
+10000000000.00001 << 17
+10000000000.00001 << 18
+10000000000.00001 << 19
+10000000000.000001 << 0
+10000000000.000001 << 1
+10000000000.000001 << 2
+10000000000.000001 << 3
+10000000000.000001 << 4
+10000000000.000001 << 5
+10000000000.000001 << 6
+10000000000.000001 << 7
+10000000000.000001 << 8
+10000000000.000001 << 9
+10000000000.000001 << 10
+10000000000.000001 << 11
+10000000000.000001 << 12
+10000000000.000001 << 13
+10000000000.000001 << 14
+10000000000.000001 << 15
+10000000000.000001 << 16
+10000000000.000001 << 17
+10000000000.000001 << 18
+10000000000.000001 << 19
+10000000000.0000001 << 0
+10000000000.0000001 << 1
+10000000000.0000001 << 2
+10000000000.0000001 << 3
+10000000000.0000001 << 4
+10000000000.0000001 << 5
+10000000000.0000001 << 6
+10000000000.0000001 << 7
+10000000000.0000001 << 8
+10000000000.0000001 << 9
+10000000000.0000001 << 10
+10000000000.0000001 << 11
+10000000000.0000001 << 12
+10000000000.0000001 << 13
+10000000000.0000001 << 14
+10000000000.0000001 << 15
+10000000000.0000001 << 16
+10000000000.0000001 << 17
+10000000000.0000001 << 18
+10000000000.0000001 << 19
+10000000000.00000001 << 0
+10000000000.00000001 << 1
+10000000000.00000001 << 2
+10000000000.00000001 << 3
+10000000000.00000001 << 4
+10000000000.00000001 << 5
+10000000000.00000001 << 6
+10000000000.00000001 << 7
+10000000000.00000001 << 8
+10000000000.00000001 << 9
+10000000000.00000001 << 10
+10000000000.00000001 << 11
+10000000000.00000001 << 12
+10000000000.00000001 << 13
+10000000000.00000001 << 14
+10000000000.00000001 << 15
+10000000000.00000001 << 16
+10000000000.00000001 << 17
+10000000000.00000001 << 18
+10000000000.00000001 << 19
+10000000000.000000001 << 0
+10000000000.000000001 << 1
+10000000000.000000001 << 2
+10000000000.000000001 << 3
+10000000000.000000001 << 4
+10000000000.000000001 << 5
+10000000000.000000001 << 6
+10000000000.000000001 << 7
+10000000000.000000001 << 8
+10000000000.000000001 << 9
+10000000000.000000001 << 10
+10000000000.000000001 << 11
+10000000000.000000001 << 12
+10000000000.000000001 << 13
+10000000000.000000001 << 14
+10000000000.000000001 << 15
+10000000000.000000001 << 16
+10000000000.000000001 << 17
+10000000000.000000001 << 18
+10000000000.000000001 << 19
+10000000000.0000000001 << 0
+10000000000.0000000001 << 1
+10000000000.0000000001 << 2
+10000000000.0000000001 << 3
+10000000000.0000000001 << 4
+10000000000.0000000001 << 5
+10000000000.0000000001 << 6
+10000000000.0000000001 << 7
+10000000000.0000000001 << 8
+10000000000.0000000001 << 9
+10000000000.0000000001 << 10
+10000000000.0000000001 << 11
+10000000000.0000000001 << 12
+10000000000.0000000001 << 13
+10000000000.0000000001 << 14
+10000000000.0000000001 << 15
+10000000000.0000000001 << 16
+10000000000.0000000001 << 17
+10000000000.0000000001 << 18
+10000000000.0000000001 << 19
+0 >> 0
+0 >> 1
+0 >> 2
+0 >> 3
+0 >> 4
+0 >> 5
+0 >> 6
+0 >> 7
+0 >> 8
+0 >> 9
+0 >> 10
+0 >> 11
+0 >> 12
+0 >> 13
+0 >> 14
+0 >> 15
+0 >> 16
+0 >> 17
+0 >> 18
+0 >> 19
+0.1 >> 0
+0.1 >> 1
+0.1 >> 2
+0.1 >> 3
+0.1 >> 4
+0.1 >> 5
+0.1 >> 6
+0.1 >> 7
+0.1 >> 8
+0.1 >> 9
+0.1 >> 10
+0.1 >> 11
+0.1 >> 12
+0.1 >> 13
+0.1 >> 14
+0.1 >> 15
+0.1 >> 16
+0.1 >> 17
+0.1 >> 18
+0.1 >> 19
+0.01 >> 0
+0.01 >> 1
+0.01 >> 2
+0.01 >> 3
+0.01 >> 4
+0.01 >> 5
+0.01 >> 6
+0.01 >> 7
+0.01 >> 8
+0.01 >> 9
+0.01 >> 10
+0.01 >> 11
+0.01 >> 12
+0.01 >> 13
+0.01 >> 14
+0.01 >> 15
+0.01 >> 16
+0.01 >> 17
+0.01 >> 18
+0.01 >> 19
+0.001 >> 0
+0.001 >> 1
+0.001 >> 2
+0.001 >> 3
+0.001 >> 4
+0.001 >> 5
+0.001 >> 6
+0.001 >> 7
+0.001 >> 8
+0.001 >> 9
+0.001 >> 10
+0.001 >> 11
+0.001 >> 12
+0.001 >> 13
+0.001 >> 14
+0.001 >> 15
+0.001 >> 16
+0.001 >> 17
+0.001 >> 18
+0.001 >> 19
+0.0001 >> 0
+0.0001 >> 1
+0.0001 >> 2
+0.0001 >> 3
+0.0001 >> 4
+0.0001 >> 5
+0.0001 >> 6
+0.0001 >> 7
+0.0001 >> 8
+0.0001 >> 9
+0.0001 >> 10
+0.0001 >> 11
+0.0001 >> 12
+0.0001 >> 13
+0.0001 >> 14
+0.0001 >> 15
+0.0001 >> 16
+0.0001 >> 17
+0.0001 >> 18
+0.0001 >> 19
+0.00001 >> 0
+0.00001 >> 1
+0.00001 >> 2
+0.00001 >> 3
+0.00001 >> 4
+0.00001 >> 5
+0.00001 >> 6
+0.00001 >> 7
+0.00001 >> 8
+0.00001 >> 9
+0.00001 >> 10
+0.00001 >> 11
+0.00001 >> 12
+0.00001 >> 13
+0.00001 >> 14
+0.00001 >> 15
+0.00001 >> 16
+0.00001 >> 17
+0.00001 >> 18
+0.00001 >> 19
+0.000001 >> 0
+0.000001 >> 1
+0.000001 >> 2
+0.000001 >> 3
+0.000001 >> 4
+0.000001 >> 5
+0.000001 >> 6
+0.000001 >> 7
+0.000001 >> 8
+0.000001 >> 9
+0.000001 >> 10
+0.000001 >> 11
+0.000001 >> 12
+0.000001 >> 13
+0.000001 >> 14
+0.000001 >> 15
+0.000001 >> 16
+0.000001 >> 17
+0.000001 >> 18
+0.000001 >> 19
+0.0000001 >> 0
+0.0000001 >> 1
+0.0000001 >> 2
+0.0000001 >> 3
+0.0000001 >> 4
+0.0000001 >> 5
+0.0000001 >> 6
+0.0000001 >> 7
+0.0000001 >> 8
+0.0000001 >> 9
+0.0000001 >> 10
+0.0000001 >> 11
+0.0000001 >> 12
+0.0000001 >> 13
+0.0000001 >> 14
+0.0000001 >> 15
+0.0000001 >> 16
+0.0000001 >> 17
+0.0000001 >> 18
+0.0000001 >> 19
+0.00000001 >> 0
+0.00000001 >> 1
+0.00000001 >> 2
+0.00000001 >> 3
+0.00000001 >> 4
+0.00000001 >> 5
+0.00000001 >> 6
+0.00000001 >> 7
+0.00000001 >> 8
+0.00000001 >> 9
+0.00000001 >> 10
+0.00000001 >> 11
+0.00000001 >> 12
+0.00000001 >> 13
+0.00000001 >> 14
+0.00000001 >> 15
+0.00000001 >> 16
+0.00000001 >> 17
+0.00000001 >> 18
+0.00000001 >> 19
+0.000000001 >> 0
+0.000000001 >> 1
+0.000000001 >> 2
+0.000000001 >> 3
+0.000000001 >> 4
+0.000000001 >> 5
+0.000000001 >> 6
+0.000000001 >> 7
+0.000000001 >> 8
+0.000000001 >> 9
+0.000000001 >> 10
+0.000000001 >> 11
+0.000000001 >> 12
+0.000000001 >> 13
+0.000000001 >> 14
+0.000000001 >> 15
+0.000000001 >> 16
+0.000000001 >> 17
+0.000000001 >> 18
+0.000000001 >> 19
+0.0000000001 >> 0
+0.0000000001 >> 1
+0.0000000001 >> 2
+0.0000000001 >> 3
+0.0000000001 >> 4
+0.0000000001 >> 5
+0.0000000001 >> 6
+0.0000000001 >> 7
+0.0000000001 >> 8
+0.0000000001 >> 9
+0.0000000001 >> 10
+0.0000000001 >> 11
+0.0000000001 >> 12
+0.0000000001 >> 13
+0.0000000001 >> 14
+0.0000000001 >> 15
+0.0000000001 >> 16
+0.0000000001 >> 17
+0.0000000001 >> 18
+0.0000000001 >> 19
+1 >> 0
+1 >> 1
+1 >> 2
+1 >> 3
+1 >> 4
+1 >> 5
+1 >> 6
+1 >> 7
+1 >> 8
+1 >> 9
+1 >> 10
+1 >> 11
+1 >> 12
+1 >> 13
+1 >> 14
+1 >> 15
+1 >> 16
+1 >> 17
+1 >> 18
+1 >> 19
+1.1 >> 0
+1.1 >> 1
+1.1 >> 2
+1.1 >> 3
+1.1 >> 4
+1.1 >> 5
+1.1 >> 6
+1.1 >> 7
+1.1 >> 8
+1.1 >> 9
+1.1 >> 10
+1.1 >> 11
+1.1 >> 12
+1.1 >> 13
+1.1 >> 14
+1.1 >> 15
+1.1 >> 16
+1.1 >> 17
+1.1 >> 18
+1.1 >> 19
+1.01 >> 0
+1.01 >> 1
+1.01 >> 2
+1.01 >> 3
+1.01 >> 4
+1.01 >> 5
+1.01 >> 6
+1.01 >> 7
+1.01 >> 8
+1.01 >> 9
+1.01 >> 10
+1.01 >> 11
+1.01 >> 12
+1.01 >> 13
+1.01 >> 14
+1.01 >> 15
+1.01 >> 16
+1.01 >> 17
+1.01 >> 18
+1.01 >> 19
+1.001 >> 0
+1.001 >> 1
+1.001 >> 2
+1.001 >> 3
+1.001 >> 4
+1.001 >> 5
+1.001 >> 6
+1.001 >> 7
+1.001 >> 8
+1.001 >> 9
+1.001 >> 10
+1.001 >> 11
+1.001 >> 12
+1.001 >> 13
+1.001 >> 14
+1.001 >> 15
+1.001 >> 16
+1.001 >> 17
+1.001 >> 18
+1.001 >> 19
+1.0001 >> 0
+1.0001 >> 1
+1.0001 >> 2
+1.0001 >> 3
+1.0001 >> 4
+1.0001 >> 5
+1.0001 >> 6
+1.0001 >> 7
+1.0001 >> 8
+1.0001 >> 9
+1.0001 >> 10
+1.0001 >> 11
+1.0001 >> 12
+1.0001 >> 13
+1.0001 >> 14
+1.0001 >> 15
+1.0001 >> 16
+1.0001 >> 17
+1.0001 >> 18
+1.0001 >> 19
+1.00001 >> 0
+1.00001 >> 1
+1.00001 >> 2
+1.00001 >> 3
+1.00001 >> 4
+1.00001 >> 5
+1.00001 >> 6
+1.00001 >> 7
+1.00001 >> 8
+1.00001 >> 9
+1.00001 >> 10
+1.00001 >> 11
+1.00001 >> 12
+1.00001 >> 13
+1.00001 >> 14
+1.00001 >> 15
+1.00001 >> 16
+1.00001 >> 17
+1.00001 >> 18
+1.00001 >> 19
+1.000001 >> 0
+1.000001 >> 1
+1.000001 >> 2
+1.000001 >> 3
+1.000001 >> 4
+1.000001 >> 5
+1.000001 >> 6
+1.000001 >> 7
+1.000001 >> 8
+1.000001 >> 9
+1.000001 >> 10
+1.000001 >> 11
+1.000001 >> 12
+1.000001 >> 13
+1.000001 >> 14
+1.000001 >> 15
+1.000001 >> 16
+1.000001 >> 17
+1.000001 >> 18
+1.000001 >> 19
+1.0000001 >> 0
+1.0000001 >> 1
+1.0000001 >> 2
+1.0000001 >> 3
+1.0000001 >> 4
+1.0000001 >> 5
+1.0000001 >> 6
+1.0000001 >> 7
+1.0000001 >> 8
+1.0000001 >> 9
+1.0000001 >> 10
+1.0000001 >> 11
+1.0000001 >> 12
+1.0000001 >> 13
+1.0000001 >> 14
+1.0000001 >> 15
+1.0000001 >> 16
+1.0000001 >> 17
+1.0000001 >> 18
+1.0000001 >> 19
+1.00000001 >> 0
+1.00000001 >> 1
+1.00000001 >> 2
+1.00000001 >> 3
+1.00000001 >> 4
+1.00000001 >> 5
+1.00000001 >> 6
+1.00000001 >> 7
+1.00000001 >> 8
+1.00000001 >> 9
+1.00000001 >> 10
+1.00000001 >> 11
+1.00000001 >> 12
+1.00000001 >> 13
+1.00000001 >> 14
+1.00000001 >> 15
+1.00000001 >> 16
+1.00000001 >> 17
+1.00000001 >> 18
+1.00000001 >> 19
+1.000000001 >> 0
+1.000000001 >> 1
+1.000000001 >> 2
+1.000000001 >> 3
+1.000000001 >> 4
+1.000000001 >> 5
+1.000000001 >> 6
+1.000000001 >> 7
+1.000000001 >> 8
+1.000000001 >> 9
+1.000000001 >> 10
+1.000000001 >> 11
+1.000000001 >> 12
+1.000000001 >> 13
+1.000000001 >> 14
+1.000000001 >> 15
+1.000000001 >> 16
+1.000000001 >> 17
+1.000000001 >> 18
+1.000000001 >> 19
+1.0000000001 >> 0
+1.0000000001 >> 1
+1.0000000001 >> 2
+1.0000000001 >> 3
+1.0000000001 >> 4
+1.0000000001 >> 5
+1.0000000001 >> 6
+1.0000000001 >> 7
+1.0000000001 >> 8
+1.0000000001 >> 9
+1.0000000001 >> 10
+1.0000000001 >> 11
+1.0000000001 >> 12
+1.0000000001 >> 13
+1.0000000001 >> 14
+1.0000000001 >> 15
+1.0000000001 >> 16
+1.0000000001 >> 17
+1.0000000001 >> 18
+1.0000000001 >> 19
+10 >> 0
+10 >> 1
+10 >> 2
+10 >> 3
+10 >> 4
+10 >> 5
+10 >> 6
+10 >> 7
+10 >> 8
+10 >> 9
+10 >> 10
+10 >> 11
+10 >> 12
+10 >> 13
+10 >> 14
+10 >> 15
+10 >> 16
+10 >> 17
+10 >> 18
+10 >> 19
+10.1 >> 0
+10.1 >> 1
+10.1 >> 2
+10.1 >> 3
+10.1 >> 4
+10.1 >> 5
+10.1 >> 6
+10.1 >> 7
+10.1 >> 8
+10.1 >> 9
+10.1 >> 10
+10.1 >> 11
+10.1 >> 12
+10.1 >> 13
+10.1 >> 14
+10.1 >> 15
+10.1 >> 16
+10.1 >> 17
+10.1 >> 18
+10.1 >> 19
+10.01 >> 0
+10.01 >> 1
+10.01 >> 2
+10.01 >> 3
+10.01 >> 4
+10.01 >> 5
+10.01 >> 6
+10.01 >> 7
+10.01 >> 8
+10.01 >> 9
+10.01 >> 10
+10.01 >> 11
+10.01 >> 12
+10.01 >> 13
+10.01 >> 14
+10.01 >> 15
+10.01 >> 16
+10.01 >> 17
+10.01 >> 18
+10.01 >> 19
+10.001 >> 0
+10.001 >> 1
+10.001 >> 2
+10.001 >> 3
+10.001 >> 4
+10.001 >> 5
+10.001 >> 6
+10.001 >> 7
+10.001 >> 8
+10.001 >> 9
+10.001 >> 10
+10.001 >> 11
+10.001 >> 12
+10.001 >> 13
+10.001 >> 14
+10.001 >> 15
+10.001 >> 16
+10.001 >> 17
+10.001 >> 18
+10.001 >> 19
+10.0001 >> 0
+10.0001 >> 1
+10.0001 >> 2
+10.0001 >> 3
+10.0001 >> 4
+10.0001 >> 5
+10.0001 >> 6
+10.0001 >> 7
+10.0001 >> 8
+10.0001 >> 9
+10.0001 >> 10
+10.0001 >> 11
+10.0001 >> 12
+10.0001 >> 13
+10.0001 >> 14
+10.0001 >> 15
+10.0001 >> 16
+10.0001 >> 17
+10.0001 >> 18
+10.0001 >> 19
+10.00001 >> 0
+10.00001 >> 1
+10.00001 >> 2
+10.00001 >> 3
+10.00001 >> 4
+10.00001 >> 5
+10.00001 >> 6
+10.00001 >> 7
+10.00001 >> 8
+10.00001 >> 9
+10.00001 >> 10
+10.00001 >> 11
+10.00001 >> 12
+10.00001 >> 13
+10.00001 >> 14
+10.00001 >> 15
+10.00001 >> 16
+10.00001 >> 17
+10.00001 >> 18
+10.00001 >> 19
+10.000001 >> 0
+10.000001 >> 1
+10.000001 >> 2
+10.000001 >> 3
+10.000001 >> 4
+10.000001 >> 5
+10.000001 >> 6
+10.000001 >> 7
+10.000001 >> 8
+10.000001 >> 9
+10.000001 >> 10
+10.000001 >> 11
+10.000001 >> 12
+10.000001 >> 13
+10.000001 >> 14
+10.000001 >> 15
+10.000001 >> 16
+10.000001 >> 17
+10.000001 >> 18
+10.000001 >> 19
+10.0000001 >> 0
+10.0000001 >> 1
+10.0000001 >> 2
+10.0000001 >> 3
+10.0000001 >> 4
+10.0000001 >> 5
+10.0000001 >> 6
+10.0000001 >> 7
+10.0000001 >> 8
+10.0000001 >> 9
+10.0000001 >> 10
+10.0000001 >> 11
+10.0000001 >> 12
+10.0000001 >> 13
+10.0000001 >> 14
+10.0000001 >> 15
+10.0000001 >> 16
+10.0000001 >> 17
+10.0000001 >> 18
+10.0000001 >> 19
+10.00000001 >> 0
+10.00000001 >> 1
+10.00000001 >> 2
+10.00000001 >> 3
+10.00000001 >> 4
+10.00000001 >> 5
+10.00000001 >> 6
+10.00000001 >> 7
+10.00000001 >> 8
+10.00000001 >> 9
+10.00000001 >> 10
+10.00000001 >> 11
+10.00000001 >> 12
+10.00000001 >> 13
+10.00000001 >> 14
+10.00000001 >> 15
+10.00000001 >> 16
+10.00000001 >> 17
+10.00000001 >> 18
+10.00000001 >> 19
+10.000000001 >> 0
+10.000000001 >> 1
+10.000000001 >> 2
+10.000000001 >> 3
+10.000000001 >> 4
+10.000000001 >> 5
+10.000000001 >> 6
+10.000000001 >> 7
+10.000000001 >> 8
+10.000000001 >> 9
+10.000000001 >> 10
+10.000000001 >> 11
+10.000000001 >> 12
+10.000000001 >> 13
+10.000000001 >> 14
+10.000000001 >> 15
+10.000000001 >> 16
+10.000000001 >> 17
+10.000000001 >> 18
+10.000000001 >> 19
+10.0000000001 >> 0
+10.0000000001 >> 1
+10.0000000001 >> 2
+10.0000000001 >> 3
+10.0000000001 >> 4
+10.0000000001 >> 5
+10.0000000001 >> 6
+10.0000000001 >> 7
+10.0000000001 >> 8
+10.0000000001 >> 9
+10.0000000001 >> 10
+10.0000000001 >> 11
+10.0000000001 >> 12
+10.0000000001 >> 13
+10.0000000001 >> 14
+10.0000000001 >> 15
+10.0000000001 >> 16
+10.0000000001 >> 17
+10.0000000001 >> 18
+10.0000000001 >> 19
+100 >> 0
+100 >> 1
+100 >> 2
+100 >> 3
+100 >> 4
+100 >> 5
+100 >> 6
+100 >> 7
+100 >> 8
+100 >> 9
+100 >> 10
+100 >> 11
+100 >> 12
+100 >> 13
+100 >> 14
+100 >> 15
+100 >> 16
+100 >> 17
+100 >> 18
+100 >> 19
+100.1 >> 0
+100.1 >> 1
+100.1 >> 2
+100.1 >> 3
+100.1 >> 4
+100.1 >> 5
+100.1 >> 6
+100.1 >> 7
+100.1 >> 8
+100.1 >> 9
+100.1 >> 10
+100.1 >> 11
+100.1 >> 12
+100.1 >> 13
+100.1 >> 14
+100.1 >> 15
+100.1 >> 16
+100.1 >> 17
+100.1 >> 18
+100.1 >> 19
+100.01 >> 0
+100.01 >> 1
+100.01 >> 2
+100.01 >> 3
+100.01 >> 4
+100.01 >> 5
+100.01 >> 6
+100.01 >> 7
+100.01 >> 8
+100.01 >> 9
+100.01 >> 10
+100.01 >> 11
+100.01 >> 12
+100.01 >> 13
+100.01 >> 14
+100.01 >> 15
+100.01 >> 16
+100.01 >> 17
+100.01 >> 18
+100.01 >> 19
+100.001 >> 0
+100.001 >> 1
+100.001 >> 2
+100.001 >> 3
+100.001 >> 4
+100.001 >> 5
+100.001 >> 6
+100.001 >> 7
+100.001 >> 8
+100.001 >> 9
+100.001 >> 10
+100.001 >> 11
+100.001 >> 12
+100.001 >> 13
+100.001 >> 14
+100.001 >> 15
+100.001 >> 16
+100.001 >> 17
+100.001 >> 18
+100.001 >> 19
+100.0001 >> 0
+100.0001 >> 1
+100.0001 >> 2
+100.0001 >> 3
+100.0001 >> 4
+100.0001 >> 5
+100.0001 >> 6
+100.0001 >> 7
+100.0001 >> 8
+100.0001 >> 9
+100.0001 >> 10
+100.0001 >> 11
+100.0001 >> 12
+100.0001 >> 13
+100.0001 >> 14
+100.0001 >> 15
+100.0001 >> 16
+100.0001 >> 17
+100.0001 >> 18
+100.0001 >> 19
+100.00001 >> 0
+100.00001 >> 1
+100.00001 >> 2
+100.00001 >> 3
+100.00001 >> 4
+100.00001 >> 5
+100.00001 >> 6
+100.00001 >> 7
+100.00001 >> 8
+100.00001 >> 9
+100.00001 >> 10
+100.00001 >> 11
+100.00001 >> 12
+100.00001 >> 13
+100.00001 >> 14
+100.00001 >> 15
+100.00001 >> 16
+100.00001 >> 17
+100.00001 >> 18
+100.00001 >> 19
+100.000001 >> 0
+100.000001 >> 1
+100.000001 >> 2
+100.000001 >> 3
+100.000001 >> 4
+100.000001 >> 5
+100.000001 >> 6
+100.000001 >> 7
+100.000001 >> 8
+100.000001 >> 9
+100.000001 >> 10
+100.000001 >> 11
+100.000001 >> 12
+100.000001 >> 13
+100.000001 >> 14
+100.000001 >> 15
+100.000001 >> 16
+100.000001 >> 17
+100.000001 >> 18
+100.000001 >> 19
+100.0000001 >> 0
+100.0000001 >> 1
+100.0000001 >> 2
+100.0000001 >> 3
+100.0000001 >> 4
+100.0000001 >> 5
+100.0000001 >> 6
+100.0000001 >> 7
+100.0000001 >> 8
+100.0000001 >> 9
+100.0000001 >> 10
+100.0000001 >> 11
+100.0000001 >> 12
+100.0000001 >> 13
+100.0000001 >> 14
+100.0000001 >> 15
+100.0000001 >> 16
+100.0000001 >> 17
+100.0000001 >> 18
+100.0000001 >> 19
+100.00000001 >> 0
+100.00000001 >> 1
+100.00000001 >> 2
+100.00000001 >> 3
+100.00000001 >> 4
+100.00000001 >> 5
+100.00000001 >> 6
+100.00000001 >> 7
+100.00000001 >> 8
+100.00000001 >> 9
+100.00000001 >> 10
+100.00000001 >> 11
+100.00000001 >> 12
+100.00000001 >> 13
+100.00000001 >> 14
+100.00000001 >> 15
+100.00000001 >> 16
+100.00000001 >> 17
+100.00000001 >> 18
+100.00000001 >> 19
+100.000000001 >> 0
+100.000000001 >> 1
+100.000000001 >> 2
+100.000000001 >> 3
+100.000000001 >> 4
+100.000000001 >> 5
+100.000000001 >> 6
+100.000000001 >> 7
+100.000000001 >> 8
+100.000000001 >> 9
+100.000000001 >> 10
+100.000000001 >> 11
+100.000000001 >> 12
+100.000000001 >> 13
+100.000000001 >> 14
+100.000000001 >> 15
+100.000000001 >> 16
+100.000000001 >> 17
+100.000000001 >> 18
+100.000000001 >> 19
+100.0000000001 >> 0
+100.0000000001 >> 1
+100.0000000001 >> 2
+100.0000000001 >> 3
+100.0000000001 >> 4
+100.0000000001 >> 5
+100.0000000001 >> 6
+100.0000000001 >> 7
+100.0000000001 >> 8
+100.0000000001 >> 9
+100.0000000001 >> 10
+100.0000000001 >> 11
+100.0000000001 >> 12
+100.0000000001 >> 13
+100.0000000001 >> 14
+100.0000000001 >> 15
+100.0000000001 >> 16
+100.0000000001 >> 17
+100.0000000001 >> 18
+100.0000000001 >> 19
+1000 >> 0
+1000 >> 1
+1000 >> 2
+1000 >> 3
+1000 >> 4
+1000 >> 5
+1000 >> 6
+1000 >> 7
+1000 >> 8
+1000 >> 9
+1000 >> 10
+1000 >> 11
+1000 >> 12
+1000 >> 13
+1000 >> 14
+1000 >> 15
+1000 >> 16
+1000 >> 17
+1000 >> 18
+1000 >> 19
+1000.1 >> 0
+1000.1 >> 1
+1000.1 >> 2
+1000.1 >> 3
+1000.1 >> 4
+1000.1 >> 5
+1000.1 >> 6
+1000.1 >> 7
+1000.1 >> 8
+1000.1 >> 9
+1000.1 >> 10
+1000.1 >> 11
+1000.1 >> 12
+1000.1 >> 13
+1000.1 >> 14
+1000.1 >> 15
+1000.1 >> 16
+1000.1 >> 17
+1000.1 >> 18
+1000.1 >> 19
+1000.01 >> 0
+1000.01 >> 1
+1000.01 >> 2
+1000.01 >> 3
+1000.01 >> 4
+1000.01 >> 5
+1000.01 >> 6
+1000.01 >> 7
+1000.01 >> 8
+1000.01 >> 9
+1000.01 >> 10
+1000.01 >> 11
+1000.01 >> 12
+1000.01 >> 13
+1000.01 >> 14
+1000.01 >> 15
+1000.01 >> 16
+1000.01 >> 17
+1000.01 >> 18
+1000.01 >> 19
+1000.001 >> 0
+1000.001 >> 1
+1000.001 >> 2
+1000.001 >> 3
+1000.001 >> 4
+1000.001 >> 5
+1000.001 >> 6
+1000.001 >> 7
+1000.001 >> 8
+1000.001 >> 9
+1000.001 >> 10
+1000.001 >> 11
+1000.001 >> 12
+1000.001 >> 13
+1000.001 >> 14
+1000.001 >> 15
+1000.001 >> 16
+1000.001 >> 17
+1000.001 >> 18
+1000.001 >> 19
+1000.0001 >> 0
+1000.0001 >> 1
+1000.0001 >> 2
+1000.0001 >> 3
+1000.0001 >> 4
+1000.0001 >> 5
+1000.0001 >> 6
+1000.0001 >> 7
+1000.0001 >> 8
+1000.0001 >> 9
+1000.0001 >> 10
+1000.0001 >> 11
+1000.0001 >> 12
+1000.0001 >> 13
+1000.0001 >> 14
+1000.0001 >> 15
+1000.0001 >> 16
+1000.0001 >> 17
+1000.0001 >> 18
+1000.0001 >> 19
+1000.00001 >> 0
+1000.00001 >> 1
+1000.00001 >> 2
+1000.00001 >> 3
+1000.00001 >> 4
+1000.00001 >> 5
+1000.00001 >> 6
+1000.00001 >> 7
+1000.00001 >> 8
+1000.00001 >> 9
+1000.00001 >> 10
+1000.00001 >> 11
+1000.00001 >> 12
+1000.00001 >> 13
+1000.00001 >> 14
+1000.00001 >> 15
+1000.00001 >> 16
+1000.00001 >> 17
+1000.00001 >> 18
+1000.00001 >> 19
+1000.000001 >> 0
+1000.000001 >> 1
+1000.000001 >> 2
+1000.000001 >> 3
+1000.000001 >> 4
+1000.000001 >> 5
+1000.000001 >> 6
+1000.000001 >> 7
+1000.000001 >> 8
+1000.000001 >> 9
+1000.000001 >> 10
+1000.000001 >> 11
+1000.000001 >> 12
+1000.000001 >> 13
+1000.000001 >> 14
+1000.000001 >> 15
+1000.000001 >> 16
+1000.000001 >> 17
+1000.000001 >> 18
+1000.000001 >> 19
+1000.0000001 >> 0
+1000.0000001 >> 1
+1000.0000001 >> 2
+1000.0000001 >> 3
+1000.0000001 >> 4
+1000.0000001 >> 5
+1000.0000001 >> 6
+1000.0000001 >> 7
+1000.0000001 >> 8
+1000.0000001 >> 9
+1000.0000001 >> 10
+1000.0000001 >> 11
+1000.0000001 >> 12
+1000.0000001 >> 13
+1000.0000001 >> 14
+1000.0000001 >> 15
+1000.0000001 >> 16
+1000.0000001 >> 17
+1000.0000001 >> 18
+1000.0000001 >> 19
+1000.00000001 >> 0
+1000.00000001 >> 1
+1000.00000001 >> 2
+1000.00000001 >> 3
+1000.00000001 >> 4
+1000.00000001 >> 5
+1000.00000001 >> 6
+1000.00000001 >> 7
+1000.00000001 >> 8
+1000.00000001 >> 9
+1000.00000001 >> 10
+1000.00000001 >> 11
+1000.00000001 >> 12
+1000.00000001 >> 13
+1000.00000001 >> 14
+1000.00000001 >> 15
+1000.00000001 >> 16
+1000.00000001 >> 17
+1000.00000001 >> 18
+1000.00000001 >> 19
+1000.000000001 >> 0
+1000.000000001 >> 1
+1000.000000001 >> 2
+1000.000000001 >> 3
+1000.000000001 >> 4
+1000.000000001 >> 5
+1000.000000001 >> 6
+1000.000000001 >> 7
+1000.000000001 >> 8
+1000.000000001 >> 9
+1000.000000001 >> 10
+1000.000000001 >> 11
+1000.000000001 >> 12
+1000.000000001 >> 13
+1000.000000001 >> 14
+1000.000000001 >> 15
+1000.000000001 >> 16
+1000.000000001 >> 17
+1000.000000001 >> 18
+1000.000000001 >> 19
+1000.0000000001 >> 0
+1000.0000000001 >> 1
+1000.0000000001 >> 2
+1000.0000000001 >> 3
+1000.0000000001 >> 4
+1000.0000000001 >> 5
+1000.0000000001 >> 6
+1000.0000000001 >> 7
+1000.0000000001 >> 8
+1000.0000000001 >> 9
+1000.0000000001 >> 10
+1000.0000000001 >> 11
+1000.0000000001 >> 12
+1000.0000000001 >> 13
+1000.0000000001 >> 14
+1000.0000000001 >> 15
+1000.0000000001 >> 16
+1000.0000000001 >> 17
+1000.0000000001 >> 18
+1000.0000000001 >> 19
+10000 >> 0
+10000 >> 1
+10000 >> 2
+10000 >> 3
+10000 >> 4
+10000 >> 5
+10000 >> 6
+10000 >> 7
+10000 >> 8
+10000 >> 9
+10000 >> 10
+10000 >> 11
+10000 >> 12
+10000 >> 13
+10000 >> 14
+10000 >> 15
+10000 >> 16
+10000 >> 17
+10000 >> 18
+10000 >> 19
+10000.1 >> 0
+10000.1 >> 1
+10000.1 >> 2
+10000.1 >> 3
+10000.1 >> 4
+10000.1 >> 5
+10000.1 >> 6
+10000.1 >> 7
+10000.1 >> 8
+10000.1 >> 9
+10000.1 >> 10
+10000.1 >> 11
+10000.1 >> 12
+10000.1 >> 13
+10000.1 >> 14
+10000.1 >> 15
+10000.1 >> 16
+10000.1 >> 17
+10000.1 >> 18
+10000.1 >> 19
+10000.01 >> 0
+10000.01 >> 1
+10000.01 >> 2
+10000.01 >> 3
+10000.01 >> 4
+10000.01 >> 5
+10000.01 >> 6
+10000.01 >> 7
+10000.01 >> 8
+10000.01 >> 9
+10000.01 >> 10
+10000.01 >> 11
+10000.01 >> 12
+10000.01 >> 13
+10000.01 >> 14
+10000.01 >> 15
+10000.01 >> 16
+10000.01 >> 17
+10000.01 >> 18
+10000.01 >> 19
+10000.001 >> 0
+10000.001 >> 1
+10000.001 >> 2
+10000.001 >> 3
+10000.001 >> 4
+10000.001 >> 5
+10000.001 >> 6
+10000.001 >> 7
+10000.001 >> 8
+10000.001 >> 9
+10000.001 >> 10
+10000.001 >> 11
+10000.001 >> 12
+10000.001 >> 13
+10000.001 >> 14
+10000.001 >> 15
+10000.001 >> 16
+10000.001 >> 17
+10000.001 >> 18
+10000.001 >> 19
+10000.0001 >> 0
+10000.0001 >> 1
+10000.0001 >> 2
+10000.0001 >> 3
+10000.0001 >> 4
+10000.0001 >> 5
+10000.0001 >> 6
+10000.0001 >> 7
+10000.0001 >> 8
+10000.0001 >> 9
+10000.0001 >> 10
+10000.0001 >> 11
+10000.0001 >> 12
+10000.0001 >> 13
+10000.0001 >> 14
+10000.0001 >> 15
+10000.0001 >> 16
+10000.0001 >> 17
+10000.0001 >> 18
+10000.0001 >> 19
+10000.00001 >> 0
+10000.00001 >> 1
+10000.00001 >> 2
+10000.00001 >> 3
+10000.00001 >> 4
+10000.00001 >> 5
+10000.00001 >> 6
+10000.00001 >> 7
+10000.00001 >> 8
+10000.00001 >> 9
+10000.00001 >> 10
+10000.00001 >> 11
+10000.00001 >> 12
+10000.00001 >> 13
+10000.00001 >> 14
+10000.00001 >> 15
+10000.00001 >> 16
+10000.00001 >> 17
+10000.00001 >> 18
+10000.00001 >> 19
+10000.000001 >> 0
+10000.000001 >> 1
+10000.000001 >> 2
+10000.000001 >> 3
+10000.000001 >> 4
+10000.000001 >> 5
+10000.000001 >> 6
+10000.000001 >> 7
+10000.000001 >> 8
+10000.000001 >> 9
+10000.000001 >> 10
+10000.000001 >> 11
+10000.000001 >> 12
+10000.000001 >> 13
+10000.000001 >> 14
+10000.000001 >> 15
+10000.000001 >> 16
+10000.000001 >> 17
+10000.000001 >> 18
+10000.000001 >> 19
+10000.0000001 >> 0
+10000.0000001 >> 1
+10000.0000001 >> 2
+10000.0000001 >> 3
+10000.0000001 >> 4
+10000.0000001 >> 5
+10000.0000001 >> 6
+10000.0000001 >> 7
+10000.0000001 >> 8
+10000.0000001 >> 9
+10000.0000001 >> 10
+10000.0000001 >> 11
+10000.0000001 >> 12
+10000.0000001 >> 13
+10000.0000001 >> 14
+10000.0000001 >> 15
+10000.0000001 >> 16
+10000.0000001 >> 17
+10000.0000001 >> 18
+10000.0000001 >> 19
+10000.00000001 >> 0
+10000.00000001 >> 1
+10000.00000001 >> 2
+10000.00000001 >> 3
+10000.00000001 >> 4
+10000.00000001 >> 5
+10000.00000001 >> 6
+10000.00000001 >> 7
+10000.00000001 >> 8
+10000.00000001 >> 9
+10000.00000001 >> 10
+10000.00000001 >> 11
+10000.00000001 >> 12
+10000.00000001 >> 13
+10000.00000001 >> 14
+10000.00000001 >> 15
+10000.00000001 >> 16
+10000.00000001 >> 17
+10000.00000001 >> 18
+10000.00000001 >> 19
+10000.000000001 >> 0
+10000.000000001 >> 1
+10000.000000001 >> 2
+10000.000000001 >> 3
+10000.000000001 >> 4
+10000.000000001 >> 5
+10000.000000001 >> 6
+10000.000000001 >> 7
+10000.000000001 >> 8
+10000.000000001 >> 9
+10000.000000001 >> 10
+10000.000000001 >> 11
+10000.000000001 >> 12
+10000.000000001 >> 13
+10000.000000001 >> 14
+10000.000000001 >> 15
+10000.000000001 >> 16
+10000.000000001 >> 17
+10000.000000001 >> 18
+10000.000000001 >> 19
+10000.0000000001 >> 0
+10000.0000000001 >> 1
+10000.0000000001 >> 2
+10000.0000000001 >> 3
+10000.0000000001 >> 4
+10000.0000000001 >> 5
+10000.0000000001 >> 6
+10000.0000000001 >> 7
+10000.0000000001 >> 8
+10000.0000000001 >> 9
+10000.0000000001 >> 10
+10000.0000000001 >> 11
+10000.0000000001 >> 12
+10000.0000000001 >> 13
+10000.0000000001 >> 14
+10000.0000000001 >> 15
+10000.0000000001 >> 16
+10000.0000000001 >> 17
+10000.0000000001 >> 18
+10000.0000000001 >> 19
+100000 >> 0
+100000 >> 1
+100000 >> 2
+100000 >> 3
+100000 >> 4
+100000 >> 5
+100000 >> 6
+100000 >> 7
+100000 >> 8
+100000 >> 9
+100000 >> 10
+100000 >> 11
+100000 >> 12
+100000 >> 13
+100000 >> 14
+100000 >> 15
+100000 >> 16
+100000 >> 17
+100000 >> 18
+100000 >> 19
+100000.1 >> 0
+100000.1 >> 1
+100000.1 >> 2
+100000.1 >> 3
+100000.1 >> 4
+100000.1 >> 5
+100000.1 >> 6
+100000.1 >> 7
+100000.1 >> 8
+100000.1 >> 9
+100000.1 >> 10
+100000.1 >> 11
+100000.1 >> 12
+100000.1 >> 13
+100000.1 >> 14
+100000.1 >> 15
+100000.1 >> 16
+100000.1 >> 17
+100000.1 >> 18
+100000.1 >> 19
+100000.01 >> 0
+100000.01 >> 1
+100000.01 >> 2
+100000.01 >> 3
+100000.01 >> 4
+100000.01 >> 5
+100000.01 >> 6
+100000.01 >> 7
+100000.01 >> 8
+100000.01 >> 9
+100000.01 >> 10
+100000.01 >> 11
+100000.01 >> 12
+100000.01 >> 13
+100000.01 >> 14
+100000.01 >> 15
+100000.01 >> 16
+100000.01 >> 17
+100000.01 >> 18
+100000.01 >> 19
+100000.001 >> 0
+100000.001 >> 1
+100000.001 >> 2
+100000.001 >> 3
+100000.001 >> 4
+100000.001 >> 5
+100000.001 >> 6
+100000.001 >> 7
+100000.001 >> 8
+100000.001 >> 9
+100000.001 >> 10
+100000.001 >> 11
+100000.001 >> 12
+100000.001 >> 13
+100000.001 >> 14
+100000.001 >> 15
+100000.001 >> 16
+100000.001 >> 17
+100000.001 >> 18
+100000.001 >> 19
+100000.0001 >> 0
+100000.0001 >> 1
+100000.0001 >> 2
+100000.0001 >> 3
+100000.0001 >> 4
+100000.0001 >> 5
+100000.0001 >> 6
+100000.0001 >> 7
+100000.0001 >> 8
+100000.0001 >> 9
+100000.0001 >> 10
+100000.0001 >> 11
+100000.0001 >> 12
+100000.0001 >> 13
+100000.0001 >> 14
+100000.0001 >> 15
+100000.0001 >> 16
+100000.0001 >> 17
+100000.0001 >> 18
+100000.0001 >> 19
+100000.00001 >> 0
+100000.00001 >> 1
+100000.00001 >> 2
+100000.00001 >> 3
+100000.00001 >> 4
+100000.00001 >> 5
+100000.00001 >> 6
+100000.00001 >> 7
+100000.00001 >> 8
+100000.00001 >> 9
+100000.00001 >> 10
+100000.00001 >> 11
+100000.00001 >> 12
+100000.00001 >> 13
+100000.00001 >> 14
+100000.00001 >> 15
+100000.00001 >> 16
+100000.00001 >> 17
+100000.00001 >> 18
+100000.00001 >> 19
+100000.000001 >> 0
+100000.000001 >> 1
+100000.000001 >> 2
+100000.000001 >> 3
+100000.000001 >> 4
+100000.000001 >> 5
+100000.000001 >> 6
+100000.000001 >> 7
+100000.000001 >> 8
+100000.000001 >> 9
+100000.000001 >> 10
+100000.000001 >> 11
+100000.000001 >> 12
+100000.000001 >> 13
+100000.000001 >> 14
+100000.000001 >> 15
+100000.000001 >> 16
+100000.000001 >> 17
+100000.000001 >> 18
+100000.000001 >> 19
+100000.0000001 >> 0
+100000.0000001 >> 1
+100000.0000001 >> 2
+100000.0000001 >> 3
+100000.0000001 >> 4
+100000.0000001 >> 5
+100000.0000001 >> 6
+100000.0000001 >> 7
+100000.0000001 >> 8
+100000.0000001 >> 9
+100000.0000001 >> 10
+100000.0000001 >> 11
+100000.0000001 >> 12
+100000.0000001 >> 13
+100000.0000001 >> 14
+100000.0000001 >> 15
+100000.0000001 >> 16
+100000.0000001 >> 17
+100000.0000001 >> 18
+100000.0000001 >> 19
+100000.00000001 >> 0
+100000.00000001 >> 1
+100000.00000001 >> 2
+100000.00000001 >> 3
+100000.00000001 >> 4
+100000.00000001 >> 5
+100000.00000001 >> 6
+100000.00000001 >> 7
+100000.00000001 >> 8
+100000.00000001 >> 9
+100000.00000001 >> 10
+100000.00000001 >> 11
+100000.00000001 >> 12
+100000.00000001 >> 13
+100000.00000001 >> 14
+100000.00000001 >> 15
+100000.00000001 >> 16
+100000.00000001 >> 17
+100000.00000001 >> 18
+100000.00000001 >> 19
+100000.000000001 >> 0
+100000.000000001 >> 1
+100000.000000001 >> 2
+100000.000000001 >> 3
+100000.000000001 >> 4
+100000.000000001 >> 5
+100000.000000001 >> 6
+100000.000000001 >> 7
+100000.000000001 >> 8
+100000.000000001 >> 9
+100000.000000001 >> 10
+100000.000000001 >> 11
+100000.000000001 >> 12
+100000.000000001 >> 13
+100000.000000001 >> 14
+100000.000000001 >> 15
+100000.000000001 >> 16
+100000.000000001 >> 17
+100000.000000001 >> 18
+100000.000000001 >> 19
+100000.0000000001 >> 0
+100000.0000000001 >> 1
+100000.0000000001 >> 2
+100000.0000000001 >> 3
+100000.0000000001 >> 4
+100000.0000000001 >> 5
+100000.0000000001 >> 6
+100000.0000000001 >> 7
+100000.0000000001 >> 8
+100000.0000000001 >> 9
+100000.0000000001 >> 10
+100000.0000000001 >> 11
+100000.0000000001 >> 12
+100000.0000000001 >> 13
+100000.0000000001 >> 14
+100000.0000000001 >> 15
+100000.0000000001 >> 16
+100000.0000000001 >> 17
+100000.0000000001 >> 18
+100000.0000000001 >> 19
+1000000 >> 0
+1000000 >> 1
+1000000 >> 2
+1000000 >> 3
+1000000 >> 4
+1000000 >> 5
+1000000 >> 6
+1000000 >> 7
+1000000 >> 8
+1000000 >> 9
+1000000 >> 10
+1000000 >> 11
+1000000 >> 12
+1000000 >> 13
+1000000 >> 14
+1000000 >> 15
+1000000 >> 16
+1000000 >> 17
+1000000 >> 18
+1000000 >> 19
+1000000.1 >> 0
+1000000.1 >> 1
+1000000.1 >> 2
+1000000.1 >> 3
+1000000.1 >> 4
+1000000.1 >> 5
+1000000.1 >> 6
+1000000.1 >> 7
+1000000.1 >> 8
+1000000.1 >> 9
+1000000.1 >> 10
+1000000.1 >> 11
+1000000.1 >> 12
+1000000.1 >> 13
+1000000.1 >> 14
+1000000.1 >> 15
+1000000.1 >> 16
+1000000.1 >> 17
+1000000.1 >> 18
+1000000.1 >> 19
+1000000.01 >> 0
+1000000.01 >> 1
+1000000.01 >> 2
+1000000.01 >> 3
+1000000.01 >> 4
+1000000.01 >> 5
+1000000.01 >> 6
+1000000.01 >> 7
+1000000.01 >> 8
+1000000.01 >> 9
+1000000.01 >> 10
+1000000.01 >> 11
+1000000.01 >> 12
+1000000.01 >> 13
+1000000.01 >> 14
+1000000.01 >> 15
+1000000.01 >> 16
+1000000.01 >> 17
+1000000.01 >> 18
+1000000.01 >> 19
+1000000.001 >> 0
+1000000.001 >> 1
+1000000.001 >> 2
+1000000.001 >> 3
+1000000.001 >> 4
+1000000.001 >> 5
+1000000.001 >> 6
+1000000.001 >> 7
+1000000.001 >> 8
+1000000.001 >> 9
+1000000.001 >> 10
+1000000.001 >> 11
+1000000.001 >> 12
+1000000.001 >> 13
+1000000.001 >> 14
+1000000.001 >> 15
+1000000.001 >> 16
+1000000.001 >> 17
+1000000.001 >> 18
+1000000.001 >> 19
+1000000.0001 >> 0
+1000000.0001 >> 1
+1000000.0001 >> 2
+1000000.0001 >> 3
+1000000.0001 >> 4
+1000000.0001 >> 5
+1000000.0001 >> 6
+1000000.0001 >> 7
+1000000.0001 >> 8
+1000000.0001 >> 9
+1000000.0001 >> 10
+1000000.0001 >> 11
+1000000.0001 >> 12
+1000000.0001 >> 13
+1000000.0001 >> 14
+1000000.0001 >> 15
+1000000.0001 >> 16
+1000000.0001 >> 17
+1000000.0001 >> 18
+1000000.0001 >> 19
+1000000.00001 >> 0
+1000000.00001 >> 1
+1000000.00001 >> 2
+1000000.00001 >> 3
+1000000.00001 >> 4
+1000000.00001 >> 5
+1000000.00001 >> 6
+1000000.00001 >> 7
+1000000.00001 >> 8
+1000000.00001 >> 9
+1000000.00001 >> 10
+1000000.00001 >> 11
+1000000.00001 >> 12
+1000000.00001 >> 13
+1000000.00001 >> 14
+1000000.00001 >> 15
+1000000.00001 >> 16
+1000000.00001 >> 17
+1000000.00001 >> 18
+1000000.00001 >> 19
+1000000.000001 >> 0
+1000000.000001 >> 1
+1000000.000001 >> 2
+1000000.000001 >> 3
+1000000.000001 >> 4
+1000000.000001 >> 5
+1000000.000001 >> 6
+1000000.000001 >> 7
+1000000.000001 >> 8
+1000000.000001 >> 9
+1000000.000001 >> 10
+1000000.000001 >> 11
+1000000.000001 >> 12
+1000000.000001 >> 13
+1000000.000001 >> 14
+1000000.000001 >> 15
+1000000.000001 >> 16
+1000000.000001 >> 17
+1000000.000001 >> 18
+1000000.000001 >> 19
+1000000.0000001 >> 0
+1000000.0000001 >> 1
+1000000.0000001 >> 2
+1000000.0000001 >> 3
+1000000.0000001 >> 4
+1000000.0000001 >> 5
+1000000.0000001 >> 6
+1000000.0000001 >> 7
+1000000.0000001 >> 8
+1000000.0000001 >> 9
+1000000.0000001 >> 10
+1000000.0000001 >> 11
+1000000.0000001 >> 12
+1000000.0000001 >> 13
+1000000.0000001 >> 14
+1000000.0000001 >> 15
+1000000.0000001 >> 16
+1000000.0000001 >> 17
+1000000.0000001 >> 18
+1000000.0000001 >> 19
+1000000.00000001 >> 0
+1000000.00000001 >> 1
+1000000.00000001 >> 2
+1000000.00000001 >> 3
+1000000.00000001 >> 4
+1000000.00000001 >> 5
+1000000.00000001 >> 6
+1000000.00000001 >> 7
+1000000.00000001 >> 8
+1000000.00000001 >> 9
+1000000.00000001 >> 10
+1000000.00000001 >> 11
+1000000.00000001 >> 12
+1000000.00000001 >> 13
+1000000.00000001 >> 14
+1000000.00000001 >> 15
+1000000.00000001 >> 16
+1000000.00000001 >> 17
+1000000.00000001 >> 18
+1000000.00000001 >> 19
+1000000.000000001 >> 0
+1000000.000000001 >> 1
+1000000.000000001 >> 2
+1000000.000000001 >> 3
+1000000.000000001 >> 4
+1000000.000000001 >> 5
+1000000.000000001 >> 6
+1000000.000000001 >> 7
+1000000.000000001 >> 8
+1000000.000000001 >> 9
+1000000.000000001 >> 10
+1000000.000000001 >> 11
+1000000.000000001 >> 12
+1000000.000000001 >> 13
+1000000.000000001 >> 14
+1000000.000000001 >> 15
+1000000.000000001 >> 16
+1000000.000000001 >> 17
+1000000.000000001 >> 18
+1000000.000000001 >> 19
+1000000.0000000001 >> 0
+1000000.0000000001 >> 1
+1000000.0000000001 >> 2
+1000000.0000000001 >> 3
+1000000.0000000001 >> 4
+1000000.0000000001 >> 5
+1000000.0000000001 >> 6
+1000000.0000000001 >> 7
+1000000.0000000001 >> 8
+1000000.0000000001 >> 9
+1000000.0000000001 >> 10
+1000000.0000000001 >> 11
+1000000.0000000001 >> 12
+1000000.0000000001 >> 13
+1000000.0000000001 >> 14
+1000000.0000000001 >> 15
+1000000.0000000001 >> 16
+1000000.0000000001 >> 17
+1000000.0000000001 >> 18
+1000000.0000000001 >> 19
+10000000 >> 0
+10000000 >> 1
+10000000 >> 2
+10000000 >> 3
+10000000 >> 4
+10000000 >> 5
+10000000 >> 6
+10000000 >> 7
+10000000 >> 8
+10000000 >> 9
+10000000 >> 10
+10000000 >> 11
+10000000 >> 12
+10000000 >> 13
+10000000 >> 14
+10000000 >> 15
+10000000 >> 16
+10000000 >> 17
+10000000 >> 18
+10000000 >> 19
+10000000.1 >> 0
+10000000.1 >> 1
+10000000.1 >> 2
+10000000.1 >> 3
+10000000.1 >> 4
+10000000.1 >> 5
+10000000.1 >> 6
+10000000.1 >> 7
+10000000.1 >> 8
+10000000.1 >> 9
+10000000.1 >> 10
+10000000.1 >> 11
+10000000.1 >> 12
+10000000.1 >> 13
+10000000.1 >> 14
+10000000.1 >> 15
+10000000.1 >> 16
+10000000.1 >> 17
+10000000.1 >> 18
+10000000.1 >> 19
+10000000.01 >> 0
+10000000.01 >> 1
+10000000.01 >> 2
+10000000.01 >> 3
+10000000.01 >> 4
+10000000.01 >> 5
+10000000.01 >> 6
+10000000.01 >> 7
+10000000.01 >> 8
+10000000.01 >> 9
+10000000.01 >> 10
+10000000.01 >> 11
+10000000.01 >> 12
+10000000.01 >> 13
+10000000.01 >> 14
+10000000.01 >> 15
+10000000.01 >> 16
+10000000.01 >> 17
+10000000.01 >> 18
+10000000.01 >> 19
+10000000.001 >> 0
+10000000.001 >> 1
+10000000.001 >> 2
+10000000.001 >> 3
+10000000.001 >> 4
+10000000.001 >> 5
+10000000.001 >> 6
+10000000.001 >> 7
+10000000.001 >> 8
+10000000.001 >> 9
+10000000.001 >> 10
+10000000.001 >> 11
+10000000.001 >> 12
+10000000.001 >> 13
+10000000.001 >> 14
+10000000.001 >> 15
+10000000.001 >> 16
+10000000.001 >> 17
+10000000.001 >> 18
+10000000.001 >> 19
+10000000.0001 >> 0
+10000000.0001 >> 1
+10000000.0001 >> 2
+10000000.0001 >> 3
+10000000.0001 >> 4
+10000000.0001 >> 5
+10000000.0001 >> 6
+10000000.0001 >> 7
+10000000.0001 >> 8
+10000000.0001 >> 9
+10000000.0001 >> 10
+10000000.0001 >> 11
+10000000.0001 >> 12
+10000000.0001 >> 13
+10000000.0001 >> 14
+10000000.0001 >> 15
+10000000.0001 >> 16
+10000000.0001 >> 17
+10000000.0001 >> 18
+10000000.0001 >> 19
+10000000.00001 >> 0
+10000000.00001 >> 1
+10000000.00001 >> 2
+10000000.00001 >> 3
+10000000.00001 >> 4
+10000000.00001 >> 5
+10000000.00001 >> 6
+10000000.00001 >> 7
+10000000.00001 >> 8
+10000000.00001 >> 9
+10000000.00001 >> 10
+10000000.00001 >> 11
+10000000.00001 >> 12
+10000000.00001 >> 13
+10000000.00001 >> 14
+10000000.00001 >> 15
+10000000.00001 >> 16
+10000000.00001 >> 17
+10000000.00001 >> 18
+10000000.00001 >> 19
+10000000.000001 >> 0
+10000000.000001 >> 1
+10000000.000001 >> 2
+10000000.000001 >> 3
+10000000.000001 >> 4
+10000000.000001 >> 5
+10000000.000001 >> 6
+10000000.000001 >> 7
+10000000.000001 >> 8
+10000000.000001 >> 9
+10000000.000001 >> 10
+10000000.000001 >> 11
+10000000.000001 >> 12
+10000000.000001 >> 13
+10000000.000001 >> 14
+10000000.000001 >> 15
+10000000.000001 >> 16
+10000000.000001 >> 17
+10000000.000001 >> 18
+10000000.000001 >> 19
+10000000.0000001 >> 0
+10000000.0000001 >> 1
+10000000.0000001 >> 2
+10000000.0000001 >> 3
+10000000.0000001 >> 4
+10000000.0000001 >> 5
+10000000.0000001 >> 6
+10000000.0000001 >> 7
+10000000.0000001 >> 8
+10000000.0000001 >> 9
+10000000.0000001 >> 10
+10000000.0000001 >> 11
+10000000.0000001 >> 12
+10000000.0000001 >> 13
+10000000.0000001 >> 14
+10000000.0000001 >> 15
+10000000.0000001 >> 16
+10000000.0000001 >> 17
+10000000.0000001 >> 18
+10000000.0000001 >> 19
+10000000.00000001 >> 0
+10000000.00000001 >> 1
+10000000.00000001 >> 2
+10000000.00000001 >> 3
+10000000.00000001 >> 4
+10000000.00000001 >> 5
+10000000.00000001 >> 6
+10000000.00000001 >> 7
+10000000.00000001 >> 8
+10000000.00000001 >> 9
+10000000.00000001 >> 10
+10000000.00000001 >> 11
+10000000.00000001 >> 12
+10000000.00000001 >> 13
+10000000.00000001 >> 14
+10000000.00000001 >> 15
+10000000.00000001 >> 16
+10000000.00000001 >> 17
+10000000.00000001 >> 18
+10000000.00000001 >> 19
+10000000.000000001 >> 0
+10000000.000000001 >> 1
+10000000.000000001 >> 2
+10000000.000000001 >> 3
+10000000.000000001 >> 4
+10000000.000000001 >> 5
+10000000.000000001 >> 6
+10000000.000000001 >> 7
+10000000.000000001 >> 8
+10000000.000000001 >> 9
+10000000.000000001 >> 10
+10000000.000000001 >> 11
+10000000.000000001 >> 12
+10000000.000000001 >> 13
+10000000.000000001 >> 14
+10000000.000000001 >> 15
+10000000.000000001 >> 16
+10000000.000000001 >> 17
+10000000.000000001 >> 18
+10000000.000000001 >> 19
+10000000.0000000001 >> 0
+10000000.0000000001 >> 1
+10000000.0000000001 >> 2
+10000000.0000000001 >> 3
+10000000.0000000001 >> 4
+10000000.0000000001 >> 5
+10000000.0000000001 >> 6
+10000000.0000000001 >> 7
+10000000.0000000001 >> 8
+10000000.0000000001 >> 9
+10000000.0000000001 >> 10
+10000000.0000000001 >> 11
+10000000.0000000001 >> 12
+10000000.0000000001 >> 13
+10000000.0000000001 >> 14
+10000000.0000000001 >> 15
+10000000.0000000001 >> 16
+10000000.0000000001 >> 17
+10000000.0000000001 >> 18
+10000000.0000000001 >> 19
+100000000 >> 0
+100000000 >> 1
+100000000 >> 2
+100000000 >> 3
+100000000 >> 4
+100000000 >> 5
+100000000 >> 6
+100000000 >> 7
+100000000 >> 8
+100000000 >> 9
+100000000 >> 10
+100000000 >> 11
+100000000 >> 12
+100000000 >> 13
+100000000 >> 14
+100000000 >> 15
+100000000 >> 16
+100000000 >> 17
+100000000 >> 18
+100000000 >> 19
+100000000.1 >> 0
+100000000.1 >> 1
+100000000.1 >> 2
+100000000.1 >> 3
+100000000.1 >> 4
+100000000.1 >> 5
+100000000.1 >> 6
+100000000.1 >> 7
+100000000.1 >> 8
+100000000.1 >> 9
+100000000.1 >> 10
+100000000.1 >> 11
+100000000.1 >> 12
+100000000.1 >> 13
+100000000.1 >> 14
+100000000.1 >> 15
+100000000.1 >> 16
+100000000.1 >> 17
+100000000.1 >> 18
+100000000.1 >> 19
+100000000.01 >> 0
+100000000.01 >> 1
+100000000.01 >> 2
+100000000.01 >> 3
+100000000.01 >> 4
+100000000.01 >> 5
+100000000.01 >> 6
+100000000.01 >> 7
+100000000.01 >> 8
+100000000.01 >> 9
+100000000.01 >> 10
+100000000.01 >> 11
+100000000.01 >> 12
+100000000.01 >> 13
+100000000.01 >> 14
+100000000.01 >> 15
+100000000.01 >> 16
+100000000.01 >> 17
+100000000.01 >> 18
+100000000.01 >> 19
+100000000.001 >> 0
+100000000.001 >> 1
+100000000.001 >> 2
+100000000.001 >> 3
+100000000.001 >> 4
+100000000.001 >> 5
+100000000.001 >> 6
+100000000.001 >> 7
+100000000.001 >> 8
+100000000.001 >> 9
+100000000.001 >> 10
+100000000.001 >> 11
+100000000.001 >> 12
+100000000.001 >> 13
+100000000.001 >> 14
+100000000.001 >> 15
+100000000.001 >> 16
+100000000.001 >> 17
+100000000.001 >> 18
+100000000.001 >> 19
+100000000.0001 >> 0
+100000000.0001 >> 1
+100000000.0001 >> 2
+100000000.0001 >> 3
+100000000.0001 >> 4
+100000000.0001 >> 5
+100000000.0001 >> 6
+100000000.0001 >> 7
+100000000.0001 >> 8
+100000000.0001 >> 9
+100000000.0001 >> 10
+100000000.0001 >> 11
+100000000.0001 >> 12
+100000000.0001 >> 13
+100000000.0001 >> 14
+100000000.0001 >> 15
+100000000.0001 >> 16
+100000000.0001 >> 17
+100000000.0001 >> 18
+100000000.0001 >> 19
+100000000.00001 >> 0
+100000000.00001 >> 1
+100000000.00001 >> 2
+100000000.00001 >> 3
+100000000.00001 >> 4
+100000000.00001 >> 5
+100000000.00001 >> 6
+100000000.00001 >> 7
+100000000.00001 >> 8
+100000000.00001 >> 9
+100000000.00001 >> 10
+100000000.00001 >> 11
+100000000.00001 >> 12
+100000000.00001 >> 13
+100000000.00001 >> 14
+100000000.00001 >> 15
+100000000.00001 >> 16
+100000000.00001 >> 17
+100000000.00001 >> 18
+100000000.00001 >> 19
+100000000.000001 >> 0
+100000000.000001 >> 1
+100000000.000001 >> 2
+100000000.000001 >> 3
+100000000.000001 >> 4
+100000000.000001 >> 5
+100000000.000001 >> 6
+100000000.000001 >> 7
+100000000.000001 >> 8
+100000000.000001 >> 9
+100000000.000001 >> 10
+100000000.000001 >> 11
+100000000.000001 >> 12
+100000000.000001 >> 13
+100000000.000001 >> 14
+100000000.000001 >> 15
+100000000.000001 >> 16
+100000000.000001 >> 17
+100000000.000001 >> 18
+100000000.000001 >> 19
+100000000.0000001 >> 0
+100000000.0000001 >> 1
+100000000.0000001 >> 2
+100000000.0000001 >> 3
+100000000.0000001 >> 4
+100000000.0000001 >> 5
+100000000.0000001 >> 6
+100000000.0000001 >> 7
+100000000.0000001 >> 8
+100000000.0000001 >> 9
+100000000.0000001 >> 10
+100000000.0000001 >> 11
+100000000.0000001 >> 12
+100000000.0000001 >> 13
+100000000.0000001 >> 14
+100000000.0000001 >> 15
+100000000.0000001 >> 16
+100000000.0000001 >> 17
+100000000.0000001 >> 18
+100000000.0000001 >> 19
+100000000.00000001 >> 0
+100000000.00000001 >> 1
+100000000.00000001 >> 2
+100000000.00000001 >> 3
+100000000.00000001 >> 4
+100000000.00000001 >> 5
+100000000.00000001 >> 6
+100000000.00000001 >> 7
+100000000.00000001 >> 8
+100000000.00000001 >> 9
+100000000.00000001 >> 10
+100000000.00000001 >> 11
+100000000.00000001 >> 12
+100000000.00000001 >> 13
+100000000.00000001 >> 14
+100000000.00000001 >> 15
+100000000.00000001 >> 16
+100000000.00000001 >> 17
+100000000.00000001 >> 18
+100000000.00000001 >> 19
+100000000.000000001 >> 0
+100000000.000000001 >> 1
+100000000.000000001 >> 2
+100000000.000000001 >> 3
+100000000.000000001 >> 4
+100000000.000000001 >> 5
+100000000.000000001 >> 6
+100000000.000000001 >> 7
+100000000.000000001 >> 8
+100000000.000000001 >> 9
+100000000.000000001 >> 10
+100000000.000000001 >> 11
+100000000.000000001 >> 12
+100000000.000000001 >> 13
+100000000.000000001 >> 14
+100000000.000000001 >> 15
+100000000.000000001 >> 16
+100000000.000000001 >> 17
+100000000.000000001 >> 18
+100000000.000000001 >> 19
+100000000.0000000001 >> 0
+100000000.0000000001 >> 1
+100000000.0000000001 >> 2
+100000000.0000000001 >> 3
+100000000.0000000001 >> 4
+100000000.0000000001 >> 5
+100000000.0000000001 >> 6
+100000000.0000000001 >> 7
+100000000.0000000001 >> 8
+100000000.0000000001 >> 9
+100000000.0000000001 >> 10
+100000000.0000000001 >> 11
+100000000.0000000001 >> 12
+100000000.0000000001 >> 13
+100000000.0000000001 >> 14
+100000000.0000000001 >> 15
+100000000.0000000001 >> 16
+100000000.0000000001 >> 17
+100000000.0000000001 >> 18
+100000000.0000000001 >> 19
+1000000000 >> 0
+1000000000 >> 1
+1000000000 >> 2
+1000000000 >> 3
+1000000000 >> 4
+1000000000 >> 5
+1000000000 >> 6
+1000000000 >> 7
+1000000000 >> 8
+1000000000 >> 9
+1000000000 >> 10
+1000000000 >> 11
+1000000000 >> 12
+1000000000 >> 13
+1000000000 >> 14
+1000000000 >> 15
+1000000000 >> 16
+1000000000 >> 17
+1000000000 >> 18
+1000000000 >> 19
+1000000000.1 >> 0
+1000000000.1 >> 1
+1000000000.1 >> 2
+1000000000.1 >> 3
+1000000000.1 >> 4
+1000000000.1 >> 5
+1000000000.1 >> 6
+1000000000.1 >> 7
+1000000000.1 >> 8
+1000000000.1 >> 9
+1000000000.1 >> 10
+1000000000.1 >> 11
+1000000000.1 >> 12
+1000000000.1 >> 13
+1000000000.1 >> 14
+1000000000.1 >> 15
+1000000000.1 >> 16
+1000000000.1 >> 17
+1000000000.1 >> 18
+1000000000.1 >> 19
+1000000000.01 >> 0
+1000000000.01 >> 1
+1000000000.01 >> 2
+1000000000.01 >> 3
+1000000000.01 >> 4
+1000000000.01 >> 5
+1000000000.01 >> 6
+1000000000.01 >> 7
+1000000000.01 >> 8
+1000000000.01 >> 9
+1000000000.01 >> 10
+1000000000.01 >> 11
+1000000000.01 >> 12
+1000000000.01 >> 13
+1000000000.01 >> 14
+1000000000.01 >> 15
+1000000000.01 >> 16
+1000000000.01 >> 17
+1000000000.01 >> 18
+1000000000.01 >> 19
+1000000000.001 >> 0
+1000000000.001 >> 1
+1000000000.001 >> 2
+1000000000.001 >> 3
+1000000000.001 >> 4
+1000000000.001 >> 5
+1000000000.001 >> 6
+1000000000.001 >> 7
+1000000000.001 >> 8
+1000000000.001 >> 9
+1000000000.001 >> 10
+1000000000.001 >> 11
+1000000000.001 >> 12
+1000000000.001 >> 13
+1000000000.001 >> 14
+1000000000.001 >> 15
+1000000000.001 >> 16
+1000000000.001 >> 17
+1000000000.001 >> 18
+1000000000.001 >> 19
+1000000000.0001 >> 0
+1000000000.0001 >> 1
+1000000000.0001 >> 2
+1000000000.0001 >> 3
+1000000000.0001 >> 4
+1000000000.0001 >> 5
+1000000000.0001 >> 6
+1000000000.0001 >> 7
+1000000000.0001 >> 8
+1000000000.0001 >> 9
+1000000000.0001 >> 10
+1000000000.0001 >> 11
+1000000000.0001 >> 12
+1000000000.0001 >> 13
+1000000000.0001 >> 14
+1000000000.0001 >> 15
+1000000000.0001 >> 16
+1000000000.0001 >> 17
+1000000000.0001 >> 18
+1000000000.0001 >> 19
+1000000000.00001 >> 0
+1000000000.00001 >> 1
+1000000000.00001 >> 2
+1000000000.00001 >> 3
+1000000000.00001 >> 4
+1000000000.00001 >> 5
+1000000000.00001 >> 6
+1000000000.00001 >> 7
+1000000000.00001 >> 8
+1000000000.00001 >> 9
+1000000000.00001 >> 10
+1000000000.00001 >> 11
+1000000000.00001 >> 12
+1000000000.00001 >> 13
+1000000000.00001 >> 14
+1000000000.00001 >> 15
+1000000000.00001 >> 16
+1000000000.00001 >> 17
+1000000000.00001 >> 18
+1000000000.00001 >> 19
+1000000000.000001 >> 0
+1000000000.000001 >> 1
+1000000000.000001 >> 2
+1000000000.000001 >> 3
+1000000000.000001 >> 4
+1000000000.000001 >> 5
+1000000000.000001 >> 6
+1000000000.000001 >> 7
+1000000000.000001 >> 8
+1000000000.000001 >> 9
+1000000000.000001 >> 10
+1000000000.000001 >> 11
+1000000000.000001 >> 12
+1000000000.000001 >> 13
+1000000000.000001 >> 14
+1000000000.000001 >> 15
+1000000000.000001 >> 16
+1000000000.000001 >> 17
+1000000000.000001 >> 18
+1000000000.000001 >> 19
+1000000000.0000001 >> 0
+1000000000.0000001 >> 1
+1000000000.0000001 >> 2
+1000000000.0000001 >> 3
+1000000000.0000001 >> 4
+1000000000.0000001 >> 5
+1000000000.0000001 >> 6
+1000000000.0000001 >> 7
+1000000000.0000001 >> 8
+1000000000.0000001 >> 9
+1000000000.0000001 >> 10
+1000000000.0000001 >> 11
+1000000000.0000001 >> 12
+1000000000.0000001 >> 13
+1000000000.0000001 >> 14
+1000000000.0000001 >> 15
+1000000000.0000001 >> 16
+1000000000.0000001 >> 17
+1000000000.0000001 >> 18
+1000000000.0000001 >> 19
+1000000000.00000001 >> 0
+1000000000.00000001 >> 1
+1000000000.00000001 >> 2
+1000000000.00000001 >> 3
+1000000000.00000001 >> 4
+1000000000.00000001 >> 5
+1000000000.00000001 >> 6
+1000000000.00000001 >> 7
+1000000000.00000001 >> 8
+1000000000.00000001 >> 9
+1000000000.00000001 >> 10
+1000000000.00000001 >> 11
+1000000000.00000001 >> 12
+1000000000.00000001 >> 13
+1000000000.00000001 >> 14
+1000000000.00000001 >> 15
+1000000000.00000001 >> 16
+1000000000.00000001 >> 17
+1000000000.00000001 >> 18
+1000000000.00000001 >> 19
+1000000000.000000001 >> 0
+1000000000.000000001 >> 1
+1000000000.000000001 >> 2
+1000000000.000000001 >> 3
+1000000000.000000001 >> 4
+1000000000.000000001 >> 5
+1000000000.000000001 >> 6
+1000000000.000000001 >> 7
+1000000000.000000001 >> 8
+1000000000.000000001 >> 9
+1000000000.000000001 >> 10
+1000000000.000000001 >> 11
+1000000000.000000001 >> 12
+1000000000.000000001 >> 13
+1000000000.000000001 >> 14
+1000000000.000000001 >> 15
+1000000000.000000001 >> 16
+1000000000.000000001 >> 17
+1000000000.000000001 >> 18
+1000000000.000000001 >> 19
+1000000000.0000000001 >> 0
+1000000000.0000000001 >> 1
+1000000000.0000000001 >> 2
+1000000000.0000000001 >> 3
+1000000000.0000000001 >> 4
+1000000000.0000000001 >> 5
+1000000000.0000000001 >> 6
+1000000000.0000000001 >> 7
+1000000000.0000000001 >> 8
+1000000000.0000000001 >> 9
+1000000000.0000000001 >> 10
+1000000000.0000000001 >> 11
+1000000000.0000000001 >> 12
+1000000000.0000000001 >> 13
+1000000000.0000000001 >> 14
+1000000000.0000000001 >> 15
+1000000000.0000000001 >> 16
+1000000000.0000000001 >> 17
+1000000000.0000000001 >> 18
+1000000000.0000000001 >> 19
+10000000000 >> 0
+10000000000 >> 1
+10000000000 >> 2
+10000000000 >> 3
+10000000000 >> 4
+10000000000 >> 5
+10000000000 >> 6
+10000000000 >> 7
+10000000000 >> 8
+10000000000 >> 9
+10000000000 >> 10
+10000000000 >> 11
+10000000000 >> 12
+10000000000 >> 13
+10000000000 >> 14
+10000000000 >> 15
+10000000000 >> 16
+10000000000 >> 17
+10000000000 >> 18
+10000000000 >> 19
+10000000000.1 >> 0
+10000000000.1 >> 1
+10000000000.1 >> 2
+10000000000.1 >> 3
+10000000000.1 >> 4
+10000000000.1 >> 5
+10000000000.1 >> 6
+10000000000.1 >> 7
+10000000000.1 >> 8
+10000000000.1 >> 9
+10000000000.1 >> 10
+10000000000.1 >> 11
+10000000000.1 >> 12
+10000000000.1 >> 13
+10000000000.1 >> 14
+10000000000.1 >> 15
+10000000000.1 >> 16
+10000000000.1 >> 17
+10000000000.1 >> 18
+10000000000.1 >> 19
+10000000000.01 >> 0
+10000000000.01 >> 1
+10000000000.01 >> 2
+10000000000.01 >> 3
+10000000000.01 >> 4
+10000000000.01 >> 5
+10000000000.01 >> 6
+10000000000.01 >> 7
+10000000000.01 >> 8
+10000000000.01 >> 9
+10000000000.01 >> 10
+10000000000.01 >> 11
+10000000000.01 >> 12
+10000000000.01 >> 13
+10000000000.01 >> 14
+10000000000.01 >> 15
+10000000000.01 >> 16
+10000000000.01 >> 17
+10000000000.01 >> 18
+10000000000.01 >> 19
+10000000000.001 >> 0
+10000000000.001 >> 1
+10000000000.001 >> 2
+10000000000.001 >> 3
+10000000000.001 >> 4
+10000000000.001 >> 5
+10000000000.001 >> 6
+10000000000.001 >> 7
+10000000000.001 >> 8
+10000000000.001 >> 9
+10000000000.001 >> 10
+10000000000.001 >> 11
+10000000000.001 >> 12
+10000000000.001 >> 13
+10000000000.001 >> 14
+10000000000.001 >> 15
+10000000000.001 >> 16
+10000000000.001 >> 17
+10000000000.001 >> 18
+10000000000.001 >> 19
+10000000000.0001 >> 0
+10000000000.0001 >> 1
+10000000000.0001 >> 2
+10000000000.0001 >> 3
+10000000000.0001 >> 4
+10000000000.0001 >> 5
+10000000000.0001 >> 6
+10000000000.0001 >> 7
+10000000000.0001 >> 8
+10000000000.0001 >> 9
+10000000000.0001 >> 10
+10000000000.0001 >> 11
+10000000000.0001 >> 12
+10000000000.0001 >> 13
+10000000000.0001 >> 14
+10000000000.0001 >> 15
+10000000000.0001 >> 16
+10000000000.0001 >> 17
+10000000000.0001 >> 18
+10000000000.0001 >> 19
+10000000000.00001 >> 0
+10000000000.00001 >> 1
+10000000000.00001 >> 2
+10000000000.00001 >> 3
+10000000000.00001 >> 4
+10000000000.00001 >> 5
+10000000000.00001 >> 6
+10000000000.00001 >> 7
+10000000000.00001 >> 8
+10000000000.00001 >> 9
+10000000000.00001 >> 10
+10000000000.00001 >> 11
+10000000000.00001 >> 12
+10000000000.00001 >> 13
+10000000000.00001 >> 14
+10000000000.00001 >> 15
+10000000000.00001 >> 16
+10000000000.00001 >> 17
+10000000000.00001 >> 18
+10000000000.00001 >> 19
+10000000000.000001 >> 0
+10000000000.000001 >> 1
+10000000000.000001 >> 2
+10000000000.000001 >> 3
+10000000000.000001 >> 4
+10000000000.000001 >> 5
+10000000000.000001 >> 6
+10000000000.000001 >> 7
+10000000000.000001 >> 8
+10000000000.000001 >> 9
+10000000000.000001 >> 10
+10000000000.000001 >> 11
+10000000000.000001 >> 12
+10000000000.000001 >> 13
+10000000000.000001 >> 14
+10000000000.000001 >> 15
+10000000000.000001 >> 16
+10000000000.000001 >> 17
+10000000000.000001 >> 18
+10000000000.000001 >> 19
+10000000000.0000001 >> 0
+10000000000.0000001 >> 1
+10000000000.0000001 >> 2
+10000000000.0000001 >> 3
+10000000000.0000001 >> 4
+10000000000.0000001 >> 5
+10000000000.0000001 >> 6
+10000000000.0000001 >> 7
+10000000000.0000001 >> 8
+10000000000.0000001 >> 9
+10000000000.0000001 >> 10
+10000000000.0000001 >> 11
+10000000000.0000001 >> 12
+10000000000.0000001 >> 13
+10000000000.0000001 >> 14
+10000000000.0000001 >> 15
+10000000000.0000001 >> 16
+10000000000.0000001 >> 17
+10000000000.0000001 >> 18
+10000000000.0000001 >> 19
+10000000000.00000001 >> 0
+10000000000.00000001 >> 1
+10000000000.00000001 >> 2
+10000000000.00000001 >> 3
+10000000000.00000001 >> 4
+10000000000.00000001 >> 5
+10000000000.00000001 >> 6
+10000000000.00000001 >> 7
+10000000000.00000001 >> 8
+10000000000.00000001 >> 9
+10000000000.00000001 >> 10
+10000000000.00000001 >> 11
+10000000000.00000001 >> 12
+10000000000.00000001 >> 13
+10000000000.00000001 >> 14
+10000000000.00000001 >> 15
+10000000000.00000001 >> 16
+10000000000.00000001 >> 17
+10000000000.00000001 >> 18
+10000000000.00000001 >> 19
+10000000000.000000001 >> 0
+10000000000.000000001 >> 1
+10000000000.000000001 >> 2
+10000000000.000000001 >> 3
+10000000000.000000001 >> 4
+10000000000.000000001 >> 5
+10000000000.000000001 >> 6
+10000000000.000000001 >> 7
+10000000000.000000001 >> 8
+10000000000.000000001 >> 9
+10000000000.000000001 >> 10
+10000000000.000000001 >> 11
+10000000000.000000001 >> 12
+10000000000.000000001 >> 13
+10000000000.000000001 >> 14
+10000000000.000000001 >> 15
+10000000000.000000001 >> 16
+10000000000.000000001 >> 17
+10000000000.000000001 >> 18
+10000000000.000000001 >> 19
+10000000000.0000000001 >> 0
+10000000000.0000000001 >> 1
+10000000000.0000000001 >> 2
+10000000000.0000000001 >> 3
+10000000000.0000000001 >> 4
+10000000000.0000000001 >> 5
+10000000000.0000000001 >> 6
+10000000000.0000000001 >> 7
+10000000000.0000000001 >> 8
+10000000000.0000000001 >> 9
+10000000000.0000000001 >> 10
+10000000000.0000000001 >> 11
+10000000000.0000000001 >> 12
+10000000000.0000000001 >> 13
+10000000000.0000000001 >> 14
+10000000000.0000000001 >> 15
+10000000000.0000000001 >> 16
+10000000000.0000000001 >> 17
+10000000000.0000000001 >> 18
+10000000000.0000000001 >> 19
diff --git a/tests/bc/shift_results.txt b/tests/bc/shift_results.txt
new file mode 100644
index 000000000000..a567e713c1aa
--- /dev/null
+++ b/tests/bc/shift_results.txt
@@ -0,0 +1,5325 @@
+0
+1
+2
+.0023896
+1.298346
+2.00000000
+2.3896
+12983.46
+200000.000
+891368923489.76
+1892634051829351283289298000000000000000000000000
+0
+1
+2
+.0023896
+1.298346
+2.00000000
+.0000023896
+.0001298346
+.0000200000000
+.0089136892348976
+1.892634051829351283289298
+-1
+-2
+-.0023896
+-1.298346
+-2.00000000
+-2.3896
+-12983.46
+-200000.000
+-891368923489.76
+-1892634051829351283289298000000000000000000000000
+-1
+-2
+-.0023896
+-1.298346
+-2.00000000
+-.0000023896
+-.0001298346
+-.0000200000000
+-.0089136892348976
+.0089136892348976
+-1.892634051829351283289298
+1.892634051829351283289298
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+.1
+1
+10
+100
+1000
+10000
+100000
+1000000
+10000000
+100000000
+1000000000
+10000000000
+100000000000
+1000000000000
+10000000000000
+100000000000000
+1000000000000000
+10000000000000000
+100000000000000000
+1000000000000000000
+.01
+.1
+1
+10
+100
+1000
+10000
+100000
+1000000
+10000000
+100000000
+1000000000
+10000000000
+100000000000
+1000000000000
+10000000000000
+100000000000000
+1000000000000000
+10000000000000000
+100000000000000000
+.001
+.01
+.1
+1
+10
+100
+1000
+10000
+100000
+1000000
+10000000
+100000000
+1000000000
+10000000000
+100000000000
+1000000000000
+10000000000000
+100000000000000
+1000000000000000
+10000000000000000
+.0001
+.001
+.01
+.1
+1
+10
+100
+1000
+10000
+100000
+1000000
+10000000
+100000000
+1000000000
+10000000000
+100000000000
+1000000000000
+10000000000000
+100000000000000
+1000000000000000
+.00001
+.0001
+.001
+.01
+.1
+1
+10
+100
+1000
+10000
+100000
+1000000
+10000000
+100000000
+1000000000
+10000000000
+100000000000
+1000000000000
+10000000000000
+100000000000000
+.000001
+.00001
+.0001
+.001
+.01
+.1
+1
+10
+100
+1000
+10000
+100000
+1000000
+10000000
+100000000
+1000000000
+10000000000
+100000000000
+1000000000000
+10000000000000
+.0000001
+.000001
+.00001
+.0001
+.001
+.01
+.1
+1
+10
+100
+1000
+10000
+100000
+1000000
+10000000
+100000000
+1000000000
+10000000000
+100000000000
+1000000000000
+.00000001
+.0000001
+.000001
+.00001
+.0001
+.001
+.01
+.1
+1
+10
+100
+1000
+10000
+100000
+1000000
+10000000
+100000000
+1000000000
+10000000000
+100000000000
+.000000001
+.00000001
+.0000001
+.000001
+.00001
+.0001
+.001
+.01
+.1
+1
+10
+100
+1000
+10000
+100000
+1000000
+10000000
+100000000
+1000000000
+10000000000
+.0000000001
+.000000001
+.00000001
+.0000001
+.000001
+.00001
+.0001
+.001
+.01
+.1
+1
+10
+100
+1000
+10000
+100000
+1000000
+10000000
+100000000
+1000000000
+1
+10
+100
+1000
+10000
+100000
+1000000
+10000000
+100000000
+1000000000
+10000000000
+100000000000
+1000000000000
+10000000000000
+100000000000000
+1000000000000000
+10000000000000000
+100000000000000000
+1000000000000000000
+10000000000000000000
+1.1
+11
+110
+1100
+11000
+110000
+1100000
+11000000
+110000000
+1100000000
+11000000000
+110000000000
+1100000000000
+11000000000000
+110000000000000
+1100000000000000
+11000000000000000
+110000000000000000
+1100000000000000000
+11000000000000000000
+1.01
+10.1
+101
+1010
+10100
+101000
+1010000
+10100000
+101000000
+1010000000
+10100000000
+101000000000
+1010000000000
+10100000000000
+101000000000000
+1010000000000000
+10100000000000000
+101000000000000000
+1010000000000000000
+10100000000000000000
+1.001
+10.01
+100.1
+1001
+10010
+100100
+1001000
+10010000
+100100000
+1001000000
+10010000000
+100100000000
+1001000000000
+10010000000000
+100100000000000
+1001000000000000
+10010000000000000
+100100000000000000
+1001000000000000000
+10010000000000000000
+1.0001
+10.001
+100.01
+1000.1
+10001
+100010
+1000100
+10001000
+100010000
+1000100000
+10001000000
+100010000000
+1000100000000
+10001000000000
+100010000000000
+1000100000000000
+10001000000000000
+100010000000000000
+1000100000000000000
+10001000000000000000
+1.00001
+10.0001
+100.001
+1000.01
+10000.1
+100001
+1000010
+10000100
+100001000
+1000010000
+10000100000
+100001000000
+1000010000000
+10000100000000
+100001000000000
+1000010000000000
+10000100000000000
+100001000000000000
+1000010000000000000
+10000100000000000000
+1.000001
+10.00001
+100.0001
+1000.001
+10000.01
+100000.1
+1000001
+10000010
+100000100
+1000001000
+10000010000
+100000100000
+1000001000000
+10000010000000
+100000100000000
+1000001000000000
+10000010000000000
+100000100000000000
+1000001000000000000
+10000010000000000000
+1.0000001
+10.000001
+100.00001
+1000.0001
+10000.001
+100000.01
+1000000.1
+10000001
+100000010
+1000000100
+10000001000
+100000010000
+1000000100000
+10000001000000
+100000010000000
+1000000100000000
+10000001000000000
+100000010000000000
+1000000100000000000
+10000001000000000000
+1.00000001
+10.0000001
+100.000001
+1000.00001
+10000.0001
+100000.001
+1000000.01
+10000000.1
+100000001
+1000000010
+10000000100
+100000001000
+1000000010000
+10000000100000
+100000001000000
+1000000010000000
+10000000100000000
+100000001000000000
+1000000010000000000
+10000000100000000000
+1.000000001
+10.00000001
+100.0000001
+1000.000001
+10000.00001
+100000.0001
+1000000.001
+10000000.01
+100000000.1
+1000000001
+10000000010
+100000000100
+1000000001000
+10000000010000
+100000000100000
+1000000001000000
+10000000010000000
+100000000100000000
+1000000001000000000
+10000000010000000000
+1.0000000001
+10.000000001
+100.00000001
+1000.0000001
+10000.000001
+100000.00001
+1000000.0001
+10000000.001
+100000000.01
+1000000000.1
+10000000001
+100000000010
+1000000000100
+10000000001000
+100000000010000
+1000000000100000
+10000000001000000
+100000000010000000
+1000000000100000000
+10000000001000000000
+10
+100
+1000
+10000
+100000
+1000000
+10000000
+100000000
+1000000000
+10000000000
+100000000000
+1000000000000
+10000000000000
+100000000000000
+1000000000000000
+10000000000000000
+100000000000000000
+1000000000000000000
+10000000000000000000
+100000000000000000000
+10.1
+101
+1010
+10100
+101000
+1010000
+10100000
+101000000
+1010000000
+10100000000
+101000000000
+1010000000000
+10100000000000
+101000000000000
+1010000000000000
+10100000000000000
+101000000000000000
+1010000000000000000
+10100000000000000000
+101000000000000000000
+10.01
+100.1
+1001
+10010
+100100
+1001000
+10010000
+100100000
+1001000000
+10010000000
+100100000000
+1001000000000
+10010000000000
+100100000000000
+1001000000000000
+10010000000000000
+100100000000000000
+1001000000000000000
+10010000000000000000
+100100000000000000000
+10.001
+100.01
+1000.1
+10001
+100010
+1000100
+10001000
+100010000
+1000100000
+10001000000
+100010000000
+1000100000000
+10001000000000
+100010000000000
+1000100000000000
+10001000000000000
+100010000000000000
+1000100000000000000
+10001000000000000000
+100010000000000000000
+10.0001
+100.001
+1000.01
+10000.1
+100001
+1000010
+10000100
+100001000
+1000010000
+10000100000
+100001000000
+1000010000000
+10000100000000
+100001000000000
+1000010000000000
+10000100000000000
+100001000000000000
+1000010000000000000
+10000100000000000000
+100001000000000000000
+10.00001
+100.0001
+1000.001
+10000.01
+100000.1
+1000001
+10000010
+100000100
+1000001000
+10000010000
+100000100000
+1000001000000
+10000010000000
+100000100000000
+1000001000000000
+10000010000000000
+100000100000000000
+1000001000000000000
+10000010000000000000
+100000100000000000000
+10.000001
+100.00001
+1000.0001
+10000.001
+100000.01
+1000000.1
+10000001
+100000010
+1000000100
+10000001000
+100000010000
+1000000100000
+10000001000000
+100000010000000
+1000000100000000
+10000001000000000
+100000010000000000
+1000000100000000000
+10000001000000000000
+100000010000000000000
+10.0000001
+100.000001
+1000.00001
+10000.0001
+100000.001
+1000000.01
+10000000.1
+100000001
+1000000010
+10000000100
+100000001000
+1000000010000
+10000000100000
+100000001000000
+1000000010000000
+10000000100000000
+100000001000000000
+1000000010000000000
+10000000100000000000
+100000001000000000000
+10.00000001
+100.0000001
+1000.000001
+10000.00001
+100000.0001
+1000000.001
+10000000.01
+100000000.1
+1000000001
+10000000010
+100000000100
+1000000001000
+10000000010000
+100000000100000
+1000000001000000
+10000000010000000
+100000000100000000
+1000000001000000000
+10000000010000000000
+100000000100000000000
+10.000000001
+100.00000001
+1000.0000001
+10000.000001
+100000.00001
+1000000.0001
+10000000.001
+100000000.01
+1000000000.1
+10000000001
+100000000010
+1000000000100
+10000000001000
+100000000010000
+1000000000100000
+10000000001000000
+100000000010000000
+1000000000100000000
+10000000001000000000
+100000000010000000000
+10.0000000001
+100.000000001
+1000.00000001
+10000.0000001
+100000.000001
+1000000.00001
+10000000.0001
+100000000.001
+1000000000.01
+10000000000.1
+100000000001
+1000000000010
+10000000000100
+100000000001000
+1000000000010000
+10000000000100000
+100000000001000000
+1000000000010000000
+10000000000100000000
+100000000001000000000
+100
+1000
+10000
+100000
+1000000
+10000000
+100000000
+1000000000
+10000000000
+100000000000
+1000000000000
+10000000000000
+100000000000000
+1000000000000000
+10000000000000000
+100000000000000000
+1000000000000000000
+10000000000000000000
+100000000000000000000
+1000000000000000000000
+100.1
+1001
+10010
+100100
+1001000
+10010000
+100100000
+1001000000
+10010000000
+100100000000
+1001000000000
+10010000000000
+100100000000000
+1001000000000000
+10010000000000000
+100100000000000000
+1001000000000000000
+10010000000000000000
+100100000000000000000
+1001000000000000000000
+100.01
+1000.1
+10001
+100010
+1000100
+10001000
+100010000
+1000100000
+10001000000
+100010000000
+1000100000000
+10001000000000
+100010000000000
+1000100000000000
+10001000000000000
+100010000000000000
+1000100000000000000
+10001000000000000000
+100010000000000000000
+1000100000000000000000
+100.001
+1000.01
+10000.1
+100001
+1000010
+10000100
+100001000
+1000010000
+10000100000
+100001000000
+1000010000000
+10000100000000
+100001000000000
+1000010000000000
+10000100000000000
+100001000000000000
+1000010000000000000
+10000100000000000000
+100001000000000000000
+1000010000000000000000
+100.0001
+1000.001
+10000.01
+100000.1
+1000001
+10000010
+100000100
+1000001000
+10000010000
+100000100000
+1000001000000
+10000010000000
+100000100000000
+1000001000000000
+10000010000000000
+100000100000000000
+1000001000000000000
+10000010000000000000
+100000100000000000000
+1000001000000000000000
+100.00001
+1000.0001
+10000.001
+100000.01
+1000000.1
+10000001
+100000010
+1000000100
+10000001000
+100000010000
+1000000100000
+10000001000000
+100000010000000
+1000000100000000
+10000001000000000
+100000010000000000
+1000000100000000000
+10000001000000000000
+100000010000000000000
+1000000100000000000000
+100.000001
+1000.00001
+10000.0001
+100000.001
+1000000.01
+10000000.1
+100000001
+1000000010
+10000000100
+100000001000
+1000000010000
+10000000100000
+100000001000000
+1000000010000000
+10000000100000000
+100000001000000000
+1000000010000000000
+10000000100000000000
+100000001000000000000
+1000000010000000000000
+100.0000001
+1000.000001
+10000.00001
+100000.0001
+1000000.001
+10000000.01
+100000000.1
+1000000001
+10000000010
+100000000100
+1000000001000
+10000000010000
+100000000100000
+1000000001000000
+10000000010000000
+100000000100000000
+1000000001000000000
+10000000010000000000
+100000000100000000000
+1000000001000000000000
+100.00000001
+1000.0000001
+10000.000001
+100000.00001
+1000000.0001
+10000000.001
+100000000.01
+1000000000.1
+10000000001
+100000000010
+1000000000100
+10000000001000
+100000000010000
+1000000000100000
+10000000001000000
+100000000010000000
+1000000000100000000
+10000000001000000000
+100000000010000000000
+1000000000100000000000
+100.000000001
+1000.00000001
+10000.0000001
+100000.000001
+1000000.00001
+10000000.0001
+100000000.001
+1000000000.01
+10000000000.1
+100000000001
+1000000000010
+10000000000100
+100000000001000
+1000000000010000
+10000000000100000
+100000000001000000
+1000000000010000000
+10000000000100000000
+100000000001000000000
+1000000000010000000000
+100.0000000001
+1000.000000001
+10000.00000001
+100000.0000001
+1000000.000001
+10000000.00001
+100000000.0001
+1000000000.001
+10000000000.01
+100000000000.1
+1000000000001
+10000000000010
+100000000000100
+1000000000001000
+10000000000010000
+100000000000100000
+1000000000001000000
+10000000000010000000
+100000000000100000000
+1000000000001000000000
+1000
+10000
+100000
+1000000
+10000000
+100000000
+1000000000
+10000000000
+100000000000
+1000000000000
+10000000000000
+100000000000000
+1000000000000000
+10000000000000000
+100000000000000000
+1000000000000000000
+10000000000000000000
+100000000000000000000
+1000000000000000000000
+10000000000000000000000
+1000.1
+10001
+100010
+1000100
+10001000
+100010000
+1000100000
+10001000000
+100010000000
+1000100000000
+10001000000000
+100010000000000
+1000100000000000
+10001000000000000
+100010000000000000
+1000100000000000000
+10001000000000000000
+100010000000000000000
+1000100000000000000000
+10001000000000000000000
+1000.01
+10000.1
+100001
+1000010
+10000100
+100001000
+1000010000
+10000100000
+100001000000
+1000010000000
+10000100000000
+100001000000000
+1000010000000000
+10000100000000000
+100001000000000000
+1000010000000000000
+10000100000000000000
+100001000000000000000
+1000010000000000000000
+10000100000000000000000
+1000.001
+10000.01
+100000.1
+1000001
+10000010
+100000100
+1000001000
+10000010000
+100000100000
+1000001000000
+10000010000000
+100000100000000
+1000001000000000
+10000010000000000
+100000100000000000
+1000001000000000000
+10000010000000000000
+100000100000000000000
+1000001000000000000000
+10000010000000000000000
+1000.0001
+10000.001
+100000.01
+1000000.1
+10000001
+100000010
+1000000100
+10000001000
+100000010000
+1000000100000
+10000001000000
+100000010000000
+1000000100000000
+10000001000000000
+100000010000000000
+1000000100000000000
+10000001000000000000
+100000010000000000000
+1000000100000000000000
+10000001000000000000000
+1000.00001
+10000.0001
+100000.001
+1000000.01
+10000000.1
+100000001
+1000000010
+10000000100
+100000001000
+1000000010000
+10000000100000
+100000001000000
+1000000010000000
+10000000100000000
+100000001000000000
+1000000010000000000
+10000000100000000000
+100000001000000000000
+1000000010000000000000
+10000000100000000000000
+1000.000001
+10000.00001
+100000.0001
+1000000.001
+10000000.01
+100000000.1
+1000000001
+10000000010
+100000000100
+1000000001000
+10000000010000
+100000000100000
+1000000001000000
+10000000010000000
+100000000100000000
+1000000001000000000
+10000000010000000000
+100000000100000000000
+1000000001000000000000
+10000000010000000000000
+1000.0000001
+10000.000001
+100000.00001
+1000000.0001
+10000000.001
+100000000.01
+1000000000.1
+10000000001
+100000000010
+1000000000100
+10000000001000
+100000000010000
+1000000000100000
+10000000001000000
+100000000010000000
+1000000000100000000
+10000000001000000000
+100000000010000000000
+1000000000100000000000
+10000000001000000000000
+1000.00000001
+10000.0000001
+100000.000001
+1000000.00001
+10000000.0001
+100000000.001
+1000000000.01
+10000000000.1
+100000000001
+1000000000010
+10000000000100
+100000000001000
+1000000000010000
+10000000000100000
+100000000001000000
+1000000000010000000
+10000000000100000000
+100000000001000000000
+1000000000010000000000
+10000000000100000000000
+1000.000000001
+10000.00000001
+100000.0000001
+1000000.000001
+10000000.00001
+100000000.0001
+1000000000.001
+10000000000.01
+100000000000.1
+1000000000001
+10000000000010
+100000000000100
+1000000000001000
+10000000000010000
+100000000000100000
+1000000000001000000
+10000000000010000000
+100000000000100000000
+1000000000001000000000
+10000000000010000000000
+1000.0000000001
+10000.000000001
+100000.00000001
+1000000.0000001
+10000000.000001
+100000000.00001
+1000000000.0001
+10000000000.001
+100000000000.01
+1000000000000.1
+10000000000001
+100000000000010
+1000000000000100
+10000000000001000
+100000000000010000
+1000000000000100000
+10000000000001000000
+100000000000010000000
+1000000000000100000000
+10000000000001000000000
+10000
+100000
+1000000
+10000000
+100000000
+1000000000
+10000000000
+100000000000
+1000000000000
+10000000000000
+100000000000000
+1000000000000000
+10000000000000000
+100000000000000000
+1000000000000000000
+10000000000000000000
+100000000000000000000
+1000000000000000000000
+10000000000000000000000
+100000000000000000000000
+10000.1
+100001
+1000010
+10000100
+100001000
+1000010000
+10000100000
+100001000000
+1000010000000
+10000100000000
+100001000000000
+1000010000000000
+10000100000000000
+100001000000000000
+1000010000000000000
+10000100000000000000
+100001000000000000000
+1000010000000000000000
+10000100000000000000000
+100001000000000000000000
+10000.01
+100000.1
+1000001
+10000010
+100000100
+1000001000
+10000010000
+100000100000
+1000001000000
+10000010000000
+100000100000000
+1000001000000000
+10000010000000000
+100000100000000000
+1000001000000000000
+10000010000000000000
+100000100000000000000
+1000001000000000000000
+10000010000000000000000
+100000100000000000000000
+10000.001
+100000.01
+1000000.1
+10000001
+100000010
+1000000100
+10000001000
+100000010000
+1000000100000
+10000001000000
+100000010000000
+1000000100000000
+10000001000000000
+100000010000000000
+1000000100000000000
+10000001000000000000
+100000010000000000000
+1000000100000000000000
+10000001000000000000000
+100000010000000000000000
+10000.0001
+100000.001
+1000000.01
+10000000.1
+100000001
+1000000010
+10000000100
+100000001000
+1000000010000
+10000000100000
+100000001000000
+1000000010000000
+10000000100000000
+100000001000000000
+1000000010000000000
+10000000100000000000
+100000001000000000000
+1000000010000000000000
+10000000100000000000000
+100000001000000000000000
+10000.00001
+100000.0001
+1000000.001
+10000000.01
+100000000.1
+1000000001
+10000000010
+100000000100
+1000000001000
+10000000010000
+100000000100000
+1000000001000000
+10000000010000000
+100000000100000000
+1000000001000000000
+10000000010000000000
+100000000100000000000
+1000000001000000000000
+10000000010000000000000
+100000000100000000000000
+10000.000001
+100000.00001
+1000000.0001
+10000000.001
+100000000.01
+1000000000.1
+10000000001
+100000000010
+1000000000100
+10000000001000
+100000000010000
+1000000000100000
+10000000001000000
+100000000010000000
+1000000000100000000
+10000000001000000000
+100000000010000000000
+1000000000100000000000
+10000000001000000000000
+100000000010000000000000
+10000.0000001
+100000.000001
+1000000.00001
+10000000.0001
+100000000.001
+1000000000.01
+10000000000.1
+100000000001
+1000000000010
+10000000000100
+100000000001000
+1000000000010000
+10000000000100000
+100000000001000000
+1000000000010000000
+10000000000100000000
+100000000001000000000
+1000000000010000000000
+10000000000100000000000
+100000000001000000000000
+10000.00000001
+100000.0000001
+1000000.000001
+10000000.00001
+100000000.0001
+1000000000.001
+10000000000.01
+100000000000.1
+1000000000001
+10000000000010
+100000000000100
+1000000000001000
+10000000000010000
+100000000000100000
+1000000000001000000
+10000000000010000000
+100000000000100000000
+1000000000001000000000
+10000000000010000000000
+100000000000100000000000
+10000.000000001
+100000.00000001
+1000000.0000001
+10000000.000001
+100000000.00001
+1000000000.0001
+10000000000.001
+100000000000.01
+1000000000000.1
+10000000000001
+100000000000010
+1000000000000100
+10000000000001000
+100000000000010000
+1000000000000100000
+10000000000001000000
+100000000000010000000
+1000000000000100000000
+10000000000001000000000
+100000000000010000000000
+10000.0000000001
+100000.000000001
+1000000.00000001
+10000000.0000001
+100000000.000001
+1000000000.00001
+10000000000.0001
+100000000000.001
+1000000000000.01
+10000000000000.1
+100000000000001
+1000000000000010
+10000000000000100
+100000000000001000
+1000000000000010000
+10000000000000100000
+100000000000001000000
+1000000000000010000000
+10000000000000100000000
+100000000000001000000000
+100000
+1000000
+10000000
+100000000
+1000000000
+10000000000
+100000000000
+1000000000000
+10000000000000
+100000000000000
+1000000000000000
+10000000000000000
+100000000000000000
+1000000000000000000
+10000000000000000000
+100000000000000000000
+1000000000000000000000
+10000000000000000000000
+100000000000000000000000
+1000000000000000000000000
+100000.1
+1000001
+10000010
+100000100
+1000001000
+10000010000
+100000100000
+1000001000000
+10000010000000
+100000100000000
+1000001000000000
+10000010000000000
+100000100000000000
+1000001000000000000
+10000010000000000000
+100000100000000000000
+1000001000000000000000
+10000010000000000000000
+100000100000000000000000
+1000001000000000000000000
+100000.01
+1000000.1
+10000001
+100000010
+1000000100
+10000001000
+100000010000
+1000000100000
+10000001000000
+100000010000000
+1000000100000000
+10000001000000000
+100000010000000000
+1000000100000000000
+10000001000000000000
+100000010000000000000
+1000000100000000000000
+10000001000000000000000
+100000010000000000000000
+1000000100000000000000000
+100000.001
+1000000.01
+10000000.1
+100000001
+1000000010
+10000000100
+100000001000
+1000000010000
+10000000100000
+100000001000000
+1000000010000000
+10000000100000000
+100000001000000000
+1000000010000000000
+10000000100000000000
+100000001000000000000
+1000000010000000000000
+10000000100000000000000
+100000001000000000000000
+1000000010000000000000000
+100000.0001
+1000000.001
+10000000.01
+100000000.1
+1000000001
+10000000010
+100000000100
+1000000001000
+10000000010000
+100000000100000
+1000000001000000
+10000000010000000
+100000000100000000
+1000000001000000000
+10000000010000000000
+100000000100000000000
+1000000001000000000000
+10000000010000000000000
+100000000100000000000000
+1000000001000000000000000
+100000.00001
+1000000.0001
+10000000.001
+100000000.01
+1000000000.1
+10000000001
+100000000010
+1000000000100
+10000000001000
+100000000010000
+1000000000100000
+10000000001000000
+100000000010000000
+1000000000100000000
+10000000001000000000
+100000000010000000000
+1000000000100000000000
+10000000001000000000000
+100000000010000000000000
+1000000000100000000000000
+100000.000001
+1000000.00001
+10000000.0001
+100000000.001
+1000000000.01
+10000000000.1
+100000000001
+1000000000010
+10000000000100
+100000000001000
+1000000000010000
+10000000000100000
+100000000001000000
+1000000000010000000
+10000000000100000000
+100000000001000000000
+1000000000010000000000
+10000000000100000000000
+100000000001000000000000
+1000000000010000000000000
+100000.0000001
+1000000.000001
+10000000.00001
+100000000.0001
+1000000000.001
+10000000000.01
+100000000000.1
+1000000000001
+10000000000010
+100000000000100
+1000000000001000
+10000000000010000
+100000000000100000
+1000000000001000000
+10000000000010000000
+100000000000100000000
+1000000000001000000000
+10000000000010000000000
+100000000000100000000000
+1000000000001000000000000
+100000.00000001
+1000000.0000001
+10000000.000001
+100000000.00001
+1000000000.0001
+10000000000.001
+100000000000.01
+1000000000000.1
+10000000000001
+100000000000010
+1000000000000100
+10000000000001000
+100000000000010000
+1000000000000100000
+10000000000001000000
+100000000000010000000
+1000000000000100000000
+10000000000001000000000
+100000000000010000000000
+1000000000000100000000000
+100000.000000001
+1000000.00000001
+10000000.0000001
+100000000.000001
+1000000000.00001
+10000000000.0001
+100000000000.001
+1000000000000.01
+10000000000000.1
+100000000000001
+1000000000000010
+10000000000000100
+100000000000001000
+1000000000000010000
+10000000000000100000
+100000000000001000000
+1000000000000010000000
+10000000000000100000000
+100000000000001000000000
+1000000000000010000000000
+100000.0000000001
+1000000.000000001
+10000000.00000001
+100000000.0000001
+1000000000.000001
+10000000000.00001
+100000000000.0001
+1000000000000.001
+10000000000000.01
+100000000000000.1
+1000000000000001
+10000000000000010
+100000000000000100
+1000000000000001000
+10000000000000010000
+100000000000000100000
+1000000000000001000000
+10000000000000010000000
+100000000000000100000000
+1000000000000001000000000
+1000000
+10000000
+100000000
+1000000000
+10000000000
+100000000000
+1000000000000
+10000000000000
+100000000000000
+1000000000000000
+10000000000000000
+100000000000000000
+1000000000000000000
+10000000000000000000
+100000000000000000000
+1000000000000000000000
+10000000000000000000000
+100000000000000000000000
+1000000000000000000000000
+10000000000000000000000000
+1000000.1
+10000001
+100000010
+1000000100
+10000001000
+100000010000
+1000000100000
+10000001000000
+100000010000000
+1000000100000000
+10000001000000000
+100000010000000000
+1000000100000000000
+10000001000000000000
+100000010000000000000
+1000000100000000000000
+10000001000000000000000
+100000010000000000000000
+1000000100000000000000000
+10000001000000000000000000
+1000000.01
+10000000.1
+100000001
+1000000010
+10000000100
+100000001000
+1000000010000
+10000000100000
+100000001000000
+1000000010000000
+10000000100000000
+100000001000000000
+1000000010000000000
+10000000100000000000
+100000001000000000000
+1000000010000000000000
+10000000100000000000000
+100000001000000000000000
+1000000010000000000000000
+10000000100000000000000000
+1000000.001
+10000000.01
+100000000.1
+1000000001
+10000000010
+100000000100
+1000000001000
+10000000010000
+100000000100000
+1000000001000000
+10000000010000000
+100000000100000000
+1000000001000000000
+10000000010000000000
+100000000100000000000
+1000000001000000000000
+10000000010000000000000
+100000000100000000000000
+1000000001000000000000000
+10000000010000000000000000
+1000000.0001
+10000000.001
+100000000.01
+1000000000.1
+10000000001
+100000000010
+1000000000100
+10000000001000
+100000000010000
+1000000000100000
+10000000001000000
+100000000010000000
+1000000000100000000
+10000000001000000000
+100000000010000000000
+1000000000100000000000
+10000000001000000000000
+100000000010000000000000
+1000000000100000000000000
+10000000001000000000000000
+1000000.00001
+10000000.0001
+100000000.001
+1000000000.01
+10000000000.1
+100000000001
+1000000000010
+10000000000100
+100000000001000
+1000000000010000
+10000000000100000
+100000000001000000
+1000000000010000000
+10000000000100000000
+100000000001000000000
+1000000000010000000000
+10000000000100000000000
+100000000001000000000000
+1000000000010000000000000
+10000000000100000000000000
+1000000.000001
+10000000.00001
+100000000.0001
+1000000000.001
+10000000000.01
+100000000000.1
+1000000000001
+10000000000010
+100000000000100
+1000000000001000
+10000000000010000
+100000000000100000
+1000000000001000000
+10000000000010000000
+100000000000100000000
+1000000000001000000000
+10000000000010000000000
+100000000000100000000000
+1000000000001000000000000
+10000000000010000000000000
+1000000.0000001
+10000000.000001
+100000000.00001
+1000000000.0001
+10000000000.001
+100000000000.01
+1000000000000.1
+10000000000001
+100000000000010
+1000000000000100
+10000000000001000
+100000000000010000
+1000000000000100000
+10000000000001000000
+100000000000010000000
+1000000000000100000000
+10000000000001000000000
+100000000000010000000000
+1000000000000100000000000
+10000000000001000000000000
+1000000.00000001
+10000000.0000001
+100000000.000001
+1000000000.00001
+10000000000.0001
+100000000000.001
+1000000000000.01
+10000000000000.1
+100000000000001
+1000000000000010
+10000000000000100
+100000000000001000
+1000000000000010000
+10000000000000100000
+100000000000001000000
+1000000000000010000000
+10000000000000100000000
+100000000000001000000000
+1000000000000010000000000
+10000000000000100000000000
+1000000.000000001
+10000000.00000001
+100000000.0000001
+1000000000.000001
+10000000000.00001
+100000000000.0001
+1000000000000.001
+10000000000000.01
+100000000000000.1
+1000000000000001
+10000000000000010
+100000000000000100
+1000000000000001000
+10000000000000010000
+100000000000000100000
+1000000000000001000000
+10000000000000010000000
+100000000000000100000000
+1000000000000001000000000
+10000000000000010000000000
+1000000.0000000001
+10000000.000000001
+100000000.00000001
+1000000000.0000001
+10000000000.000001
+100000000000.00001
+1000000000000.0001
+10000000000000.001
+100000000000000.01
+1000000000000000.1
+10000000000000001
+100000000000000010
+1000000000000000100
+10000000000000001000
+100000000000000010000
+1000000000000000100000
+10000000000000001000000
+100000000000000010000000
+1000000000000000100000000
+10000000000000001000000000
+10000000
+100000000
+1000000000
+10000000000
+100000000000
+1000000000000
+10000000000000
+100000000000000
+1000000000000000
+10000000000000000
+100000000000000000
+1000000000000000000
+10000000000000000000
+100000000000000000000
+1000000000000000000000
+10000000000000000000000
+100000000000000000000000
+1000000000000000000000000
+10000000000000000000000000
+100000000000000000000000000
+10000000.1
+100000001
+1000000010
+10000000100
+100000001000
+1000000010000
+10000000100000
+100000001000000
+1000000010000000
+10000000100000000
+100000001000000000
+1000000010000000000
+10000000100000000000
+100000001000000000000
+1000000010000000000000
+10000000100000000000000
+100000001000000000000000
+1000000010000000000000000
+10000000100000000000000000
+100000001000000000000000000
+10000000.01
+100000000.1
+1000000001
+10000000010
+100000000100
+1000000001000
+10000000010000
+100000000100000
+1000000001000000
+10000000010000000
+100000000100000000
+1000000001000000000
+10000000010000000000
+100000000100000000000
+1000000001000000000000
+10000000010000000000000
+100000000100000000000000
+1000000001000000000000000
+10000000010000000000000000
+100000000100000000000000000
+10000000.001
+100000000.01
+1000000000.1
+10000000001
+100000000010
+1000000000100
+10000000001000
+100000000010000
+1000000000100000
+10000000001000000
+100000000010000000
+1000000000100000000
+10000000001000000000
+100000000010000000000
+1000000000100000000000
+10000000001000000000000
+100000000010000000000000
+1000000000100000000000000
+10000000001000000000000000
+100000000010000000000000000
+10000000.0001
+100000000.001
+1000000000.01
+10000000000.1
+100000000001
+1000000000010
+10000000000100
+100000000001000
+1000000000010000
+10000000000100000
+100000000001000000
+1000000000010000000
+10000000000100000000
+100000000001000000000
+1000000000010000000000
+10000000000100000000000
+100000000001000000000000
+1000000000010000000000000
+10000000000100000000000000
+100000000001000000000000000
+10000000.00001
+100000000.0001
+1000000000.001
+10000000000.01
+100000000000.1
+1000000000001
+10000000000010
+100000000000100
+1000000000001000
+10000000000010000
+100000000000100000
+1000000000001000000
+10000000000010000000
+100000000000100000000
+1000000000001000000000
+10000000000010000000000
+100000000000100000000000
+1000000000001000000000000
+10000000000010000000000000
+100000000000100000000000000
+10000000.000001
+100000000.00001
+1000000000.0001
+10000000000.001
+100000000000.01
+1000000000000.1
+10000000000001
+100000000000010
+1000000000000100
+10000000000001000
+100000000000010000
+1000000000000100000
+10000000000001000000
+100000000000010000000
+1000000000000100000000
+10000000000001000000000
+100000000000010000000000
+1000000000000100000000000
+10000000000001000000000000
+100000000000010000000000000
+10000000.0000001
+100000000.000001
+1000000000.00001
+10000000000.0001
+100000000000.001
+1000000000000.01
+10000000000000.1
+100000000000001
+1000000000000010
+10000000000000100
+100000000000001000
+1000000000000010000
+10000000000000100000
+100000000000001000000
+1000000000000010000000
+10000000000000100000000
+100000000000001000000000
+1000000000000010000000000
+10000000000000100000000000
+100000000000001000000000000
+10000000.00000001
+100000000.0000001
+1000000000.000001
+10000000000.00001
+100000000000.0001
+1000000000000.001
+10000000000000.01
+100000000000000.1
+1000000000000001
+10000000000000010
+100000000000000100
+1000000000000001000
+10000000000000010000
+100000000000000100000
+1000000000000001000000
+10000000000000010000000
+100000000000000100000000
+1000000000000001000000000
+10000000000000010000000000
+100000000000000100000000000
+10000000.000000001
+100000000.00000001
+1000000000.0000001
+10000000000.000001
+100000000000.00001
+1000000000000.0001
+10000000000000.001
+100000000000000.01
+1000000000000000.1
+10000000000000001
+100000000000000010
+1000000000000000100
+10000000000000001000
+100000000000000010000
+1000000000000000100000
+10000000000000001000000
+100000000000000010000000
+1000000000000000100000000
+10000000000000001000000000
+100000000000000010000000000
+10000000.0000000001
+100000000.000000001
+1000000000.00000001
+10000000000.0000001
+100000000000.000001
+1000000000000.00001
+10000000000000.0001
+100000000000000.001
+1000000000000000.01
+10000000000000000.1
+100000000000000001
+1000000000000000010
+10000000000000000100
+100000000000000001000
+1000000000000000010000
+10000000000000000100000
+100000000000000001000000
+1000000000000000010000000
+10000000000000000100000000
+100000000000000001000000000
+100000000
+1000000000
+10000000000
+100000000000
+1000000000000
+10000000000000
+100000000000000
+1000000000000000
+10000000000000000
+100000000000000000
+1000000000000000000
+10000000000000000000
+100000000000000000000
+1000000000000000000000
+10000000000000000000000
+100000000000000000000000
+1000000000000000000000000
+10000000000000000000000000
+100000000000000000000000000
+1000000000000000000000000000
+100000000.1
+1000000001
+10000000010
+100000000100
+1000000001000
+10000000010000
+100000000100000
+1000000001000000
+10000000010000000
+100000000100000000
+1000000001000000000
+10000000010000000000
+100000000100000000000
+1000000001000000000000
+10000000010000000000000
+100000000100000000000000
+1000000001000000000000000
+10000000010000000000000000
+100000000100000000000000000
+1000000001000000000000000000
+100000000.01
+1000000000.1
+10000000001
+100000000010
+1000000000100
+10000000001000
+100000000010000
+1000000000100000
+10000000001000000
+100000000010000000
+1000000000100000000
+10000000001000000000
+100000000010000000000
+1000000000100000000000
+10000000001000000000000
+100000000010000000000000
+1000000000100000000000000
+10000000001000000000000000
+100000000010000000000000000
+1000000000100000000000000000
+100000000.001
+1000000000.01
+10000000000.1
+100000000001
+1000000000010
+10000000000100
+100000000001000
+1000000000010000
+10000000000100000
+100000000001000000
+1000000000010000000
+10000000000100000000
+100000000001000000000
+1000000000010000000000
+10000000000100000000000
+100000000001000000000000
+1000000000010000000000000
+10000000000100000000000000
+100000000001000000000000000
+1000000000010000000000000000
+100000000.0001
+1000000000.001
+10000000000.01
+100000000000.1
+1000000000001
+10000000000010
+100000000000100
+1000000000001000
+10000000000010000
+100000000000100000
+1000000000001000000
+10000000000010000000
+100000000000100000000
+1000000000001000000000
+10000000000010000000000
+100000000000100000000000
+1000000000001000000000000
+10000000000010000000000000
+100000000000100000000000000
+1000000000001000000000000000
+100000000.00001
+1000000000.0001
+10000000000.001
+100000000000.01
+1000000000000.1
+10000000000001
+100000000000010
+1000000000000100
+10000000000001000
+100000000000010000
+1000000000000100000
+10000000000001000000
+100000000000010000000
+1000000000000100000000
+10000000000001000000000
+100000000000010000000000
+1000000000000100000000000
+10000000000001000000000000
+100000000000010000000000000
+1000000000000100000000000000
+100000000.000001
+1000000000.00001
+10000000000.0001
+100000000000.001
+1000000000000.01
+10000000000000.1
+100000000000001
+1000000000000010
+10000000000000100
+100000000000001000
+1000000000000010000
+10000000000000100000
+100000000000001000000
+1000000000000010000000
+10000000000000100000000
+100000000000001000000000
+1000000000000010000000000
+10000000000000100000000000
+100000000000001000000000000
+1000000000000010000000000000
+100000000.0000001
+1000000000.000001
+10000000000.00001
+100000000000.0001
+1000000000000.001
+10000000000000.01
+100000000000000.1
+1000000000000001
+10000000000000010
+100000000000000100
+1000000000000001000
+10000000000000010000
+100000000000000100000
+1000000000000001000000
+10000000000000010000000
+100000000000000100000000
+1000000000000001000000000
+10000000000000010000000000
+100000000000000100000000000
+1000000000000001000000000000
+100000000.00000001
+1000000000.0000001
+10000000000.000001
+100000000000.00001
+1000000000000.0001
+10000000000000.001
+100000000000000.01
+1000000000000000.1
+10000000000000001
+100000000000000010
+1000000000000000100
+10000000000000001000
+100000000000000010000
+1000000000000000100000
+10000000000000001000000
+100000000000000010000000
+1000000000000000100000000
+10000000000000001000000000
+100000000000000010000000000
+1000000000000000100000000000
+100000000.000000001
+1000000000.00000001
+10000000000.0000001
+100000000000.000001
+1000000000000.00001
+10000000000000.0001
+100000000000000.001
+1000000000000000.01
+10000000000000000.1
+100000000000000001
+1000000000000000010
+10000000000000000100
+100000000000000001000
+1000000000000000010000
+10000000000000000100000
+100000000000000001000000
+1000000000000000010000000
+10000000000000000100000000
+100000000000000001000000000
+1000000000000000010000000000
+100000000.0000000001
+1000000000.000000001
+10000000000.00000001
+100000000000.0000001
+1000000000000.000001
+10000000000000.00001
+100000000000000.0001
+1000000000000000.001
+10000000000000000.01
+100000000000000000.1
+1000000000000000001
+10000000000000000010
+100000000000000000100
+1000000000000000001000
+10000000000000000010000
+100000000000000000100000
+1000000000000000001000000
+10000000000000000010000000
+100000000000000000100000000
+1000000000000000001000000000
+1000000000
+10000000000
+100000000000
+1000000000000
+10000000000000
+100000000000000
+1000000000000000
+10000000000000000
+100000000000000000
+1000000000000000000
+10000000000000000000
+100000000000000000000
+1000000000000000000000
+10000000000000000000000
+100000000000000000000000
+1000000000000000000000000
+10000000000000000000000000
+100000000000000000000000000
+1000000000000000000000000000
+10000000000000000000000000000
+1000000000.1
+10000000001
+100000000010
+1000000000100
+10000000001000
+100000000010000
+1000000000100000
+10000000001000000
+100000000010000000
+1000000000100000000
+10000000001000000000
+100000000010000000000
+1000000000100000000000
+10000000001000000000000
+100000000010000000000000
+1000000000100000000000000
+10000000001000000000000000
+100000000010000000000000000
+1000000000100000000000000000
+10000000001000000000000000000
+1000000000.01
+10000000000.1
+100000000001
+1000000000010
+10000000000100
+100000000001000
+1000000000010000
+10000000000100000
+100000000001000000
+1000000000010000000
+10000000000100000000
+100000000001000000000
+1000000000010000000000
+10000000000100000000000
+100000000001000000000000
+1000000000010000000000000
+10000000000100000000000000
+100000000001000000000000000
+1000000000010000000000000000
+10000000000100000000000000000
+1000000000.001
+10000000000.01
+100000000000.1
+1000000000001
+10000000000010
+100000000000100
+1000000000001000
+10000000000010000
+100000000000100000
+1000000000001000000
+10000000000010000000
+100000000000100000000
+1000000000001000000000
+10000000000010000000000
+100000000000100000000000
+1000000000001000000000000
+10000000000010000000000000
+100000000000100000000000000
+1000000000001000000000000000
+10000000000010000000000000000
+1000000000.0001
+10000000000.001
+100000000000.01
+1000000000000.1
+10000000000001
+100000000000010
+1000000000000100
+10000000000001000
+100000000000010000
+1000000000000100000
+10000000000001000000
+100000000000010000000
+1000000000000100000000
+10000000000001000000000
+100000000000010000000000
+1000000000000100000000000
+10000000000001000000000000
+100000000000010000000000000
+1000000000000100000000000000
+10000000000001000000000000000
+1000000000.00001
+10000000000.0001
+100000000000.001
+1000000000000.01
+10000000000000.1
+100000000000001
+1000000000000010
+10000000000000100
+100000000000001000
+1000000000000010000
+10000000000000100000
+100000000000001000000
+1000000000000010000000
+10000000000000100000000
+100000000000001000000000
+1000000000000010000000000
+10000000000000100000000000
+100000000000001000000000000
+1000000000000010000000000000
+10000000000000100000000000000
+1000000000.000001
+10000000000.00001
+100000000000.0001
+1000000000000.001
+10000000000000.01
+100000000000000.1
+1000000000000001
+10000000000000010
+100000000000000100
+1000000000000001000
+10000000000000010000
+100000000000000100000
+1000000000000001000000
+10000000000000010000000
+100000000000000100000000
+1000000000000001000000000
+10000000000000010000000000
+100000000000000100000000000
+1000000000000001000000000000
+10000000000000010000000000000
+1000000000.0000001
+10000000000.000001
+100000000000.00001
+1000000000000.0001
+10000000000000.001
+100000000000000.01
+1000000000000000.1
+10000000000000001
+100000000000000010
+1000000000000000100
+10000000000000001000
+100000000000000010000
+1000000000000000100000
+10000000000000001000000
+100000000000000010000000
+1000000000000000100000000
+10000000000000001000000000
+100000000000000010000000000
+1000000000000000100000000000
+10000000000000001000000000000
+1000000000.00000001
+10000000000.0000001
+100000000000.000001
+1000000000000.00001
+10000000000000.0001
+100000000000000.001
+1000000000000000.01
+10000000000000000.1
+100000000000000001
+1000000000000000010
+10000000000000000100
+100000000000000001000
+1000000000000000010000
+10000000000000000100000
+100000000000000001000000
+1000000000000000010000000
+10000000000000000100000000
+100000000000000001000000000
+1000000000000000010000000000
+10000000000000000100000000000
+1000000000.000000001
+10000000000.00000001
+100000000000.0000001
+1000000000000.000001
+10000000000000.00001
+100000000000000.0001
+1000000000000000.001
+10000000000000000.01
+100000000000000000.1
+1000000000000000001
+10000000000000000010
+100000000000000000100
+1000000000000000001000
+10000000000000000010000
+100000000000000000100000
+1000000000000000001000000
+10000000000000000010000000
+100000000000000000100000000
+1000000000000000001000000000
+10000000000000000010000000000
+1000000000.0000000001
+10000000000.000000001
+100000000000.00000001
+1000000000000.0000001
+10000000000000.000001
+100000000000000.00001
+1000000000000000.0001
+10000000000000000.001
+100000000000000000.01
+1000000000000000000.1
+10000000000000000001
+100000000000000000010
+1000000000000000000100
+10000000000000000001000
+100000000000000000010000
+1000000000000000000100000
+10000000000000000001000000
+100000000000000000010000000
+1000000000000000000100000000
+10000000000000000001000000000
+10000000000
+100000000000
+1000000000000
+10000000000000
+100000000000000
+1000000000000000
+10000000000000000
+100000000000000000
+1000000000000000000
+10000000000000000000
+100000000000000000000
+1000000000000000000000
+10000000000000000000000
+100000000000000000000000
+1000000000000000000000000
+10000000000000000000000000
+100000000000000000000000000
+1000000000000000000000000000
+10000000000000000000000000000
+100000000000000000000000000000
+10000000000.1
+100000000001
+1000000000010
+10000000000100
+100000000001000
+1000000000010000
+10000000000100000
+100000000001000000
+1000000000010000000
+10000000000100000000
+100000000001000000000
+1000000000010000000000
+10000000000100000000000
+100000000001000000000000
+1000000000010000000000000
+10000000000100000000000000
+100000000001000000000000000
+1000000000010000000000000000
+10000000000100000000000000000
+100000000001000000000000000000
+10000000000.01
+100000000000.1
+1000000000001
+10000000000010
+100000000000100
+1000000000001000
+10000000000010000
+100000000000100000
+1000000000001000000
+10000000000010000000
+100000000000100000000
+1000000000001000000000
+10000000000010000000000
+100000000000100000000000
+1000000000001000000000000
+10000000000010000000000000
+100000000000100000000000000
+1000000000001000000000000000
+10000000000010000000000000000
+100000000000100000000000000000
+10000000000.001
+100000000000.01
+1000000000000.1
+10000000000001
+100000000000010
+1000000000000100
+10000000000001000
+100000000000010000
+1000000000000100000
+10000000000001000000
+100000000000010000000
+1000000000000100000000
+10000000000001000000000
+100000000000010000000000
+1000000000000100000000000
+10000000000001000000000000
+100000000000010000000000000
+1000000000000100000000000000
+10000000000001000000000000000
+100000000000010000000000000000
+10000000000.0001
+100000000000.001
+1000000000000.01
+10000000000000.1
+100000000000001
+1000000000000010
+10000000000000100
+100000000000001000
+1000000000000010000
+10000000000000100000
+100000000000001000000
+1000000000000010000000
+10000000000000100000000
+100000000000001000000000
+1000000000000010000000000
+10000000000000100000000000
+100000000000001000000000000
+1000000000000010000000000000
+10000000000000100000000000000
+100000000000001000000000000000
+10000000000.00001
+100000000000.0001
+1000000000000.001
+10000000000000.01
+100000000000000.1
+1000000000000001
+10000000000000010
+100000000000000100
+1000000000000001000
+10000000000000010000
+100000000000000100000
+1000000000000001000000
+10000000000000010000000
+100000000000000100000000
+1000000000000001000000000
+10000000000000010000000000
+100000000000000100000000000
+1000000000000001000000000000
+10000000000000010000000000000
+100000000000000100000000000000
+10000000000.000001
+100000000000.00001
+1000000000000.0001
+10000000000000.001
+100000000000000.01
+1000000000000000.1
+10000000000000001
+100000000000000010
+1000000000000000100
+10000000000000001000
+100000000000000010000
+1000000000000000100000
+10000000000000001000000
+100000000000000010000000
+1000000000000000100000000
+10000000000000001000000000
+100000000000000010000000000
+1000000000000000100000000000
+10000000000000001000000000000
+100000000000000010000000000000
+10000000000.0000001
+100000000000.000001
+1000000000000.00001
+10000000000000.0001
+100000000000000.001
+1000000000000000.01
+10000000000000000.1
+100000000000000001
+1000000000000000010
+10000000000000000100
+100000000000000001000
+1000000000000000010000
+10000000000000000100000
+100000000000000001000000
+1000000000000000010000000
+10000000000000000100000000
+100000000000000001000000000
+1000000000000000010000000000
+10000000000000000100000000000
+100000000000000001000000000000
+10000000000.00000001
+100000000000.0000001
+1000000000000.000001
+10000000000000.00001
+100000000000000.0001
+1000000000000000.001
+10000000000000000.01
+100000000000000000.1
+1000000000000000001
+10000000000000000010
+100000000000000000100
+1000000000000000001000
+10000000000000000010000
+100000000000000000100000
+1000000000000000001000000
+10000000000000000010000000
+100000000000000000100000000
+1000000000000000001000000000
+10000000000000000010000000000
+100000000000000000100000000000
+10000000000.000000001
+100000000000.00000001
+1000000000000.0000001
+10000000000000.000001
+100000000000000.00001
+1000000000000000.0001
+10000000000000000.001
+100000000000000000.01
+1000000000000000000.1
+10000000000000000001
+100000000000000000010
+1000000000000000000100
+10000000000000000001000
+100000000000000000010000
+1000000000000000000100000
+10000000000000000001000000
+100000000000000000010000000
+1000000000000000000100000000
+10000000000000000001000000000
+100000000000000000010000000000
+10000000000.0000000001
+100000000000.000000001
+1000000000000.00000001
+10000000000000.0000001
+100000000000000.000001
+1000000000000000.00001
+10000000000000000.0001
+100000000000000000.001
+1000000000000000000.01
+10000000000000000000.1
+100000000000000000001
+1000000000000000000010
+10000000000000000000100
+100000000000000000001000
+1000000000000000000010000
+10000000000000000000100000
+100000000000000000001000000
+1000000000000000000010000000
+10000000000000000000100000000
+100000000000000000001000000000
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+.1
+.01
+.001
+.0001
+.00001
+.000001
+.0000001
+.00000001
+.000000001
+.0000000001
+.00000000001
+.000000000001
+.0000000000001
+.00000000000001
+.000000000000001
+.0000000000000001
+.00000000000000001
+.000000000000000001
+.0000000000000000001
+.00000000000000000001
+.01
+.001
+.0001
+.00001
+.000001
+.0000001
+.00000001
+.000000001
+.0000000001
+.00000000001
+.000000000001
+.0000000000001
+.00000000000001
+.000000000000001
+.0000000000000001
+.00000000000000001
+.000000000000000001
+.0000000000000000001
+.00000000000000000001
+.000000000000000000001
+.001
+.0001
+.00001
+.000001
+.0000001
+.00000001
+.000000001
+.0000000001
+.00000000001
+.000000000001
+.0000000000001
+.00000000000001
+.000000000000001
+.0000000000000001
+.00000000000000001
+.000000000000000001
+.0000000000000000001
+.00000000000000000001
+.000000000000000000001
+.0000000000000000000001
+.0001
+.00001
+.000001
+.0000001
+.00000001
+.000000001
+.0000000001
+.00000000001
+.000000000001
+.0000000000001
+.00000000000001
+.000000000000001
+.0000000000000001
+.00000000000000001
+.000000000000000001
+.0000000000000000001
+.00000000000000000001
+.000000000000000000001
+.0000000000000000000001
+.00000000000000000000001
+.00001
+.000001
+.0000001
+.00000001
+.000000001
+.0000000001
+.00000000001
+.000000000001
+.0000000000001
+.00000000000001
+.000000000000001
+.0000000000000001
+.00000000000000001
+.000000000000000001
+.0000000000000000001
+.00000000000000000001
+.000000000000000000001
+.0000000000000000000001
+.00000000000000000000001
+.000000000000000000000001
+.000001
+.0000001
+.00000001
+.000000001
+.0000000001
+.00000000001
+.000000000001
+.0000000000001
+.00000000000001
+.000000000000001
+.0000000000000001
+.00000000000000001
+.000000000000000001
+.0000000000000000001
+.00000000000000000001
+.000000000000000000001
+.0000000000000000000001
+.00000000000000000000001
+.000000000000000000000001
+.0000000000000000000000001
+.0000001
+.00000001
+.000000001
+.0000000001
+.00000000001
+.000000000001
+.0000000000001
+.00000000000001
+.000000000000001
+.0000000000000001
+.00000000000000001
+.000000000000000001
+.0000000000000000001
+.00000000000000000001
+.000000000000000000001
+.0000000000000000000001
+.00000000000000000000001
+.000000000000000000000001
+.0000000000000000000000001
+.00000000000000000000000001
+.00000001
+.000000001
+.0000000001
+.00000000001
+.000000000001
+.0000000000001
+.00000000000001
+.000000000000001
+.0000000000000001
+.00000000000000001
+.000000000000000001
+.0000000000000000001
+.00000000000000000001
+.000000000000000000001
+.0000000000000000000001
+.00000000000000000000001
+.000000000000000000000001
+.0000000000000000000000001
+.00000000000000000000000001
+.000000000000000000000000001
+.000000001
+.0000000001
+.00000000001
+.000000000001
+.0000000000001
+.00000000000001
+.000000000000001
+.0000000000000001
+.00000000000000001
+.000000000000000001
+.0000000000000000001
+.00000000000000000001
+.000000000000000000001
+.0000000000000000000001
+.00000000000000000000001
+.000000000000000000000001
+.0000000000000000000000001
+.00000000000000000000000001
+.000000000000000000000000001
+.0000000000000000000000000001
+.0000000001
+.00000000001
+.000000000001
+.0000000000001
+.00000000000001
+.000000000000001
+.0000000000000001
+.00000000000000001
+.000000000000000001
+.0000000000000000001
+.00000000000000000001
+.000000000000000000001
+.0000000000000000000001
+.00000000000000000000001
+.000000000000000000000001
+.0000000000000000000000001
+.00000000000000000000000001
+.000000000000000000000000001
+.0000000000000000000000000001
+.00000000000000000000000000001
+1
+.1
+.01
+.001
+.0001
+.00001
+.000001
+.0000001
+.00000001
+.000000001
+.0000000001
+.00000000001
+.000000000001
+.0000000000001
+.00000000000001
+.000000000000001
+.0000000000000001
+.00000000000000001
+.000000000000000001
+.0000000000000000001
+1.1
+.11
+.011
+.0011
+.00011
+.000011
+.0000011
+.00000011
+.000000011
+.0000000011
+.00000000011
+.000000000011
+.0000000000011
+.00000000000011
+.000000000000011
+.0000000000000011
+.00000000000000011
+.000000000000000011
+.0000000000000000011
+.00000000000000000011
+1.01
+.101
+.0101
+.00101
+.000101
+.0000101
+.00000101
+.000000101
+.0000000101
+.00000000101
+.000000000101
+.0000000000101
+.00000000000101
+.000000000000101
+.0000000000000101
+.00000000000000101
+.000000000000000101
+.0000000000000000101
+.00000000000000000101
+.000000000000000000101
+1.001
+.1001
+.01001
+.001001
+.0001001
+.00001001
+.000001001
+.0000001001
+.00000001001
+.000000001001
+.0000000001001
+.00000000001001
+.000000000001001
+.0000000000001001
+.00000000000001001
+.000000000000001001
+.0000000000000001001
+.00000000000000001001
+.000000000000000001001
+.0000000000000000001001
+1.0001
+.10001
+.010001
+.0010001
+.00010001
+.000010001
+.0000010001
+.00000010001
+.000000010001
+.0000000010001
+.00000000010001
+.000000000010001
+.0000000000010001
+.00000000000010001
+.000000000000010001
+.0000000000000010001
+.00000000000000010001
+.000000000000000010001
+.0000000000000000010001
+.00000000000000000010001
+1.00001
+.100001
+.0100001
+.00100001
+.000100001
+.0000100001
+.00000100001
+.000000100001
+.0000000100001
+.00000000100001
+.000000000100001
+.0000000000100001
+.00000000000100001
+.000000000000100001
+.0000000000000100001
+.00000000000000100001
+.000000000000000100001
+.0000000000000000100001
+.00000000000000000100001
+.000000000000000000100001
+1.000001
+.1000001
+.01000001
+.001000001
+.0001000001
+.00001000001
+.000001000001
+.0000001000001
+.00000001000001
+.000000001000001
+.0000000001000001
+.00000000001000001
+.000000000001000001
+.0000000000001000001
+.00000000000001000001
+.000000000000001000001
+.0000000000000001000001
+.00000000000000001000001
+.000000000000000001000001
+.0000000000000000001000001
+1.0000001
+.10000001
+.010000001
+.0010000001
+.00010000001
+.000010000001
+.0000010000001
+.00000010000001
+.000000010000001
+.0000000010000001
+.00000000010000001
+.000000000010000001
+.0000000000010000001
+.00000000000010000001
+.000000000000010000001
+.0000000000000010000001
+.00000000000000010000001
+.000000000000000010000001
+.0000000000000000010000001
+.00000000000000000010000001
+1.00000001
+.100000001
+.0100000001
+.00100000001
+.000100000001
+.0000100000001
+.00000100000001
+.000000100000001
+.0000000100000001
+.00000000100000001
+.000000000100000001
+.0000000000100000001
+.00000000000100000001
+.000000000000100000001
+.0000000000000100000001
+.00000000000000100000001
+.000000000000000100000001
+.0000000000000000100000001
+.00000000000000000100000001
+.000000000000000000100000001
+1.000000001
+.1000000001
+.01000000001
+.001000000001
+.0001000000001
+.00001000000001
+.000001000000001
+.0000001000000001
+.00000001000000001
+.000000001000000001
+.0000000001000000001
+.00000000001000000001
+.000000000001000000001
+.0000000000001000000001
+.00000000000001000000001
+.000000000000001000000001
+.0000000000000001000000001
+.00000000000000001000000001
+.000000000000000001000000001
+.0000000000000000001000000001
+1.0000000001
+.10000000001
+.010000000001
+.0010000000001
+.00010000000001
+.000010000000001
+.0000010000000001
+.00000010000000001
+.000000010000000001
+.0000000010000000001
+.00000000010000000001
+.000000000010000000001
+.0000000000010000000001
+.00000000000010000000001
+.000000000000010000000001
+.0000000000000010000000001
+.00000000000000010000000001
+.000000000000000010000000001
+.0000000000000000010000000001
+.00000000000000000010000000001
+10
+1.0
+.10
+.010
+.0010
+.00010
+.000010
+.0000010
+.00000010
+.000000010
+.0000000010
+.00000000010
+.000000000010
+.0000000000010
+.00000000000010
+.000000000000010
+.0000000000000010
+.00000000000000010
+.000000000000000010
+.0000000000000000010
+10.1
+1.01
+.101
+.0101
+.00101
+.000101
+.0000101
+.00000101
+.000000101
+.0000000101
+.00000000101
+.000000000101
+.0000000000101
+.00000000000101
+.000000000000101
+.0000000000000101
+.00000000000000101
+.000000000000000101
+.0000000000000000101
+.00000000000000000101
+10.01
+1.001
+.1001
+.01001
+.001001
+.0001001
+.00001001
+.000001001
+.0000001001
+.00000001001
+.000000001001
+.0000000001001
+.00000000001001
+.000000000001001
+.0000000000001001
+.00000000000001001
+.000000000000001001
+.0000000000000001001
+.00000000000000001001
+.000000000000000001001
+10.001
+1.0001
+.10001
+.010001
+.0010001
+.00010001
+.000010001
+.0000010001
+.00000010001
+.000000010001
+.0000000010001
+.00000000010001
+.000000000010001
+.0000000000010001
+.00000000000010001
+.000000000000010001
+.0000000000000010001
+.00000000000000010001
+.000000000000000010001
+.0000000000000000010001
+10.0001
+1.00001
+.100001
+.0100001
+.00100001
+.000100001
+.0000100001
+.00000100001
+.000000100001
+.0000000100001
+.00000000100001
+.000000000100001
+.0000000000100001
+.00000000000100001
+.000000000000100001
+.0000000000000100001
+.00000000000000100001
+.000000000000000100001
+.0000000000000000100001
+.00000000000000000100001
+10.00001
+1.000001
+.1000001
+.01000001
+.001000001
+.0001000001
+.00001000001
+.000001000001
+.0000001000001
+.00000001000001
+.000000001000001
+.0000000001000001
+.00000000001000001
+.000000000001000001
+.0000000000001000001
+.00000000000001000001
+.000000000000001000001
+.0000000000000001000001
+.00000000000000001000001
+.000000000000000001000001
+10.000001
+1.0000001
+.10000001
+.010000001
+.0010000001
+.00010000001
+.000010000001
+.0000010000001
+.00000010000001
+.000000010000001
+.0000000010000001
+.00000000010000001
+.000000000010000001
+.0000000000010000001
+.00000000000010000001
+.000000000000010000001
+.0000000000000010000001
+.00000000000000010000001
+.000000000000000010000001
+.0000000000000000010000001
+10.0000001
+1.00000001
+.100000001
+.0100000001
+.00100000001
+.000100000001
+.0000100000001
+.00000100000001
+.000000100000001
+.0000000100000001
+.00000000100000001
+.000000000100000001
+.0000000000100000001
+.00000000000100000001
+.000000000000100000001
+.0000000000000100000001
+.00000000000000100000001
+.000000000000000100000001
+.0000000000000000100000001
+.00000000000000000100000001
+10.00000001
+1.000000001
+.1000000001
+.01000000001
+.001000000001
+.0001000000001
+.00001000000001
+.000001000000001
+.0000001000000001
+.00000001000000001
+.000000001000000001
+.0000000001000000001
+.00000000001000000001
+.000000000001000000001
+.0000000000001000000001
+.00000000000001000000001
+.000000000000001000000001
+.0000000000000001000000001
+.00000000000000001000000001
+.000000000000000001000000001
+10.000000001
+1.0000000001
+.10000000001
+.010000000001
+.0010000000001
+.00010000000001
+.000010000000001
+.0000010000000001
+.00000010000000001
+.000000010000000001
+.0000000010000000001
+.00000000010000000001
+.000000000010000000001
+.0000000000010000000001
+.00000000000010000000001
+.000000000000010000000001
+.0000000000000010000000001
+.00000000000000010000000001
+.000000000000000010000000001
+.0000000000000000010000000001
+10.0000000001
+1.00000000001
+.100000000001
+.0100000000001
+.00100000000001
+.000100000000001
+.0000100000000001
+.00000100000000001
+.000000100000000001
+.0000000100000000001
+.00000000100000000001
+.000000000100000000001
+.0000000000100000000001
+.00000000000100000000001
+.000000000000100000000001
+.0000000000000100000000001
+.00000000000000100000000001
+.000000000000000100000000001
+.0000000000000000100000000001
+.00000000000000000100000000001
+100
+10.0
+1.00
+.100
+.0100
+.00100
+.000100
+.0000100
+.00000100
+.000000100
+.0000000100
+.00000000100
+.000000000100
+.0000000000100
+.00000000000100
+.000000000000100
+.0000000000000100
+.00000000000000100
+.000000000000000100
+.0000000000000000100
+100.1
+10.01
+1.001
+.1001
+.01001
+.001001
+.0001001
+.00001001
+.000001001
+.0000001001
+.00000001001
+.000000001001
+.0000000001001
+.00000000001001
+.000000000001001
+.0000000000001001
+.00000000000001001
+.000000000000001001
+.0000000000000001001
+.00000000000000001001
+100.01
+10.001
+1.0001
+.10001
+.010001
+.0010001
+.00010001
+.000010001
+.0000010001
+.00000010001
+.000000010001
+.0000000010001
+.00000000010001
+.000000000010001
+.0000000000010001
+.00000000000010001
+.000000000000010001
+.0000000000000010001
+.00000000000000010001
+.000000000000000010001
+100.001
+10.0001
+1.00001
+.100001
+.0100001
+.00100001
+.000100001
+.0000100001
+.00000100001
+.000000100001
+.0000000100001
+.00000000100001
+.000000000100001
+.0000000000100001
+.00000000000100001
+.000000000000100001
+.0000000000000100001
+.00000000000000100001
+.000000000000000100001
+.0000000000000000100001
+100.0001
+10.00001
+1.000001
+.1000001
+.01000001
+.001000001
+.0001000001
+.00001000001
+.000001000001
+.0000001000001
+.00000001000001
+.000000001000001
+.0000000001000001
+.00000000001000001
+.000000000001000001
+.0000000000001000001
+.00000000000001000001
+.000000000000001000001
+.0000000000000001000001
+.00000000000000001000001
+100.00001
+10.000001
+1.0000001
+.10000001
+.010000001
+.0010000001
+.00010000001
+.000010000001
+.0000010000001
+.00000010000001
+.000000010000001
+.0000000010000001
+.00000000010000001
+.000000000010000001
+.0000000000010000001
+.00000000000010000001
+.000000000000010000001
+.0000000000000010000001
+.00000000000000010000001
+.000000000000000010000001
+100.000001
+10.0000001
+1.00000001
+.100000001
+.0100000001
+.00100000001
+.000100000001
+.0000100000001
+.00000100000001
+.000000100000001
+.0000000100000001
+.00000000100000001
+.000000000100000001
+.0000000000100000001
+.00000000000100000001
+.000000000000100000001
+.0000000000000100000001
+.00000000000000100000001
+.000000000000000100000001
+.0000000000000000100000001
+100.0000001
+10.00000001
+1.000000001
+.1000000001
+.01000000001
+.001000000001
+.0001000000001
+.00001000000001
+.000001000000001
+.0000001000000001
+.00000001000000001
+.000000001000000001
+.0000000001000000001
+.00000000001000000001
+.000000000001000000001
+.0000000000001000000001
+.00000000000001000000001
+.000000000000001000000001
+.0000000000000001000000001
+.00000000000000001000000001
+100.00000001
+10.000000001
+1.0000000001
+.10000000001
+.010000000001
+.0010000000001
+.00010000000001
+.000010000000001
+.0000010000000001
+.00000010000000001
+.000000010000000001
+.0000000010000000001
+.00000000010000000001
+.000000000010000000001
+.0000000000010000000001
+.00000000000010000000001
+.000000000000010000000001
+.0000000000000010000000001
+.00000000000000010000000001
+.000000000000000010000000001
+100.000000001
+10.0000000001
+1.00000000001
+.100000000001
+.0100000000001
+.00100000000001
+.000100000000001
+.0000100000000001
+.00000100000000001
+.000000100000000001
+.0000000100000000001
+.00000000100000000001
+.000000000100000000001
+.0000000000100000000001
+.00000000000100000000001
+.000000000000100000000001
+.0000000000000100000000001
+.00000000000000100000000001
+.000000000000000100000000001
+.0000000000000000100000000001
+100.0000000001
+10.00000000001
+1.000000000001
+.1000000000001
+.01000000000001
+.001000000000001
+.0001000000000001
+.00001000000000001
+.000001000000000001
+.0000001000000000001
+.00000001000000000001
+.000000001000000000001
+.0000000001000000000001
+.00000000001000000000001
+.000000000001000000000001
+.0000000000001000000000001
+.00000000000001000000000001
+.000000000000001000000000001
+.0000000000000001000000000001
+.00000000000000001000000000001
+1000
+100.0
+10.00
+1.000
+.1000
+.01000
+.001000
+.0001000
+.00001000
+.000001000
+.0000001000
+.00000001000
+.000000001000
+.0000000001000
+.00000000001000
+.000000000001000
+.0000000000001000
+.00000000000001000
+.000000000000001000
+.0000000000000001000
+1000.1
+100.01
+10.001
+1.0001
+.10001
+.010001
+.0010001
+.00010001
+.000010001
+.0000010001
+.00000010001
+.000000010001
+.0000000010001
+.00000000010001
+.000000000010001
+.0000000000010001
+.00000000000010001
+.000000000000010001
+.0000000000000010001
+.00000000000000010001
+1000.01
+100.001
+10.0001
+1.00001
+.100001
+.0100001
+.00100001
+.000100001
+.0000100001
+.00000100001
+.000000100001
+.0000000100001
+.00000000100001
+.000000000100001
+.0000000000100001
+.00000000000100001
+.000000000000100001
+.0000000000000100001
+.00000000000000100001
+.000000000000000100001
+1000.001
+100.0001
+10.00001
+1.000001
+.1000001
+.01000001
+.001000001
+.0001000001
+.00001000001
+.000001000001
+.0000001000001
+.00000001000001
+.000000001000001
+.0000000001000001
+.00000000001000001
+.000000000001000001
+.0000000000001000001
+.00000000000001000001
+.000000000000001000001
+.0000000000000001000001
+1000.0001
+100.00001
+10.000001
+1.0000001
+.10000001
+.010000001
+.0010000001
+.00010000001
+.000010000001
+.0000010000001
+.00000010000001
+.000000010000001
+.0000000010000001
+.00000000010000001
+.000000000010000001
+.0000000000010000001
+.00000000000010000001
+.000000000000010000001
+.0000000000000010000001
+.00000000000000010000001
+1000.00001
+100.000001
+10.0000001
+1.00000001
+.100000001
+.0100000001
+.00100000001
+.000100000001
+.0000100000001
+.00000100000001
+.000000100000001
+.0000000100000001
+.00000000100000001
+.000000000100000001
+.0000000000100000001
+.00000000000100000001
+.000000000000100000001
+.0000000000000100000001
+.00000000000000100000001
+.000000000000000100000001
+1000.000001
+100.0000001
+10.00000001
+1.000000001
+.1000000001
+.01000000001
+.001000000001
+.0001000000001
+.00001000000001
+.000001000000001
+.0000001000000001
+.00000001000000001
+.000000001000000001
+.0000000001000000001
+.00000000001000000001
+.000000000001000000001
+.0000000000001000000001
+.00000000000001000000001
+.000000000000001000000001
+.0000000000000001000000001
+1000.0000001
+100.00000001
+10.000000001
+1.0000000001
+.10000000001
+.010000000001
+.0010000000001
+.00010000000001
+.000010000000001
+.0000010000000001
+.00000010000000001
+.000000010000000001
+.0000000010000000001
+.00000000010000000001
+.000000000010000000001
+.0000000000010000000001
+.00000000000010000000001
+.000000000000010000000001
+.0000000000000010000000001
+.00000000000000010000000001
+1000.00000001
+100.000000001
+10.0000000001
+1.00000000001
+.100000000001
+.0100000000001
+.00100000000001
+.000100000000001
+.0000100000000001
+.00000100000000001
+.000000100000000001
+.0000000100000000001
+.00000000100000000001
+.000000000100000000001
+.0000000000100000000001
+.00000000000100000000001
+.000000000000100000000001
+.0000000000000100000000001
+.00000000000000100000000001
+.000000000000000100000000001
+1000.000000001
+100.0000000001
+10.00000000001
+1.000000000001
+.1000000000001
+.01000000000001
+.001000000000001
+.0001000000000001
+.00001000000000001
+.000001000000000001
+.0000001000000000001
+.00000001000000000001
+.000000001000000000001
+.0000000001000000000001
+.00000000001000000000001
+.000000000001000000000001
+.0000000000001000000000001
+.00000000000001000000000001
+.000000000000001000000000001
+.0000000000000001000000000001
+1000.0000000001
+100.00000000001
+10.000000000001
+1.0000000000001
+.10000000000001
+.010000000000001
+.0010000000000001
+.00010000000000001
+.000010000000000001
+.0000010000000000001
+.00000010000000000001
+.000000010000000000001
+.0000000010000000000001
+.00000000010000000000001
+.000000000010000000000001
+.0000000000010000000000001
+.00000000000010000000000001
+.000000000000010000000000001
+.0000000000000010000000000001
+.00000000000000010000000000001
+10000
+1000.0
+100.00
+10.000
+1.0000
+.10000
+.010000
+.0010000
+.00010000
+.000010000
+.0000010000
+.00000010000
+.000000010000
+.0000000010000
+.00000000010000
+.000000000010000
+.0000000000010000
+.00000000000010000
+.000000000000010000
+.0000000000000010000
+10000.1
+1000.01
+100.001
+10.0001
+1.00001
+.100001
+.0100001
+.00100001
+.000100001
+.0000100001
+.00000100001
+.000000100001
+.0000000100001
+.00000000100001
+.000000000100001
+.0000000000100001
+.00000000000100001
+.000000000000100001
+.0000000000000100001
+.00000000000000100001
+10000.01
+1000.001
+100.0001
+10.00001
+1.000001
+.1000001
+.01000001
+.001000001
+.0001000001
+.00001000001
+.000001000001
+.0000001000001
+.00000001000001
+.000000001000001
+.0000000001000001
+.00000000001000001
+.000000000001000001
+.0000000000001000001
+.00000000000001000001
+.000000000000001000001
+10000.001
+1000.0001
+100.00001
+10.000001
+1.0000001
+.10000001
+.010000001
+.0010000001
+.00010000001
+.000010000001
+.0000010000001
+.00000010000001
+.000000010000001
+.0000000010000001
+.00000000010000001
+.000000000010000001
+.0000000000010000001
+.00000000000010000001
+.000000000000010000001
+.0000000000000010000001
+10000.0001
+1000.00001
+100.000001
+10.0000001
+1.00000001
+.100000001
+.0100000001
+.00100000001
+.000100000001
+.0000100000001
+.00000100000001
+.000000100000001
+.0000000100000001
+.00000000100000001
+.000000000100000001
+.0000000000100000001
+.00000000000100000001
+.000000000000100000001
+.0000000000000100000001
+.00000000000000100000001
+10000.00001
+1000.000001
+100.0000001
+10.00000001
+1.000000001
+.1000000001
+.01000000001
+.001000000001
+.0001000000001
+.00001000000001
+.000001000000001
+.0000001000000001
+.00000001000000001
+.000000001000000001
+.0000000001000000001
+.00000000001000000001
+.000000000001000000001
+.0000000000001000000001
+.00000000000001000000001
+.000000000000001000000001
+10000.000001
+1000.0000001
+100.00000001
+10.000000001
+1.0000000001
+.10000000001
+.010000000001
+.0010000000001
+.00010000000001
+.000010000000001
+.0000010000000001
+.00000010000000001
+.000000010000000001
+.0000000010000000001
+.00000000010000000001
+.000000000010000000001
+.0000000000010000000001
+.00000000000010000000001
+.000000000000010000000001
+.0000000000000010000000001
+10000.0000001
+1000.00000001
+100.000000001
+10.0000000001
+1.00000000001
+.100000000001
+.0100000000001
+.00100000000001
+.000100000000001
+.0000100000000001
+.00000100000000001
+.000000100000000001
+.0000000100000000001
+.00000000100000000001
+.000000000100000000001
+.0000000000100000000001
+.00000000000100000000001
+.000000000000100000000001
+.0000000000000100000000001
+.00000000000000100000000001
+10000.00000001
+1000.000000001
+100.0000000001
+10.00000000001
+1.000000000001
+.1000000000001
+.01000000000001
+.001000000000001
+.0001000000000001
+.00001000000000001
+.000001000000000001
+.0000001000000000001
+.00000001000000000001
+.000000001000000000001
+.0000000001000000000001
+.00000000001000000000001
+.000000000001000000000001
+.0000000000001000000000001
+.00000000000001000000000001
+.000000000000001000000000001
+10000.000000001
+1000.0000000001
+100.00000000001
+10.000000000001
+1.0000000000001
+.10000000000001
+.010000000000001
+.0010000000000001
+.00010000000000001
+.000010000000000001
+.0000010000000000001
+.00000010000000000001
+.000000010000000000001
+.0000000010000000000001
+.00000000010000000000001
+.000000000010000000000001
+.0000000000010000000000001
+.00000000000010000000000001
+.000000000000010000000000001
+.0000000000000010000000000001
+10000.0000000001
+1000.00000000001
+100.000000000001
+10.0000000000001
+1.00000000000001
+.100000000000001
+.0100000000000001
+.00100000000000001
+.000100000000000001
+.0000100000000000001
+.00000100000000000001
+.000000100000000000001
+.0000000100000000000001
+.00000000100000000000001
+.000000000100000000000001
+.0000000000100000000000001
+.00000000000100000000000001
+.000000000000100000000000001
+.0000000000000100000000000001
+.00000000000000100000000000001
+100000
+10000.0
+1000.00
+100.000
+10.0000
+1.00000
+.100000
+.0100000
+.00100000
+.000100000
+.0000100000
+.00000100000
+.000000100000
+.0000000100000
+.00000000100000
+.000000000100000
+.0000000000100000
+.00000000000100000
+.000000000000100000
+.0000000000000100000
+100000.1
+10000.01
+1000.001
+100.0001
+10.00001
+1.000001
+.1000001
+.01000001
+.001000001
+.0001000001
+.00001000001
+.000001000001
+.0000001000001
+.00000001000001
+.000000001000001
+.0000000001000001
+.00000000001000001
+.000000000001000001
+.0000000000001000001
+.00000000000001000001
+100000.01
+10000.001
+1000.0001
+100.00001
+10.000001
+1.0000001
+.10000001
+.010000001
+.0010000001
+.00010000001
+.000010000001
+.0000010000001
+.00000010000001
+.000000010000001
+.0000000010000001
+.00000000010000001
+.000000000010000001
+.0000000000010000001
+.00000000000010000001
+.000000000000010000001
+100000.001
+10000.0001
+1000.00001
+100.000001
+10.0000001
+1.00000001
+.100000001
+.0100000001
+.00100000001
+.000100000001
+.0000100000001
+.00000100000001
+.000000100000001
+.0000000100000001
+.00000000100000001
+.000000000100000001
+.0000000000100000001
+.00000000000100000001
+.000000000000100000001
+.0000000000000100000001
+100000.0001
+10000.00001
+1000.000001
+100.0000001
+10.00000001
+1.000000001
+.1000000001
+.01000000001
+.001000000001
+.0001000000001
+.00001000000001
+.000001000000001
+.0000001000000001
+.00000001000000001
+.000000001000000001
+.0000000001000000001
+.00000000001000000001
+.000000000001000000001
+.0000000000001000000001
+.00000000000001000000001
+100000.00001
+10000.000001
+1000.0000001
+100.00000001
+10.000000001
+1.0000000001
+.10000000001
+.010000000001
+.0010000000001
+.00010000000001
+.000010000000001
+.0000010000000001
+.00000010000000001
+.000000010000000001
+.0000000010000000001
+.00000000010000000001
+.000000000010000000001
+.0000000000010000000001
+.00000000000010000000001
+.000000000000010000000001
+100000.000001
+10000.0000001
+1000.00000001
+100.000000001
+10.0000000001
+1.00000000001
+.100000000001
+.0100000000001
+.00100000000001
+.000100000000001
+.0000100000000001
+.00000100000000001
+.000000100000000001
+.0000000100000000001
+.00000000100000000001
+.000000000100000000001
+.0000000000100000000001
+.00000000000100000000001
+.000000000000100000000001
+.0000000000000100000000001
+100000.0000001
+10000.00000001
+1000.000000001
+100.0000000001
+10.00000000001
+1.000000000001
+.1000000000001
+.01000000000001
+.001000000000001
+.0001000000000001
+.00001000000000001
+.000001000000000001
+.0000001000000000001
+.00000001000000000001
+.000000001000000000001
+.0000000001000000000001
+.00000000001000000000001
+.000000000001000000000001
+.0000000000001000000000001
+.00000000000001000000000001
+100000.00000001
+10000.000000001
+1000.0000000001
+100.00000000001
+10.000000000001
+1.0000000000001
+.10000000000001
+.010000000000001
+.0010000000000001
+.00010000000000001
+.000010000000000001
+.0000010000000000001
+.00000010000000000001
+.000000010000000000001
+.0000000010000000000001
+.00000000010000000000001
+.000000000010000000000001
+.0000000000010000000000001
+.00000000000010000000000001
+.000000000000010000000000001
+100000.000000001
+10000.0000000001
+1000.00000000001
+100.000000000001
+10.0000000000001
+1.00000000000001
+.100000000000001
+.0100000000000001
+.00100000000000001
+.000100000000000001
+.0000100000000000001
+.00000100000000000001
+.000000100000000000001
+.0000000100000000000001
+.00000000100000000000001
+.000000000100000000000001
+.0000000000100000000000001
+.00000000000100000000000001
+.000000000000100000000000001
+.0000000000000100000000000001
+100000.0000000001
+10000.00000000001
+1000.000000000001
+100.0000000000001
+10.00000000000001
+1.000000000000001
+.1000000000000001
+.01000000000000001
+.001000000000000001
+.0001000000000000001
+.00001000000000000001
+.000001000000000000001
+.0000001000000000000001
+.00000001000000000000001
+.000000001000000000000001
+.0000000001000000000000001
+.00000000001000000000000001
+.000000000001000000000000001
+.0000000000001000000000000001
+.00000000000001000000000000001
+1000000
+100000.0
+10000.00
+1000.000
+100.0000
+10.00000
+1.000000
+.1000000
+.01000000
+.001000000
+.0001000000
+.00001000000
+.000001000000
+.0000001000000
+.00000001000000
+.000000001000000
+.0000000001000000
+.00000000001000000
+.000000000001000000
+.0000000000001000000
+1000000.1
+100000.01
+10000.001
+1000.0001
+100.00001
+10.000001
+1.0000001
+.10000001
+.010000001
+.0010000001
+.00010000001
+.000010000001
+.0000010000001
+.00000010000001
+.000000010000001
+.0000000010000001
+.00000000010000001
+.000000000010000001
+.0000000000010000001
+.00000000000010000001
+1000000.01
+100000.001
+10000.0001
+1000.00001
+100.000001
+10.0000001
+1.00000001
+.100000001
+.0100000001
+.00100000001
+.000100000001
+.0000100000001
+.00000100000001
+.000000100000001
+.0000000100000001
+.00000000100000001
+.000000000100000001
+.0000000000100000001
+.00000000000100000001
+.000000000000100000001
+1000000.001
+100000.0001
+10000.00001
+1000.000001
+100.0000001
+10.00000001
+1.000000001
+.1000000001
+.01000000001
+.001000000001
+.0001000000001
+.00001000000001
+.000001000000001
+.0000001000000001
+.00000001000000001
+.000000001000000001
+.0000000001000000001
+.00000000001000000001
+.000000000001000000001
+.0000000000001000000001
+1000000.0001
+100000.00001
+10000.000001
+1000.0000001
+100.00000001
+10.000000001
+1.0000000001
+.10000000001
+.010000000001
+.0010000000001
+.00010000000001
+.000010000000001
+.0000010000000001
+.00000010000000001
+.000000010000000001
+.0000000010000000001
+.00000000010000000001
+.000000000010000000001
+.0000000000010000000001
+.00000000000010000000001
+1000000.00001
+100000.000001
+10000.0000001
+1000.00000001
+100.000000001
+10.0000000001
+1.00000000001
+.100000000001
+.0100000000001
+.00100000000001
+.000100000000001
+.0000100000000001
+.00000100000000001
+.000000100000000001
+.0000000100000000001
+.00000000100000000001
+.000000000100000000001
+.0000000000100000000001
+.00000000000100000000001
+.000000000000100000000001
+1000000.000001
+100000.0000001
+10000.00000001
+1000.000000001
+100.0000000001
+10.00000000001
+1.000000000001
+.1000000000001
+.01000000000001
+.001000000000001
+.0001000000000001
+.00001000000000001
+.000001000000000001
+.0000001000000000001
+.00000001000000000001
+.000000001000000000001
+.0000000001000000000001
+.00000000001000000000001
+.000000000001000000000001
+.0000000000001000000000001
+1000000.0000001
+100000.00000001
+10000.000000001
+1000.0000000001
+100.00000000001
+10.000000000001
+1.0000000000001
+.10000000000001
+.010000000000001
+.0010000000000001
+.00010000000000001
+.000010000000000001
+.0000010000000000001
+.00000010000000000001
+.000000010000000000001
+.0000000010000000000001
+.00000000010000000000001
+.000000000010000000000001
+.0000000000010000000000001
+.00000000000010000000000001
+1000000.00000001
+100000.000000001
+10000.0000000001
+1000.00000000001
+100.000000000001
+10.0000000000001
+1.00000000000001
+.100000000000001
+.0100000000000001
+.00100000000000001
+.000100000000000001
+.0000100000000000001
+.00000100000000000001
+.000000100000000000001
+.0000000100000000000001
+.00000000100000000000001
+.000000000100000000000001
+.0000000000100000000000001
+.00000000000100000000000001
+.000000000000100000000000001
+1000000.000000001
+100000.0000000001
+10000.00000000001
+1000.000000000001
+100.0000000000001
+10.00000000000001
+1.000000000000001
+.1000000000000001
+.01000000000000001
+.001000000000000001
+.0001000000000000001
+.00001000000000000001
+.000001000000000000001
+.0000001000000000000001
+.00000001000000000000001
+.000000001000000000000001
+.0000000001000000000000001
+.00000000001000000000000001
+.000000000001000000000000001
+.0000000000001000000000000001
+1000000.0000000001
+100000.00000000001
+10000.000000000001
+1000.0000000000001
+100.00000000000001
+10.000000000000001
+1.0000000000000001
+.10000000000000001
+.010000000000000001
+.0010000000000000001
+.00010000000000000001
+.000010000000000000001
+.0000010000000000000001
+.00000010000000000000001
+.000000010000000000000001
+.0000000010000000000000001
+.00000000010000000000000001
+.000000000010000000000000001
+.0000000000010000000000000001
+.00000000000010000000000000001
+10000000
+1000000.0
+100000.00
+10000.000
+1000.0000
+100.00000
+10.000000
+1.0000000
+.10000000
+.010000000
+.0010000000
+.00010000000
+.000010000000
+.0000010000000
+.00000010000000
+.000000010000000
+.0000000010000000
+.00000000010000000
+.000000000010000000
+.0000000000010000000
+10000000.1
+1000000.01
+100000.001
+10000.0001
+1000.00001
+100.000001
+10.0000001
+1.00000001
+.100000001
+.0100000001
+.00100000001
+.000100000001
+.0000100000001
+.00000100000001
+.000000100000001
+.0000000100000001
+.00000000100000001
+.000000000100000001
+.0000000000100000001
+.00000000000100000001
+10000000.01
+1000000.001
+100000.0001
+10000.00001
+1000.000001
+100.0000001
+10.00000001
+1.000000001
+.1000000001
+.01000000001
+.001000000001
+.0001000000001
+.00001000000001
+.000001000000001
+.0000001000000001
+.00000001000000001
+.000000001000000001
+.0000000001000000001
+.00000000001000000001
+.000000000001000000001
+10000000.001
+1000000.0001
+100000.00001
+10000.000001
+1000.0000001
+100.00000001
+10.000000001
+1.0000000001
+.10000000001
+.010000000001
+.0010000000001
+.00010000000001
+.000010000000001
+.0000010000000001
+.00000010000000001
+.000000010000000001
+.0000000010000000001
+.00000000010000000001
+.000000000010000000001
+.0000000000010000000001
+10000000.0001
+1000000.00001
+100000.000001
+10000.0000001
+1000.00000001
+100.000000001
+10.0000000001
+1.00000000001
+.100000000001
+.0100000000001
+.00100000000001
+.000100000000001
+.0000100000000001
+.00000100000000001
+.000000100000000001
+.0000000100000000001
+.00000000100000000001
+.000000000100000000001
+.0000000000100000000001
+.00000000000100000000001
+10000000.00001
+1000000.000001
+100000.0000001
+10000.00000001
+1000.000000001
+100.0000000001
+10.00000000001
+1.000000000001
+.1000000000001
+.01000000000001
+.001000000000001
+.0001000000000001
+.00001000000000001
+.000001000000000001
+.0000001000000000001
+.00000001000000000001
+.000000001000000000001
+.0000000001000000000001
+.00000000001000000000001
+.000000000001000000000001
+10000000.000001
+1000000.0000001
+100000.00000001
+10000.000000001
+1000.0000000001
+100.00000000001
+10.000000000001
+1.0000000000001
+.10000000000001
+.010000000000001
+.0010000000000001
+.00010000000000001
+.000010000000000001
+.0000010000000000001
+.00000010000000000001
+.000000010000000000001
+.0000000010000000000001
+.00000000010000000000001
+.000000000010000000000001
+.0000000000010000000000001
+10000000.0000001
+1000000.00000001
+100000.000000001
+10000.0000000001
+1000.00000000001
+100.000000000001
+10.0000000000001
+1.00000000000001
+.100000000000001
+.0100000000000001
+.00100000000000001
+.000100000000000001
+.0000100000000000001
+.00000100000000000001
+.000000100000000000001
+.0000000100000000000001
+.00000000100000000000001
+.000000000100000000000001
+.0000000000100000000000001
+.00000000000100000000000001
+10000000.00000001
+1000000.000000001
+100000.0000000001
+10000.00000000001
+1000.000000000001
+100.0000000000001
+10.00000000000001
+1.000000000000001
+.1000000000000001
+.01000000000000001
+.001000000000000001
+.0001000000000000001
+.00001000000000000001
+.000001000000000000001
+.0000001000000000000001
+.00000001000000000000001
+.000000001000000000000001
+.0000000001000000000000001
+.00000000001000000000000001
+.000000000001000000000000001
+10000000.000000001
+1000000.0000000001
+100000.00000000001
+10000.000000000001
+1000.0000000000001
+100.00000000000001
+10.000000000000001
+1.0000000000000001
+.10000000000000001
+.010000000000000001
+.0010000000000000001
+.00010000000000000001
+.000010000000000000001
+.0000010000000000000001
+.00000010000000000000001
+.000000010000000000000001
+.0000000010000000000000001
+.00000000010000000000000001
+.000000000010000000000000001
+.0000000000010000000000000001
+10000000.0000000001
+1000000.00000000001
+100000.000000000001
+10000.0000000000001
+1000.00000000000001
+100.000000000000001
+10.0000000000000001
+1.00000000000000001
+.100000000000000001
+.0100000000000000001
+.00100000000000000001
+.000100000000000000001
+.0000100000000000000001
+.00000100000000000000001
+.000000100000000000000001
+.0000000100000000000000001
+.00000000100000000000000001
+.000000000100000000000000001
+.0000000000100000000000000001
+.00000000000100000000000000001
+100000000
+10000000.0
+1000000.00
+100000.000
+10000.0000
+1000.00000
+100.000000
+10.0000000
+1.00000000
+.100000000
+.0100000000
+.00100000000
+.000100000000
+.0000100000000
+.00000100000000
+.000000100000000
+.0000000100000000
+.00000000100000000
+.000000000100000000
+.0000000000100000000
+100000000.1
+10000000.01
+1000000.001
+100000.0001
+10000.00001
+1000.000001
+100.0000001
+10.00000001
+1.000000001
+.1000000001
+.01000000001
+.001000000001
+.0001000000001
+.00001000000001
+.000001000000001
+.0000001000000001
+.00000001000000001
+.000000001000000001
+.0000000001000000001
+.00000000001000000001
+100000000.01
+10000000.001
+1000000.0001
+100000.00001
+10000.000001
+1000.0000001
+100.00000001
+10.000000001
+1.0000000001
+.10000000001
+.010000000001
+.0010000000001
+.00010000000001
+.000010000000001
+.0000010000000001
+.00000010000000001
+.000000010000000001
+.0000000010000000001
+.00000000010000000001
+.000000000010000000001
+100000000.001
+10000000.0001
+1000000.00001
+100000.000001
+10000.0000001
+1000.00000001
+100.000000001
+10.0000000001
+1.00000000001
+.100000000001
+.0100000000001
+.00100000000001
+.000100000000001
+.0000100000000001
+.00000100000000001
+.000000100000000001
+.0000000100000000001
+.00000000100000000001
+.000000000100000000001
+.0000000000100000000001
+100000000.0001
+10000000.00001
+1000000.000001
+100000.0000001
+10000.00000001
+1000.000000001
+100.0000000001
+10.00000000001
+1.000000000001
+.1000000000001
+.01000000000001
+.001000000000001
+.0001000000000001
+.00001000000000001
+.000001000000000001
+.0000001000000000001
+.00000001000000000001
+.000000001000000000001
+.0000000001000000000001
+.00000000001000000000001
+100000000.00001
+10000000.000001
+1000000.0000001
+100000.00000001
+10000.000000001
+1000.0000000001
+100.00000000001
+10.000000000001
+1.0000000000001
+.10000000000001
+.010000000000001
+.0010000000000001
+.00010000000000001
+.000010000000000001
+.0000010000000000001
+.00000010000000000001
+.000000010000000000001
+.0000000010000000000001
+.00000000010000000000001
+.000000000010000000000001
+100000000.000001
+10000000.0000001
+1000000.00000001
+100000.000000001
+10000.0000000001
+1000.00000000001
+100.000000000001
+10.0000000000001
+1.00000000000001
+.100000000000001
+.0100000000000001
+.00100000000000001
+.000100000000000001
+.0000100000000000001
+.00000100000000000001
+.000000100000000000001
+.0000000100000000000001
+.00000000100000000000001
+.000000000100000000000001
+.0000000000100000000000001
+100000000.0000001
+10000000.00000001
+1000000.000000001
+100000.0000000001
+10000.00000000001
+1000.000000000001
+100.0000000000001
+10.00000000000001
+1.000000000000001
+.1000000000000001
+.01000000000000001
+.001000000000000001
+.0001000000000000001
+.00001000000000000001
+.000001000000000000001
+.0000001000000000000001
+.00000001000000000000001
+.000000001000000000000001
+.0000000001000000000000001
+.00000000001000000000000001
+100000000.00000001
+10000000.000000001
+1000000.0000000001
+100000.00000000001
+10000.000000000001
+1000.0000000000001
+100.00000000000001
+10.000000000000001
+1.0000000000000001
+.10000000000000001
+.010000000000000001
+.0010000000000000001
+.00010000000000000001
+.000010000000000000001
+.0000010000000000000001
+.00000010000000000000001
+.000000010000000000000001
+.0000000010000000000000001
+.00000000010000000000000001
+.000000000010000000000000001
+100000000.000000001
+10000000.0000000001
+1000000.00000000001
+100000.000000000001
+10000.0000000000001
+1000.00000000000001
+100.000000000000001
+10.0000000000000001
+1.00000000000000001
+.100000000000000001
+.0100000000000000001
+.00100000000000000001
+.000100000000000000001
+.0000100000000000000001
+.00000100000000000000001
+.000000100000000000000001
+.0000000100000000000000001
+.00000000100000000000000001
+.000000000100000000000000001
+.0000000000100000000000000001
+100000000.0000000001
+10000000.00000000001
+1000000.000000000001
+100000.0000000000001
+10000.00000000000001
+1000.000000000000001
+100.0000000000000001
+10.00000000000000001
+1.000000000000000001
+.1000000000000000001
+.01000000000000000001
+.001000000000000000001
+.0001000000000000000001
+.00001000000000000000001
+.000001000000000000000001
+.0000001000000000000000001
+.00000001000000000000000001
+.000000001000000000000000001
+.0000000001000000000000000001
+.00000000001000000000000000001
+1000000000
+100000000.0
+10000000.00
+1000000.000
+100000.0000
+10000.00000
+1000.000000
+100.0000000
+10.00000000
+1.000000000
+.1000000000
+.01000000000
+.001000000000
+.0001000000000
+.00001000000000
+.000001000000000
+.0000001000000000
+.00000001000000000
+.000000001000000000
+.0000000001000000000
+1000000000.1
+100000000.01
+10000000.001
+1000000.0001
+100000.00001
+10000.000001
+1000.0000001
+100.00000001
+10.000000001
+1.0000000001
+.10000000001
+.010000000001
+.0010000000001
+.00010000000001
+.000010000000001
+.0000010000000001
+.00000010000000001
+.000000010000000001
+.0000000010000000001
+.00000000010000000001
+1000000000.01
+100000000.001
+10000000.0001
+1000000.00001
+100000.000001
+10000.0000001
+1000.00000001
+100.000000001
+10.0000000001
+1.00000000001
+.100000000001
+.0100000000001
+.00100000000001
+.000100000000001
+.0000100000000001
+.00000100000000001
+.000000100000000001
+.0000000100000000001
+.00000000100000000001
+.000000000100000000001
+1000000000.001
+100000000.0001
+10000000.00001
+1000000.000001
+100000.0000001
+10000.00000001
+1000.000000001
+100.0000000001
+10.00000000001
+1.000000000001
+.1000000000001
+.01000000000001
+.001000000000001
+.0001000000000001
+.00001000000000001
+.000001000000000001
+.0000001000000000001
+.00000001000000000001
+.000000001000000000001
+.0000000001000000000001
+1000000000.0001
+100000000.00001
+10000000.000001
+1000000.0000001
+100000.00000001
+10000.000000001
+1000.0000000001
+100.00000000001
+10.000000000001
+1.0000000000001
+.10000000000001
+.010000000000001
+.0010000000000001
+.00010000000000001
+.000010000000000001
+.0000010000000000001
+.00000010000000000001
+.000000010000000000001
+.0000000010000000000001
+.00000000010000000000001
+1000000000.00001
+100000000.000001
+10000000.0000001
+1000000.00000001
+100000.000000001
+10000.0000000001
+1000.00000000001
+100.000000000001
+10.0000000000001
+1.00000000000001
+.100000000000001
+.0100000000000001
+.00100000000000001
+.000100000000000001
+.0000100000000000001
+.00000100000000000001
+.000000100000000000001
+.0000000100000000000001
+.00000000100000000000001
+.000000000100000000000001
+1000000000.000001
+100000000.0000001
+10000000.00000001
+1000000.000000001
+100000.0000000001
+10000.00000000001
+1000.000000000001
+100.0000000000001
+10.00000000000001
+1.000000000000001
+.1000000000000001
+.01000000000000001
+.001000000000000001
+.0001000000000000001
+.00001000000000000001
+.000001000000000000001
+.0000001000000000000001
+.00000001000000000000001
+.000000001000000000000001
+.0000000001000000000000001
+1000000000.0000001
+100000000.00000001
+10000000.000000001
+1000000.0000000001
+100000.00000000001
+10000.000000000001
+1000.0000000000001
+100.00000000000001
+10.000000000000001
+1.0000000000000001
+.10000000000000001
+.010000000000000001
+.0010000000000000001
+.00010000000000000001
+.000010000000000000001
+.0000010000000000000001
+.00000010000000000000001
+.000000010000000000000001
+.0000000010000000000000001
+.00000000010000000000000001
+1000000000.00000001
+100000000.000000001
+10000000.0000000001
+1000000.00000000001
+100000.000000000001
+10000.0000000000001
+1000.00000000000001
+100.000000000000001
+10.0000000000000001
+1.00000000000000001
+.100000000000000001
+.0100000000000000001
+.00100000000000000001
+.000100000000000000001
+.0000100000000000000001
+.00000100000000000000001
+.000000100000000000000001
+.0000000100000000000000001
+.00000000100000000000000001
+.000000000100000000000000001
+1000000000.000000001
+100000000.0000000001
+10000000.00000000001
+1000000.000000000001
+100000.0000000000001
+10000.00000000000001
+1000.000000000000001
+100.0000000000000001
+10.00000000000000001
+1.000000000000000001
+.1000000000000000001
+.01000000000000000001
+.001000000000000000001
+.0001000000000000000001
+.00001000000000000000001
+.000001000000000000000001
+.0000001000000000000000001
+.00000001000000000000000001
+.000000001000000000000000001
+.0000000001000000000000000001
+1000000000.0000000001
+100000000.00000000001
+10000000.000000000001
+1000000.0000000000001
+100000.00000000000001
+10000.000000000000001
+1000.0000000000000001
+100.00000000000000001
+10.000000000000000001
+1.0000000000000000001
+.10000000000000000001
+.010000000000000000001
+.0010000000000000000001
+.00010000000000000000001
+.000010000000000000000001
+.0000010000000000000000001
+.00000010000000000000000001
+.000000010000000000000000001
+.0000000010000000000000000001
+.00000000010000000000000000001
+10000000000
+1000000000.0
+100000000.00
+10000000.000
+1000000.0000
+100000.00000
+10000.000000
+1000.0000000
+100.00000000
+10.000000000
+1.0000000000
+.10000000000
+.010000000000
+.0010000000000
+.00010000000000
+.000010000000000
+.0000010000000000
+.00000010000000000
+.000000010000000000
+.0000000010000000000
+10000000000.1
+1000000000.01
+100000000.001
+10000000.0001
+1000000.00001
+100000.000001
+10000.0000001
+1000.00000001
+100.000000001
+10.0000000001
+1.00000000001
+.100000000001
+.0100000000001
+.00100000000001
+.000100000000001
+.0000100000000001
+.00000100000000001
+.000000100000000001
+.0000000100000000001
+.00000000100000000001
+10000000000.01
+1000000000.001
+100000000.0001
+10000000.00001
+1000000.000001
+100000.0000001
+10000.00000001
+1000.000000001
+100.0000000001
+10.00000000001
+1.000000000001
+.1000000000001
+.01000000000001
+.001000000000001
+.0001000000000001
+.00001000000000001
+.000001000000000001
+.0000001000000000001
+.00000001000000000001
+.000000001000000000001
+10000000000.001
+1000000000.0001
+100000000.00001
+10000000.000001
+1000000.0000001
+100000.00000001
+10000.000000001
+1000.0000000001
+100.00000000001
+10.000000000001
+1.0000000000001
+.10000000000001
+.010000000000001
+.0010000000000001
+.00010000000000001
+.000010000000000001
+.0000010000000000001
+.00000010000000000001
+.000000010000000000001
+.0000000010000000000001
+10000000000.0001
+1000000000.00001
+100000000.000001
+10000000.0000001
+1000000.00000001
+100000.000000001
+10000.0000000001
+1000.00000000001
+100.000000000001
+10.0000000000001
+1.00000000000001
+.100000000000001
+.0100000000000001
+.00100000000000001
+.000100000000000001
+.0000100000000000001
+.00000100000000000001
+.000000100000000000001
+.0000000100000000000001
+.00000000100000000000001
+10000000000.00001
+1000000000.000001
+100000000.0000001
+10000000.00000001
+1000000.000000001
+100000.0000000001
+10000.00000000001
+1000.000000000001
+100.0000000000001
+10.00000000000001
+1.000000000000001
+.1000000000000001
+.01000000000000001
+.001000000000000001
+.0001000000000000001
+.00001000000000000001
+.000001000000000000001
+.0000001000000000000001
+.00000001000000000000001
+.000000001000000000000001
+10000000000.000001
+1000000000.0000001
+100000000.00000001
+10000000.000000001
+1000000.0000000001
+100000.00000000001
+10000.000000000001
+1000.0000000000001
+100.00000000000001
+10.000000000000001
+1.0000000000000001
+.10000000000000001
+.010000000000000001
+.0010000000000000001
+.00010000000000000001
+.000010000000000000001
+.0000010000000000000001
+.00000010000000000000001
+.000000010000000000000001
+.0000000010000000000000001
+10000000000.0000001
+1000000000.00000001
+100000000.000000001
+10000000.0000000001
+1000000.00000000001
+100000.000000000001
+10000.0000000000001
+1000.00000000000001
+100.000000000000001
+10.0000000000000001
+1.00000000000000001
+.100000000000000001
+.0100000000000000001
+.00100000000000000001
+.000100000000000000001
+.0000100000000000000001
+.00000100000000000000001
+.000000100000000000000001
+.0000000100000000000000001
+.00000000100000000000000001
+10000000000.00000001
+1000000000.000000001
+100000000.0000000001
+10000000.00000000001
+1000000.000000000001
+100000.0000000000001
+10000.00000000000001
+1000.000000000000001
+100.0000000000000001
+10.00000000000000001
+1.000000000000000001
+.1000000000000000001
+.01000000000000000001
+.001000000000000000001
+.0001000000000000000001
+.00001000000000000000001
+.000001000000000000000001
+.0000001000000000000000001
+.00000001000000000000000001
+.000000001000000000000000001
+10000000000.000000001
+1000000000.0000000001
+100000000.00000000001
+10000000.000000000001
+1000000.0000000000001
+100000.00000000000001
+10000.000000000000001
+1000.0000000000000001
+100.00000000000000001
+10.000000000000000001
+1.0000000000000000001
+.10000000000000000001
+.010000000000000000001
+.0010000000000000000001
+.00010000000000000000001
+.000010000000000000000001
+.0000010000000000000000001
+.00000010000000000000000001
+.000000010000000000000000001
+.0000000010000000000000000001
+10000000000.0000000001
+1000000000.00000000001
+100000000.000000000001
+10000000.0000000000001
+1000000.00000000000001
+100000.000000000000001
+10000.0000000000000001
+1000.00000000000000001
+100.000000000000000001
+10.0000000000000000001
+1.00000000000000000001
+.100000000000000000001
+.0100000000000000000001
+.00100000000000000000001
+.000100000000000000000001
+.0000100000000000000000001
+.00000100000000000000000001
+.000000100000000000000000001
+.0000000100000000000000000001
+.00000000100000000000000000001
diff --git a/tests/bc/sine.txt b/tests/bc/sine.txt
new file mode 100644
index 000000000000..d3a547bcd796
--- /dev/null
+++ b/tests/bc/sine.txt
@@ -0,0 +1,207 @@
+scale = 25
+p = 4 * a(1)
+scale = 20
+s(0)
+s(0.5)
+s(1)
+s(2)
+s(3)
+s(-0.5)
+s(-1)
+s(-2)
+s(-3)
+s(p / 7)
+s(-p / 7)
+s(p / 4)
+s(-p / 4)
+s(p / 3)
+s(-p / 3)
+s(p / 2)
+s(-p / 2)
+s(3 * p / 4)
+s(3 * -p / 4)
+s(p)
+s(-p)
+s(3 * p / 2)
+s(3 * -p / 2)
+s(7 * p / 4)
+s(7 * -p / 4)
+s(13 * p / 4)
+s(13 * -p / 4)
+s(2 * p)
+s(2 * -p)
+s(131231)
+s(-131231)
+s(69.1967507777)
+s(10828)
+s(-16248506.847013148)
+s(2050281000)
+s(8224939)
+s(11334231.1154662464)
+s(-4109411249.2986954846)
+s(-2395915402.13984)
+s(-2795874313)
+s(-2262647256)
+s(3323158182.1239222084)
+s(99901384)
+s(-4202726050.2780080957)
+s(2870000621.3228830588)
+s(-4230239450.981045150)
+s(-1517506941.2678857223)
+s(4004582176)
+s(-4193724543.1108508063)
+s(-3432511261)
+s(1804484812)
+s(3229084127)
+s(-3565317246.583937244)
+s(3503281621)
+s(-3469146313.1766891244)
+s(-2257308049.307721068)
+s(-3978441809)
+s(3431564304.3752537)
+s(1249644440.2464914559)
+s(2395558891.1188487974)
+s(-2607820706.4079280116)
+s(1208310007)
+s(-3758597557.863203175)
+s(1186920672)
+s(-3988103872)
+s(-4280635328.4194857577)
+s(1051748072)
+s(-1884006279)
+s(-1046568719.2698663389)
+s(2482991410)
+s(-2106101268.1154045959)
+s(3530359346.77217900)
+s(-3373362543)
+s(2601598062)
+s(2987020862)
+s(-12033356.2057140648)
+s(-3721760707)
+s(2842387705.4145759704)
+s(3515832681.1808393297)
+s(-3658522034.16149)
+s(3963658030.2860423992)
+s(2977802215.597946655)
+s(-4271392570.4091498761)
+s(2378692585)
+s(-3545193743.629374782)
+s(-1762458738)
+s(-1174277828.4264040126)
+s(-1724994857)
+s(2802750230.1783499408)
+s(-3068133550)
+s(3324811474.621822235)
+s(2873024984)
+s(-3509056632.3888206298)
+s(1772903162.647192879)
+s(2836543102)
+s(4117858580.186)
+s(2988632386.4063754522)
+s(-4256784971.1770067447)
+s(2280820447)
+s(-2865200306)
+s(-3329592486)
+s(519126268)
+s(-2452430452)
+s(-2693220186.62104082)
+s(-3796811992.14485798)
+s(3619792326)
+s(2697791049.3038381550)
+s(3751267834.2808166557)
+s(-3761719074)
+s(-3824087631)
+s(2119301150)
+s(1398148974)
+s(-3386564819.1351816969)
+s(-3171483098)
+s(3688944941.3273318162)
+s(3060521119)
+s(-3527110404)
+s(3699631193)
+s(3872838898)
+s(3880350192)
+s(-4109411249.2986954846)
+s(-2395915402.13984)
+s(-2795874313)
+s(-2262647256)
+s(3323158182.1239222084)
+s(99901384)
+s(-4202726050.2780080957)
+s(2870000621.3228830588)
+s(-4230239450.981045150)
+s(-1517506941.2678857223)
+s(4004582176)
+s(-4193724543.1108508063)
+s(-3432511261)
+s(1804484812)
+s(3229084127)
+s(-3565317246.583937244)
+s(3503281621)
+s(-3469146313.1766891244)
+s(-2257308049.307721068)
+s(-3978441809)
+s(3431564304.3752537)
+s(1249644440.2464914559)
+s(2395558891.1188487974)
+s(-2607820706.4079280116)
+s(1208310007)
+s(-3758597557.863203175)
+s(1186920672)
+s(-3988103872)
+s(-4280635328.4194857577)
+s(1051748072)
+s(-1884006279)
+s(-1046568719.2698663389)
+s(2482991410)
+s(-2106101268.1154045959)
+s(3530359346.77217900)
+s(-3373362543)
+s(2601598062)
+s(2576349783.2446436039)
+s(2987020862)
+s(-12033356.2057140648)
+s(-3721760707)
+s(2842387705.4145759704)
+s(3515832681.1808393297)
+s(-3658522034.16149)
+s(3963658030.2860423992)
+s(2977802215.597946655)
+s(-4271392570.4091498761)
+s(2378692585)
+s(-3545193743.629374782)
+s(-1762458738)
+s(-1174277828.4264040126)
+s(-1724994857)
+s(2802750230.1783499408)
+s(-3068133550)
+s(3324811474.621822235)
+s(2873024984)
+s(-3509056632.3888206298)
+s(1772903162.647192879)
+s(2836543102)
+s(4117858580.186)
+s(2988632386.4063754522)
+s(-4256784971.1770067447)
+s(2280820447)
+s(-2865200306)
+s(-3329592486)
+s(519126268)
+s(-2452430452)
+s(-2693220186.62104082)
+s(-3796811992.14485798)
+s(3619792326)
+s(2697791049.3038381550)
+s(3751267834.2808166557)
+s(-3761719074)
+s(-3824087631)
+s(2119301150)
+s(1398148974)
+s(-3386564819.1351816969)
+s(-3171483098)
+s(3688944941.3273318162)
+s(3060521119)
+s(-3527110404)
+s(3699631193)
+s(3872838898)
+s(3880350192)
diff --git a/tests/bc/sine_results.txt b/tests/bc/sine_results.txt
new file mode 100644
index 000000000000..7a4a1ab0cbc4
--- /dev/null
+++ b/tests/bc/sine_results.txt
@@ -0,0 +1,204 @@
+0
+.47942553860420300027
+.84147098480789650665
+.90929742682568169539
+.14112000805986722210
+-.47942553860420300027
+-.84147098480789650665
+-.90929742682568169539
+-.14112000805986722210
+.43388373911755812047
+-.43388373911755812047
+.70710678118654752439
+-.70710678118654752439
+.86602540378443864676
+-.86602540378443864676
+1.00000000000000000000
+-1.00000000000000000000
+.70710678118654752440
+-.70710678118654752440
+0
+0
+-1.00000000000000000000
+1.00000000000000000000
+-.70710678118654752440
+.70710678118654752440
+-.70710678118654752439
+.70710678118654752439
+0
+0
+.38173640790989719211
+-.38173640790989719211
+.08162149793819434415
+.87714140586973771462
+-.91157035998052051623
+-.69638975047120679880
+-.94806056135672896231
+-.54548669379730874215
+.14605234154783145589
+-.12183062787430962391
+-.89832305526331682409
+-.99513029384033555290
+.76528428398894958149
+.51077956237618482050
+-.75908868040685122962
+-.37015497140201575652
+-.51432535569032144654
+.68890201397514289831
+.88200006249578882510
+-.01188893762444044480
+-.55298206739629427055
+-.39165958853437135625
+.17732674488831117445
+-.09648816960119759281
+.15728984163381104344
+-.31554983227150461370
+-.72225704678824601977
+.96170480789326775287
+-.47636475887571231114
+-.98999375714278585763
+-.06715264746977580303
+-.69464867397161089634
+.58037673122614640119
+-.44244898040675115062
+.04242496278231069061
+.96417934585711006987
+-.54513053517818430563
+-.28604677908958958915
+-.68003854521180919710
+.26597321569379963920
+-.34591048991595943570
+-.17084074152217894535
+-.42880744669595980174
+.36518031021580667844
+-.03514839609475800827
+.93891962312087620513
+-.69421849362562852947
+.15169857474887222961
+-.00226070393499995347
+.96209233301706432156
+-.79937182245558378826
+.99966966326862290520
+.85234799672007656117
+-.20824280061137520443
+-.00761257856348159450
+.10708922858398661064
+-.80233147080821341443
+.26521358383069223461
+-.95173930946495828679
+.66210405748455769256
+.30054820568403786217
+.21640593048970779808
+-.87596287572245980692
+.74627849623707962934
+-.25747200288605259984
+-.14700538617135227740
+-.06294254604551440990
+.67948313824962059899
+.83714389089726798409
+.33805040346429707760
+.80273418514828673749
+.72262501870089953244
+-.77469383027517310713
+-.15575896025754423345
+.22191568853026376075
+.25137052589938954082
+-.80534308288073574163
+-.44963537508211028805
+-.92368907556208259630
+-.80963411623457804531
+-.96822928101198069490
+-.46604999828123759716
+.63275578793565409192
+-.40563425346575205109
+.13095444406203282638
+.96217617474547242151
+-.16256793375739137005
+.71791623784197898982
+-.10713685791219679248
+.50758780541979250307
+-.09795373670371402656
+.14605234154783145589
+-.12183062787430962391
+-.89832305526331682409
+-.99513029384033555290
+.76528428398894958149
+.51077956237618482050
+-.75908868040685122962
+-.37015497140201575652
+-.51432535569032144654
+.68890201397514289831
+.88200006249578882510
+-.01188893762444044480
+-.55298206739629427055
+-.39165958853437135625
+.17732674488831117445
+-.09648816960119759281
+.15728984163381104344
+-.31554983227150461370
+-.72225704678824601977
+.96170480789326775287
+-.47636475887571231114
+-.98999375714278585763
+-.06715264746977580303
+-.69464867397161089634
+.58037673122614640119
+-.44244898040675115062
+.04242496278231069061
+.96417934585711006987
+-.54513053517818430563
+-.28604677908958958915
+-.68003854521180919710
+.26597321569379963920
+-.34591048991595943570
+-.17084074152217894535
+-.42880744669595980174
+.36518031021580667844
+-.03514839609475800827
+.75884554410943292265
+.93891962312087620513
+-.69421849362562852947
+.15169857474887222961
+-.00226070393499995347
+.96209233301706432156
+-.79937182245558378826
+.99966966326862290520
+.85234799672007656117
+-.20824280061137520443
+-.00761257856348159450
+.10708922858398661064
+-.80233147080821341443
+.26521358383069223461
+-.95173930946495828679
+.66210405748455769256
+.30054820568403786217
+.21640593048970779808
+-.87596287572245980692
+.74627849623707962934
+-.25747200288605259984
+-.14700538617135227740
+-.06294254604551440990
+.67948313824962059899
+.83714389089726798409
+.33805040346429707760
+.80273418514828673749
+.72262501870089953244
+-.77469383027517310713
+-.15575896025754423345
+.22191568853026376075
+.25137052589938954082
+-.80534308288073574163
+-.44963537508211028805
+-.92368907556208259630
+-.80963411623457804531
+-.96822928101198069490
+-.46604999828123759716
+.63275578793565409192
+-.40563425346575205109
+.13095444406203282638
+.96217617474547242151
+-.16256793375739137005
+.71791623784197898982
+-.10713685791219679248
+.50758780541979250307
+-.09795373670371402656
diff --git a/tests/bc/sqrt.txt b/tests/bc/sqrt.txt
new file mode 100644
index 000000000000..afd87ff0f6e6
--- /dev/null
+++ b/tests/bc/sqrt.txt
@@ -0,0 +1,18 @@
+scale = 20
+sqrt(0)
+sqrt(2)
+sqrt(4)
+sqrt(9)
+sqrt(16)
+sqrt(25)
+sqrt(121)
+sqrt(48765)
+sqrt(9287356207356)
+sqrt(0.189274385967238956872354)
+sqrt(12389467137496823.134567829387456283946)
+sqrt(.0000000000000000000000000000123)
+sqrt(1)
+scale = 0;
+sqrt(1407)
+sqrt(79101)
+scale = 6; sqrt(88.1247699921300025847737099094480986051698668662822009535526240)
diff --git a/tests/bc/sqrt_results.txt b/tests/bc/sqrt_results.txt
new file mode 100644
index 000000000000..10a4fa95d5a5
--- /dev/null
+++ b/tests/bc/sqrt_results.txt
@@ -0,0 +1,16 @@
+0
+1.41421356237309504880
+2.00000000000000000000
+3.00000000000000000000
+4.00000000000000000000
+5.00000000000000000000
+11.00000000000000000000
+220.82798735667542192643
+3047516.39985021245496456781
+.435056761776252544285578
+111307983.260397019622398608908
+.0000000000000035071355833500363
+1.00000000000000000000
+37
+281
+9.3874794269883757005315658512340070115147163425837869223395574
diff --git a/tests/bc/stdin.txt b/tests/bc/stdin.txt
new file mode 100644
index 000000000000..7ddb905dca47
--- /dev/null
+++ b/tests/bc/stdin.txt
@@ -0,0 +1,15 @@
+#stuff
+# "string in a hash comment"
+# /* comment in a hash comment */
+1 /* c */ + 2
+"String /* with partial comment"
+"String /* with full comment */"
+1 /* Comment with partial "string */ + 2
+2 /* Comment with full "string" */ + 3
+3 /* Comment with a # hash comment */ + 4
+"String with a # hash comment"
+1 + \
+2
+i = 4
+read()
+i *= 5
diff --git a/tests/bc/stdin_results.txt b/tests/bc/stdin_results.txt
new file mode 100644
index 000000000000..89dba6613b67
--- /dev/null
+++ b/tests/bc/stdin_results.txt
@@ -0,0 +1,6 @@
+3
+String /* with partial commentString /* with full comment */3
+5
+7
+String with a # hash comment3
+20
diff --git a/tests/bc/strings.txt b/tests/bc/strings.txt
new file mode 100644
index 000000000000..8de9901d064c
--- /dev/null
+++ b/tests/bc/strings.txt
@@ -0,0 +1,16 @@
+"string"
+"another string"
+"yet
+another
+string"
+"noescapes\n"
+"newline
+"
+print "string"
+print "newline\n"
+
+print "\\\e\n"
+print "\d\n"
+"abc\\
+def
+"
diff --git a/tests/bc/strings_results.txt b/tests/bc/strings_results.txt
new file mode 100644
index 000000000000..7e1646f03872
--- /dev/null
+++ b/tests/bc/strings_results.txt
@@ -0,0 +1,8 @@
+stringanother stringyet
+another
+stringnoescapes\nnewline
+stringnewline
+\\
+\d
+abc\\
+def
diff --git a/tests/bc/subtract.txt b/tests/bc/subtract.txt
new file mode 100644
index 000000000000..e3ea1ced9ec5
--- /dev/null
+++ b/tests/bc/subtract.txt
@@ -0,0 +1,153 @@
+0 - 0
+0 - 1
+1 - 0
+1 - 1
+5 - 2
+2 - 9
+321974 - 12845976238457
+2874519803456710938465 - 384723854
+10000000000000000000000000000000000000000 - 999999999999999999999999999999999999999
+10000000000000000000000000000000000000000 - 9999999999999999999999999999999999999999
+10000000000000000000000000000000000000000 - 999999999999999999999999999999999999999.99999999999999999999999999999999999
+10000000000000000000000000000000000000000 - 9999999999999999999999999999999999999999.9999999999999999999999999999999999
+10000000000000000000000000000000000000000 - 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+10000000000000000000000000000000000000001 - 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000001
+10000000000000000000000000000000000000000.0000000001 - 0.0000000000000000000000000000000000000000000000000000000000000000000000000001
+-2 - 6
+-23784692345 - 182934721309467230894628735496027345
+-224352354962873059862 - -1245723576829456278354960278345
+-3468273598 - -12354243
+-0.92345768293 - -2354768923
+-712384634.123476823 - -24768293376
+-1879234638 - -0.917234869234
+-0.9172438692134 - -0.971284967124
+-0.1283475123465 - -0.937462346
+-124765829346.2837468293562 - -0.923467829346
+-12476829385769 - -1928476259034.8378629356
+-0.38476284395876345 - -94875394587623.2357869324857
+-4674596708467.34754789403674343567 - -48672394852354698.237548629345
+979519669 - 3018100865
+929002449 - 3280677283
+0 - -525898
+3- - -3
+18297034019823741908237410928374.81920734712098347109281029873 - 182907.12809
+182039471029834 - 282039471029834
+282039471029834 - 182039471029834
+182039471029834.2801722893 - 282039471029834
+282039471029834.2801722893 - 182039471029834
+182039471029834.2801722893 - 282039471029834.2838
+282039471029834.2801722893 - 182039471029834.2838
+182039471029834 - 282039471029834.2801722893
+282039471029834 - 182039471029834.2801722893
+182039471029834.8297282893 - 282039471029834.2801722893
+282039471029834.8297282893 - 182039471029834.2801722893
+471029834 - 282039471029834
+471029834 - 182039471029834
+471029834.2801722893 - 282039471029834
+471029834.2801722893 - 182039471029834
+471029834.2801722893 - 282039471029834.2838
+471029834.2801722893 - 182039471029834.2838
+471029834 - 282039471029834.2801722893
+471029834 - 182039471029834.2801722893
+471029834.8297282893 - 282039471029834.2801722893
+471029834.8297282893 - 182039471029834.2801722893
+182039471029834 - 471029834
+282039471029834 - 471029834
+182039471029834.2801722893 - 471029834
+282039471029834.2801722893 - 471029834
+182039471029834.2801722893 - 471029834.2838
+282039471029834.2801722893 - 471029834.2838
+182039471029834 - 471029834.2801722893
+282039471029834 - 471029834.2801722893
+182039471029834.8297282893 - 471029834.2801722893
+282039471029834.8297282893 - 471029834.2801722893
+-182039471029834 - 282039471029834
+-282039471029834 - 182039471029834
+-182039471029834.2801722893 - 282039471029834
+-282039471029834.2801722893 - 182039471029834
+-182039471029834.2801722893 - 282039471029834.2838
+-282039471029834.2801722893 - 182039471029834.2838
+-182039471029834 - 282039471029834.2801722893
+-282039471029834 - 182039471029834.2801722893
+-182039471029834.8297282893 - 282039471029834.2801722893
+-282039471029834.8297282893 - 182039471029834.2801722893
+-471029834 - 282039471029834
+-471029834 - 182039471029834
+-471029834.2801722893 - 282039471029834
+-471029834.2801722893 - 182039471029834
+-471029834.2801722893 - 282039471029834.2838
+-471029834.2801722893 - 182039471029834.2838
+-471029834 - 282039471029834.2801722893
+-471029834 - 182039471029834.2801722893
+-471029834.8297282893 - 282039471029834.2801722893
+-471029834.8297282893 - 182039471029834.2801722893
+-182039471029834 - 471029834
+-282039471029834 - 471029834
+-182039471029834.2801722893 - 471029834
+-282039471029834.2801722893 - 471029834
+-182039471029834.2801722893 - 471029834.2838
+-282039471029834.2801722893 - 471029834.2838
+-182039471029834 - 471029834.2801722893
+-282039471029834 - 471029834.2801722893
+-182039471029834.8297282893 - 471029834.2801722893
+-282039471029834.8297282893 - 471029834.2801722893
+182039471029834 - -282039471029834
+282039471029834 - -182039471029834
+182039471029834.2801722893 - -282039471029834
+282039471029834.2801722893 - -182039471029834
+182039471029834.2801722893 - -282039471029834.2838
+282039471029834.2801722893 - -182039471029834.2838
+182039471029834 - -282039471029834.2801722893
+282039471029834 - -182039471029834.2801722893
+182039471029834.8297282893 - -282039471029834.2801722893
+282039471029834.8297282893 - -182039471029834.2801722893
+471029834 - -282039471029834
+471029834 - -182039471029834
+471029834.2801722893 - -282039471029834
+471029834.2801722893 - -182039471029834
+471029834.2801722893 - -282039471029834.2838
+471029834.2801722893 - -182039471029834.2838
+471029834 - -282039471029834.2801722893
+471029834 - -182039471029834.2801722893
+471029834.8297282893 - -282039471029834.2801722893
+471029834.8297282893 - -182039471029834.2801722893
+182039471029834 - -471029834
+282039471029834 - -471029834
+182039471029834.2801722893 - -471029834
+282039471029834.2801722893 - -471029834
+182039471029834.2801722893 - -471029834.2838
+282039471029834.2801722893 - -471029834.2838
+182039471029834 - -471029834.2801722893
+282039471029834 - -471029834.2801722893
+182039471029834.8297282893 - -471029834.2801722893
+282039471029834.8297282893 - -471029834.2801722893
+-182039471029834 - -282039471029834
+-282039471029834 - -182039471029834
+-182039471029834.2801722893 - -282039471029834
+-282039471029834.2801722893 - -182039471029834
+-182039471029834.2801722893 - -282039471029834.2838
+-282039471029834.2801722893 - -182039471029834.2838
+-182039471029834 - -282039471029834.2801722893
+-282039471029834 - -182039471029834.2801722893
+-182039471029834.8297282893 - -282039471029834.2801722893
+-282039471029834.8297282893 - -182039471029834.2801722893
+-471029834 - -282039471029834
+-471029834 - -182039471029834
+-471029834.2801722893 - -282039471029834
+-471029834.2801722893 - -182039471029834
+-471029834.2801722893 - -282039471029834.2838
+-471029834.2801722893 - -182039471029834.2838
+-471029834 - -282039471029834.2801722893
+-471029834 - -182039471029834.2801722893
+-471029834.8297282893 - -282039471029834.2801722893
+-471029834.8297282893 - -182039471029834.2801722893
+-182039471029834 - -471029834
+-282039471029834 - -471029834
+-182039471029834.2801722893 - -471029834
+-282039471029834.2801722893 - -471029834
+-182039471029834.2801722893 - -471029834.2838
+-282039471029834.2801722893 - -471029834.2838
+-182039471029834 - -471029834.2801722893
+-282039471029834 - -471029834.2801722893
+-182039471029834.8297282893 - -471029834.2801722893
+-282039471029834.8297282893 - -471029834.2801722893
diff --git a/tests/bc/subtract_results.txt b/tests/bc/subtract_results.txt
new file mode 100644
index 000000000000..a38ffcad76c7
--- /dev/null
+++ b/tests/bc/subtract_results.txt
@@ -0,0 +1,157 @@
+0
+-1
+1
+0
+3
+-7
+-12845975916483
+2874519803456326214611
+9000000000000000000000000000000000000001
+1
+9000000000000000000000000000000000000000.000000000000000000000000000\
+00000001
+.0000000000000000000000000000000001
+9999999999999999999999999999999999999999.999999999999999999999999999\
+99999999999999999999999999999999999999999999999999999999999
+10000000000000000000000000000000000000000.99999999999999999999999999\
+999999999999999999999999999999999999999999999999999999999999
+10000000000000000000000000000000000000000.00000000009999999999999999\
+99999999999999999999999999999999999999999999999999
+-8
+-182934721309467230894628759280719690
+1245723576605103923392087218483
+-3455919355
+2354768922.07654231707
+24055908741.876523177
+-1879234637.082765130766
+.0540410979106
+.8091148336535
+-124765829345.3602790000102
+-10548353126734.1621370644
+94875394587622.85102408852693655
+48667720255646230.89000073530825656433
+-2038581196
+-2351674834
+525898
+0
+18297034019823741908237410745467.69111734712098347109281029873
+-100000000000000
+100000000000000
+-99999999999999.7198277107
+100000000000000.2801722893
+-100000000000000.0036277107
+99999999999999.9963722893
+-100000000000000.2801722893
+99999999999999.7198277107
+-99999999999999.4504440000
+100000000000000.5495560000
+-282039000000000
+-182039000000000
+-282038999999999.7198277107
+-182038999999999.7198277107
+-282039000000000.0036277107
+-182039000000000.0036277107
+-282039000000000.2801722893
+-182039000000000.2801722893
+-282038999999999.4504440000
+-182038999999999.4504440000
+182039000000000
+282039000000000
+182039000000000.2801722893
+282039000000000.2801722893
+182038999999999.9963722893
+282038999999999.9963722893
+182038999999999.7198277107
+282038999999999.7198277107
+182039000000000.5495560000
+282039000000000.5495560000
+-464078942059668
+-464078942059668
+-464078942059668.2801722893
+-464078942059668.2801722893
+-464078942059668.5639722893
+-464078942059668.5639722893
+-464078942059668.2801722893
+-464078942059668.2801722893
+-464078942059669.1099005786
+-464078942059669.1099005786
+-282039942059668
+-182039942059668
+-282039942059668.2801722893
+-182039942059668.2801722893
+-282039942059668.5639722893
+-182039942059668.5639722893
+-282039942059668.2801722893
+-182039942059668.2801722893
+-282039942059669.1099005786
+-182039942059669.1099005786
+-182039942059668
+-282039942059668
+-182039942059668.2801722893
+-282039942059668.2801722893
+-182039942059668.5639722893
+-282039942059668.5639722893
+-182039942059668.2801722893
+-282039942059668.2801722893
+-182039942059669.1099005786
+-282039942059669.1099005786
+464078942059668
+464078942059668
+464078942059668.2801722893
+464078942059668.2801722893
+464078942059668.5639722893
+464078942059668.5639722893
+464078942059668.2801722893
+464078942059668.2801722893
+464078942059669.1099005786
+464078942059669.1099005786
+282039942059668
+182039942059668
+282039942059668.2801722893
+182039942059668.2801722893
+282039942059668.5639722893
+182039942059668.5639722893
+282039942059668.2801722893
+182039942059668.2801722893
+282039942059669.1099005786
+182039942059669.1099005786
+182039942059668
+282039942059668
+182039942059668.2801722893
+282039942059668.2801722893
+182039942059668.5639722893
+282039942059668.5639722893
+182039942059668.2801722893
+282039942059668.2801722893
+182039942059669.1099005786
+282039942059669.1099005786
+100000000000000
+-100000000000000
+99999999999999.7198277107
+-100000000000000.2801722893
+100000000000000.0036277107
+-99999999999999.9963722893
+100000000000000.2801722893
+-99999999999999.7198277107
+99999999999999.4504440000
+-100000000000000.5495560000
+282039000000000
+182039000000000
+282038999999999.7198277107
+182038999999999.7198277107
+282039000000000.0036277107
+182039000000000.0036277107
+282039000000000.2801722893
+182039000000000.2801722893
+282038999999999.4504440000
+182038999999999.4504440000
+-182039000000000
+-282039000000000
+-182039000000000.2801722893
+-282039000000000.2801722893
+-182038999999999.9963722893
+-282038999999999.9963722893
+-182038999999999.7198277107
+-282038999999999.7198277107
+-182039000000000.5495560000
+-282039000000000.5495560000
diff --git a/tests/bc/timeconst.sh b/tests/bc/timeconst.sh
new file mode 100755
index 000000000000..17e765d159ec
--- /dev/null
+++ b/tests/bc/timeconst.sh
@@ -0,0 +1,93 @@
+#! /bin/sh
+#
+# Copyright (c) 2018-2020 Gavin D. Howard and contributors.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+#
+# * Redistributions in binary form must reproduce the above copyright notice,
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+# Tests the timeconst.bc script from the Linux kernel build.
+# You can find the script at kernel/time/timeconst.bc in any Linux repo.
+# One such repo is: https://github.com/torvalds/linux
+
+script="$0"
+testdir=$(dirname "$script")
+
+if [ "$#" -gt 0 ]; then
+ timeconst="$1"
+ shift
+else
+ timeconst="$testdir/scripts/timeconst.bc"
+fi
+
+if [ "$#" -gt 0 ]; then
+ bc="$1"
+ shift
+else
+ bc="$testdir/../../bin/bc"
+fi
+
+out1="$testdir/../.log_bc_timeconst.txt"
+out2="$testdir/../.log_bc_timeconst_test.txt"
+
+base=$(basename "$timeconst")
+
+if [ ! -f "$timeconst" ]; then
+ printf 'Warning: %s does not exist\n' "$timeconst"
+ printf 'Skipping...\n'
+ exit 0
+fi
+
+printf 'Running %s...' "$base"
+
+nums=$(printf 'for (i = 0; i <= 1000; ++i) { i }\n' | bc)
+
+for i in $nums; do
+
+ printf '%s\n' "$i" | bc -q "$timeconst" > "$out1"
+
+ err="$?"
+
+ if [ "$err" -ne 0 ]; then
+ printf '\nOther bc is not GNU compatible. Skipping...\n'
+ exit 0
+ fi
+
+ printf '%s\n' "$i" | "$bc" "$@" -q "$timeconst" > "$out2"
+
+ diff "$out1" "$out2"
+
+ error="$?"
+
+ if [ "$error" -ne 0 ]; then
+ printf '\nFailed on input: %s\n' "$i"
+ exit "$error"
+ fi
+
+done
+
+rm -f "$out1"
+rm -f "$out2"
+
+printf 'pass\n'
diff --git a/tests/bc/trunc.txt b/tests/bc/trunc.txt
new file mode 100644
index 000000000000..364bb224a2e3
--- /dev/null
+++ b/tests/bc/trunc.txt
@@ -0,0 +1,15 @@
+0$
+1$
+2$
+0.8249167203486$
+1.28937150237$
+2.0$
+28937.92837605126$
+2890.000000000$
+-1$
+-1.128973$
+-9812387.28910273$
+x = 83.298
+x$
+x = -1893.19
+(x)$
diff --git a/tests/bc/trunc_results.txt b/tests/bc/trunc_results.txt
new file mode 100644
index 000000000000..c888c95d2daa
--- /dev/null
+++ b/tests/bc/trunc_results.txt
@@ -0,0 +1,13 @@
+0
+1
+2
+0
+1
+2
+28937
+2890
+-1
+-1
+-9812387
+83
+-1893
diff --git a/tests/bc/vars.txt b/tests/bc/vars.txt
new file mode 100644
index 000000000000..91e3572c2a0b
--- /dev/null
+++ b/tests/bc/vars.txt
@@ -0,0 +1,7 @@
+scale=10;123981239.981273987 * 12983791827398.29836472638
+scale=100;759634576394.3946587934658364895 / 9834759834895386.36459364958346
+34895734986539489834759837489573498573.398475984759837485734987598345 + 9823749832749872384234872934.28347982374987239847982374
+a=123123123.987239874; b=123123123.239479823748; a+b
+20347023.23498723984 - 28934723874.234720384
+scale=100;a=739534985.895347284957;b=238746782364.2374623784; c = a / b; c
+s7298367203972395108367910823465293084561329084561390845613409516734503870691837451 + 785621394067928346918023476190834672198467134908618723249671349062187346898241093486139046139084613490817356023871869102746182749061872609129847
diff --git a/tests/bc/vars_results.txt b/tests/bc/vars_results.txt
new file mode 100644
index 000000000000..6597d8439723
--- /dev/null
+++ b/tests/bc/vars_results.txt
@@ -0,0 +1,12 @@
+1609746610419572350599.59456175545
+.0000772397688552681359718594121969204138521230712049526233926741658\
+845368495051158801794834809672994
+34895734996363239667509709873808371507.68195580850970988421481133834\
+5
+246246247.226719697748
+-28914376850.99973314416
+.0030975704827179453786044330548590249517387192084765414205077089498\
+482709063381782183114683451531598
+78562139406792834691802347619083467219846713490861872324967134906218\
+73468982410934861390461390846134908173560238718691027461827490618726\
+09129847
diff --git a/tests/bc/void.txt b/tests/bc/void.txt
new file mode 100644
index 000000000000..b85d70c8590a
--- /dev/null
+++ b/tests/bc/void.txt
@@ -0,0 +1,20 @@
+define void stuff(x) {
+ print "x: ", x, "\n"
+}
+
+define void(x) {
+ return x
+}
+
+stuff(0)
+stuff(1)
+stuff(2.2839)
+stuff(-9.9289389)
+
+void(0)
+void(1)
+void(2.9823)
+void(-3.5982)
+
+void = .198389
+void + 10
diff --git a/tests/bc/void_results.txt b/tests/bc/void_results.txt
new file mode 100644
index 000000000000..1e352efe9238
--- /dev/null
+++ b/tests/bc/void_results.txt
@@ -0,0 +1,9 @@
+x: 0
+x: 1
+x: 2.2839
+x: -9.9289389
+0
+1
+2.9823
+-3.5982
+10.198389
diff --git a/tests/dc/abs.txt b/tests/dc/abs.txt
new file mode 100644
index 000000000000..9907dfc6679d
--- /dev/null
+++ b/tests/dc/abs.txt
@@ -0,0 +1,7 @@
+0bpR
+1bpR
+.218933bpR
+138963.9873645bpR
+_19bpR
+_.1298376bpR
+_3892173.289375bpR
diff --git a/tests/dc/abs_results.txt b/tests/dc/abs_results.txt
new file mode 100644
index 000000000000..921a848ab6f0
--- /dev/null
+++ b/tests/dc/abs_results.txt
@@ -0,0 +1,7 @@
+0
+1
+.218933
+138963.9873645
+19
+.1298376
+3892173.289375
diff --git a/tests/dc/add.txt b/tests/dc/add.txt
new file mode 100644
index 000000000000..42da2f1f309c
--- /dev/null
+++ b/tests/dc/add.txt
@@ -0,0 +1,33 @@
+0 0+pR
+0 0 0++pR
+0 1+pR
+0 1 1++pR
+1 1+pR
+1 0+pR
+2 5+pR
+237 483+pR
+999 999+pR
+2374623 324869356734856+pR
+2378639084586723980562 23468729367839+pR
+37298367203972395108367910823465293084561329084561390845613409516734503870691837451 785621394067928346918023476190834672198467134908618723249671349062187346898241093486139046139084613490817356023871869102746182749061872609129847+pR
+1.1 0+pR
+0 1.1+pR
+457283.731284923576 37842934672834.3874629385672354+pR
+1.0 0.1+pR
+3746289134067138046 0.138375863945672398456712389456273486293+pR
+_1 _1+pR
+_4 _15+pR
+_1346782 _1287904651762468913476+pR
+99999999999999999999999999999999999999999999999999999999999.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001+pR
+99999999999999999999999999999999999999999999999999999999999.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999995 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005+pR
+99999999999999999999999999999999999999999999999999999999999.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001+pR
+99999999999999999999999999999999999999999999999999999999999.999999999999999999999999999999999999999999999999999999999899999999999999999999999999999999999999999999999999999999999999 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001+pR
+99999999999999999999999999999999999989999999999999999999999.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001+pR
+_1889985797 2012747315+pR
+0 _14338.391079082+pR
+_2422297 1.3134942556+pR
+_1289374 1289374.2893417 0.238971 28937.28971+++pR
+1289374 1289374.2893417 _0.238971 28937.28971+++pR
+1289374 1289374.2893417 0.238971 _28937.28971+++pR
+1289374 1289374.2893417 _0.238971 _28937.28971+++pR
+1289374 _1289374.2893417 _0.238971 _28937.28971+++pR
diff --git a/tests/dc/add_results.txt b/tests/dc/add_results.txt
new file mode 100644
index 000000000000..542a62ea3a33
--- /dev/null
+++ b/tests/dc/add_results.txt
@@ -0,0 +1,45 @@
+0
+0
+1
+2
+2
+1
+7
+720
+1998
+324869359109479
+2378639108055453348401
+78562139406792834691802347619083467219846713490861872324967138636055\
+45508706362018540498696043776980521464405852627147161556994835657433\
+00967298
+1.1
+1.1
+37842935130118.1187478621432354
+1.1
+3746289134067138046.138375863945672398456712389456273486293
+-2
+-19
+-1287904651762470260258
+100000000000000000000000000000000000000000000000000000000000.0000000\
+00000000000000000000000000000000000000000000000000000000000000000000\
+000000000000000000000000000000000000000000000
+100000000000000000000000000000000000000000000000000000000000.0000000\
+00000000000000000000000000000000000000000000000000000000000000000000\
+000000000000000000000000000000000000000000000
+100000000000000000000000000000000000000000000000000000000000.0000000\
+00000000000000000000000000000000000000000000000000000000000000000000\
+000000000000000000000000000000000000000009999
+99999999999999999999999999999999999999999999999999999999999.99999999\
+99999999999999999999999999999999999999999999999999000000000000000000\
+00000000000000000000000000000000000000009999
+99999999999999999999999999999999999990000000000000000000000.00000000\
+00000000000000000000000000000000000000000000000000000000000000000000\
+00000000000000000000000000000000000000009999
+122761518
+-14338.391079082
+-2422295.6865057444
+28937.8180227
+2607685.3400807
+2549811.2386027
+2549810.7606607
+-28937.8180227
diff --git a/tests/dc/all.txt b/tests/dc/all.txt
new file mode 100644
index 000000000000..6879541f7f1a
--- /dev/null
+++ b/tests/dc/all.txt
@@ -0,0 +1,22 @@
+decimal
+add
+subtract
+multiply
+divide
+modulus
+divmod
+power
+sqrt
+modexp
+boolean
+negate
+trunc
+places
+shift
+abs
+scientific
+engineering
+vars
+misc
+strings
+rand
diff --git a/tests/dc/boolean.txt b/tests/dc/boolean.txt
new file mode 100644
index 000000000000..815100f0d085
--- /dev/null
+++ b/tests/dc/boolean.txt
@@ -0,0 +1,80 @@
+0 1(pR
+1 1(pR
+2 1(pR
+_1 1(pR
+_1 0(pR
+_1 _1(pR
+_1 _2(pR
+0 1{pR
+1 1{pR
+2 1{pR
+_1 1{pR
+_1 0{pR
+_1 _1{pR
+_1 _2{pR
+0 1)pR
+1 1)pR
+2 1)pR
+_1 1)pR
+_1 0)pR
+_1 _1)pR
+_1 _2)pR
+0 1}pR
+1 1}pR
+2 1}pR
+_1 1}pR
+_1 0}pR
+_1 _1}pR
+_1 _2}pR
+0 0GpR
+0 1GpR
+1 0GpR
+_1 _1GpR
+0 _1GpR
+_1 0GpR
+1 1GpR
+238 2GpR
+0NpR
+1NpR
+_1NpR
+2398NpR
+_2983.2389NpR
+0 0MpR
+1 0MpR
+0 1MpR
+1 1MpR
+128973240 0MpR
+0 2893712MpR
+1982 28937MpR
+_2938 0MpR
+0 _1023.298037MpR
+0.283917 0MpR
+2389 _1208.28937MpR
+0 289.289372MpR
+_298.29387 0MpR
+_2983.28973 82937MpR
+0 _2938.320837MpR
+_2089.2308 0MpR
+_0.2893 _2938.28973MpR
+0.00000 1892MpR
+1289.023 .0000MpR
+0 0mpR
+1 0mpR
+0 1mpR
+1 1mpR
+128973240 0mpR
+0 2893712mpR
+1982 28937mpR
+_2938 0mpR
+0 _1023.298037mpR
+0.283917 0mpR
+2389 _1208.28937mpR
+0 289.289372mpR
+_298.29387 0mpR
+_2983.28973 82937mpR
+0 _2938.320837mpR
+_2089.2308 0mpR
+_0.2893 _2938.28973mpR
+0.00000 1892mpR
+1289.023 .0000mpR
+0.0000 .00000mpR
diff --git a/tests/dc/boolean_results.txt b/tests/dc/boolean_results.txt
new file mode 100644
index 000000000000..225cebbe04bb
--- /dev/null
+++ b/tests/dc/boolean_results.txt
@@ -0,0 +1,80 @@
+0
+0
+1
+0
+0
+0
+1
+0
+1
+1
+0
+0
+1
+1
+1
+0
+0
+1
+1
+0
+0
+1
+1
+0
+1
+1
+1
+0
+1
+0
+0
+1
+0
+0
+1
+0
+1
+0
+0
+0
+0
+0
+0
+0
+1
+0
+0
+1
+0
+0
+0
+1
+0
+0
+1
+0
+0
+1
+0
+0
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
diff --git a/tests/dc/decimal.txt b/tests/dc/decimal.txt
new file mode 100644
index 000000000000..ebbb2dc91b3a
--- /dev/null
+++ b/tests/dc/decimal.txt
@@ -0,0 +1,36 @@
+0pR
+0.0pR
+.0000pR
+000000000000000000000000.00000000000000000000000pR
+000000000000000000000000000135482346782356pR
+000000000000000000000000002pR
+1pR
+11pR
+123pR
+7505pR
+1023468723275435238491972521917846pR
+4343472432431705867392073517038270398027352709027389273920739037937960379637893607893607893670530278200795207952702873892786172916728961783907893607418973587857386079679267926737520730925372983782793652793pR
+_1pR
+_203pR
+_57pR
+_18586pR
+_31378682943772818461924738352952347258pR
+_823945628745673589495067238723986520375698237620834674509627345273096287563846592384526349872634895763257893467523987578690283762897568459072348758071071087813501875908127359018715023841710239872301387278pR
+.123521346523546pR
+0.1245923756273856pR
+_.1024678456387pR
+_0.8735863475634587pR
+4.0pR
+_6.0pR
+234237468293576.000000000000000000000000000000pR
+23987623568943567.00000000000000000005677834650000000000000pR
+23856934568940675.000000000000000435676782300000000000000456784pR
+77567648698496.000000000000000000587674750000000000458563800000000000000pR
+2348672354968723.2374823546000000000003256987394502346892435623870000000034578pR
+_2354768.000000000000000000000000000000000000pR
+_96739874567.000000000347683456pR
+_3764568345.000000000004573845000000347683460pR
+_356784356.934568495770004586495678300000000pR
+74325437345273852773827101738273127312738521733017537073520735207307570358738257390761276072160719802671980267018728630178.7082681027680521760217867841276127681270867827821768173178207830710978017738178678012767377058785378278207385237085237803278203782037237582795870pR
+_756752732785273851273728537852738257837283678965738527385272983678372867327835672967385278372637862738627836279863782673862783670.71738178361738718367186378610738617836781603760178367018603760178107735278372832783728367826738627836278378260736270367362073867097307925pR
+9812734012837410982345719208345712908357412903587192048571920458712.23957182459817249058172945781pR
diff --git a/tests/dc/decimal_results.txt b/tests/dc/decimal_results.txt
new file mode 100644
index 000000000000..275d431c6e0f
--- /dev/null
+++ b/tests/dc/decimal_results.txt
@@ -0,0 +1,51 @@
+0
+0
+0
+0
+135482346782356
+2
+1
+11
+123
+7505
+1023468723275435238491972521917846
+43434724324317058673920735170382703980273527090273892739207390379379\
+60379637893607893607893670530278200795207952702873892786172916728961\
+78390789360741897358785738607967926792673752073092537298378279365279\
+3
+-1
+-203
+-57
+-18586
+-31378682943772818461924738352952347258
+-8239456287456735894950672387239865203756982376208346745096273452730\
+96287563846592384526349872634895763257893467523987578690283762897568\
+45907234875807107108781350187590812735901871502384171023987230138727\
+8
+.123521346523546
+.1245923756273856
+-.1024678456387
+-.8735863475634587
+4.0
+-6.0
+234237468293576.000000000000000000000000000000
+23987623568943567.00000000000000000005677834650000000000000
+23856934568940675.000000000000000435676782300000000000000456784
+77567648698496.00000000000000000058767475000000000045856380000000000\
+0000
+2348672354968723.237482354600000000000325698739450234689243562387000\
+0000034578
+-2354768.000000000000000000000000000000000000
+-96739874567.000000000347683456
+-3764568345.000000000004573845000000347683460
+-356784356.934568495770004586495678300000000
+74325437345273852773827101738273127312738521733017537073520735207307\
+570358738257390761276072160719802671980267018728630178.7082681027680\
+52176021786784127612768127086782782176817317820783071097801773817867\
+8012767377058785378278207385237085237803278203782037237582795870
+-7567527327852738512737285378527382578372836789657385273852729836783\
+72867327835672967385278372637862738627836279863782673862783670.71738\
+17836173871836718637861073861783678160376017836701860376017810773527\
+8372832783728367826738627836278378260736270367362073867097307925
+9812734012837410982345719208345712908357412903587192048571920458712.\
+23957182459817249058172945781
diff --git a/tests/dc/divide.txt b/tests/dc/divide.txt
new file mode 100644
index 000000000000..38b874e9f175
--- /dev/null
+++ b/tests/dc/divide.txt
@@ -0,0 +1,33 @@
+20k
+0 1/pR
+0 321566/pR
+0 0.3984567238456/pR
+1 1/pR
+1 1287469297356/pR
+1 0.2395672438567234/pR
+1 237586239856.0293596728392360/pR
+1249687284356 3027949207835207/pR
+378617298617396719 35748521/pR
+9348576237845624358 0.9857829375461/pR
+35768293846193284 2374568947.045762839567823/pR
+_78987234567812345 876542837618936/pR
+_356789237555535468 0.3375273860984786903/pR
+_5203475364850390 435742903748307.70869378534043296404530458/pR
+_0.37861723347576903 7385770896/pR
+_0.399454682043962 0.34824389304/pR
+_0.6920414523873204 356489645223.76076045304879030/pR
+_35872917389671.7573280963748 73924708/pR
+_78375896314.4836709876983 0.78356798637817/pR
+_2374123896417.143789621437581 347821469423789.1473856783960/pR
+_896729350238549726 _34976289345762/pR
+_2374568293458762348596 _0.8792370647234987679/pR
+_237584692306721845726038 _21783910782374529637.978102738746189024761/pR
+_0.23457980123576298375682 _1375486293874612/pR
+_0.173897061862478951264 _0.8179327486017634987516298745/pR
+_0.9186739823576829347586 _0.235678293458756239846/pR
+_0.9375896183746982374568 _13784962873546.0928729395476283745/pR
+_2930754618923467.12323745862937465 _734869238465/pR
+_23745861923467.874675129834675 _0.23542357869124756/pR
+_3878923750692883.7238596702834756902 _7384192674957215364986723.9738461923487621983/pR
+1 0.00000000000000000000000000000000000000000002346728372937352457354204563027/pR
+239854711289345712 2891374 182 .2893 ///pR
diff --git a/tests/dc/divide_results.txt b/tests/dc/divide_results.txt
new file mode 100644
index 000000000000..340ae94c1aa6
--- /dev/null
+++ b/tests/dc/divide_results.txt
@@ -0,0 +1,32 @@
+0
+0
+0
+1.00000000000000000000
+.00000000000077671755
+4.17419336592637110778
+.00000000000420899796
+.00041271738677857404
+10591131829.40901859967857131767
+9483402361494453751.52388015648196297248
+15063068.13735316451497043884
+-90.11223545260531110575
+-1057067521778623447.45138528213564485251
+-11.94161814246320631346
+-.00000000005126306228
+-1.14705437777218917343
+-.00000000000194126663
+-485262.88923145638029569727
+-100024372711.74763635544535424582
+-.00682569681609989277
+25638.20711150436682153521
+2700714504347599627864.24626421085374010264
+10906.42973524078145692731
+.00000000000000017054
+.21260557443109085166
+3.89799997647407910677
+.00000000000006801538
+3988.13076601933678578945
+100864416620775.31076855630746548983
+.00000000052530099381
+42612515855353136519261264261472677699404182.78776061098893912189
+52187553294928.31582417732156163799
diff --git a/tests/dc/divmod.txt b/tests/dc/divmod.txt
new file mode 100644
index 000000000000..1633203ff99f
--- /dev/null
+++ b/tests/dc/divmod.txt
@@ -0,0 +1,64 @@
+20k
+0 1~pRpR
+0 321566~pRpR
+0 0.3984567238456~pRpR
+1 1~pRpR
+1 1287469297356~pRpR
+1 0.2395672438567234~pRpR
+1 237586239856.0293596728392360~pRpR
+1249687284356 3027949207835207~pRpR
+378617298617396719 35748521~pRpR
+9348576237845624358 0.9857829375461~pRpR
+35768293846193284 2374568947.045762839567823~pRpR
+_78987234567812345 876542837618936~pRpR
+_356789237555535468 0.3375273860984786903~pRpR
+_5203475364850390 435742903748307.70869378534043296404530458~pRpR
+_0.37861723347576903 7385770896~pRpR
+_0.399454682043962 0.34824389304~pRpR
+_0.6920414523873204 356489645223.76076045304879030~pRpR
+_35872917389671.7573280963748 73924708~pRpR
+_78375896314.4836709876983 0.78356798637817~pRpR
+_2374123896417.143789621437581 347821469423789.1473856783960~pRpR
+_896729350238549726 _34976289345762~pRpR
+_2374568293458762348596 _0.8792370647234987679~pRpR
+_237584692306721845726038 _21783910782374529637.978102738746189024761~pRpR
+_0.23457980123576298375682 _1375486293874612~pRpR
+_0.173897061862478951264 _0.8179327486017634987516298745~pRpR
+_0.9186739823576829347586 _0.235678293458756239846~pRpR
+_0.9375896183746982374568 _13784962873546.0928729395476283745~pRpR
+_2930754618923467.12323745862937465 _734869238465~pRpR
+_23745861923467.874675129834675 _0.23542357869124756~pRpR
+_3878923750692883.7238596702834756902 _7384192674957215364986723.9738461923487621983~pRpR
+1 0.00000000000000000000000000000000000000000002346728372937352457354204563027~pRpR
+0k
+0 1~pRpR
+0 321566~pRpR
+0 0.3984567238456~pRpR
+1 1~pRpR
+1 1287469297356~pRpR
+1 0.2395672438567234~pRpR
+1 237586239856.0293596728392360~pRpR
+1249687284356 3027949207835207~pRpR
+378617298617396719 35748521~pRpR
+9348576237845624358 0.9857829375461~pRpR
+35768293846193284 2374568947.045762839567823~pRpR
+_78987234567812345 876542837618936~pRpR
+_356789237555535468 0.3375273860984786903~pRpR
+_5203475364850390 435742903748307.70869378534043296404530458~pRpR
+_0.37861723347576903 7385770896~pRpR
+_0.399454682043962 0.34824389304~pRpR
+_0.6920414523873204 356489645223.76076045304879030~pRpR
+_35872917389671.7573280963748 73924708~pRpR
+_78375896314.4836709876983 0.78356798637817~pRpR
+_2374123896417.143789621437581 347821469423789.1473856783960~pRpR
+_896729350238549726 _34976289345762~pRpR
+_2374568293458762348596 _0.8792370647234987679~pRpR
+_237584692306721845726038 _21783910782374529637.978102738746189024761~pRpR
+_0.23457980123576298375682 _1375486293874612~pRpR
+_0.173897061862478951264 _0.8179327486017634987516298745~pRpR
+_0.9186739823576829347586 _0.235678293458756239846~pRpR
+_0.9375896183746982374568 _13784962873546.0928729395476283745~pRpR
+_2930754618923467.12323745862937465 _734869238465~pRpR
+_23745861923467.874675129834675 _0.23542357869124756~pRpR
+_3878923750692883.7238596702834756902 _7384192674957215364986723.9738461923487621983~pRpR
+1 0.00000000000000000000000000000000000000000002346728372937352457354204563027~pRpR
diff --git a/tests/dc/divmod_results.txt b/tests/dc/divmod_results.txt
new file mode 100644
index 000000000000..c55e9303d935
--- /dev/null
+++ b/tests/dc/divmod_results.txt
@@ -0,0 +1,126 @@
+0
+0
+0
+0
+0
+0
+0
+1.00000000000000000000
+.00000000165742620220
+.00000000000077671755
+.000000000000000000000404744340951948
+4.17419336592637110778
+.000000001121901731436913388268041440
+.00000000000420899796
+.00000053204123177372
+.00041271738677857404
+.00000000000027633393
+10591131829.40901859967857131767
+.000000000000000000008615446968672
+9483402361494453751.52388015648196297248
+.00000000001477790730322167374655468
+15063068.13735316451497043884
+-.00000456715270151800
+-90.11223545260531110575
+-.000000000000000000002529869118878532347
+-1057067521778623447.45138528213564485251
+-.0000022326265743225222025732006233770753463532
+-11.94161814246320631346
+-.00000000004830962712
+-.00000000005126306228
+-.0000000000000000000013970700728
+-1.14705437777218917343
+-.0000000001738947526290727016287423110
+-.00000000000194126663
+-.00000000000045885284
+-485262.88923145638029569727
+-.0000000000000000000075040663382506
+-100024372711.74763635544535424582
+-.000001609445227594519190694403080
+-.00682569681609989277
+-.00000019041665271998
+25638.20711150436682153521
+-.000000000000000000005200979673140462744
+2700714504347599627864.24626421085374010264
+-.15832010238185026960887316509782343287709
+10906.42973524078145692731
+-.00000436867838665327682
+.00000000000000017054
+-.000000000000000000004322546241638067588696083330
+.21260557443109085166
+-.00000000000000000000103666428264443764258
+3.89799997647407910677
+-.000000130244568783188524951028009600190
+.00000000000006801538
+-.00000000467404345575
+3988.13076601933678578945
+-.0000000000000000000004406586308076852
+100864416620775.31076855630746548983
+-53336.193401942302558132911110799109649707477
+.00000000052530099381
+.0000000000000000000000000000000000000000000000000000000000000001907\
+266929376630027064745963897
+42612515855353136519261264261472677699404182.78776061098893912189
+0
+0
+0
+0
+0
+0
+0
+1
+1
+0
+.0417310245731064
+4
+1.0000000000000000
+0
+1249687284356
+0
+14621810
+10591131829
+.5164321195789
+9483402361494453751
+326154559.235716791539036
+15063068
+-98379182108105
+-90
+-.1523548944025685359
+-1057067521778623447
+-410303423619005.20436836125523739550164962
+-11
+-.37861723347576903
+0
+-.051210789003962
+-1
+-.69204145238732040
+0
+-65736175.7573280963748
+-485262
+-.58582391357943
+-100024372711
+-2374123896417.143789621437581
+0
+-7243991903570
+25638
+-.2165246218974912344
+2700714504347599627864
+-9361314145225494248.811531234062495956534
+10906
+-.23457980123576298375682
+0
+-.1738970618624789512640000000
+0
+-.2116391019814142152206
+3
+-.9375896183746982374568
+0
+-96095925047.12323745862937465
+3988
+-.07316224567061600
+100864416620775
+-3878923750692883.7238596702834756902
+0
+.0000000000000000000000000000000000000000000184866017689020776005643\
+3621086
+42612515855353136519261264261472677699404182
diff --git a/tests/dc/engineering.txt b/tests/dc/engineering.txt
new file mode 100644
index 000000000000..90a35052b3cb
--- /dev/null
+++ b/tests/dc/engineering.txt
@@ -0,0 +1,19 @@
+1o
+0pR
+1pR
+_34pR
+298pR
+_8933pR
+29488pR
+_148232pR
+8927559pR
+.2pR
+_.02pR
+.002pR
+_.0003pR
+.0000209310pR
+_.00000289362pR
+.000000859289pR
+_.02983672pR
+.20201296pR
+_.8907210897000000000000000000pR
diff --git a/tests/dc/engineering_results.txt b/tests/dc/engineering_results.txt
new file mode 100644
index 000000000000..dd26f9bbb138
--- /dev/null
+++ b/tests/dc/engineering_results.txt
@@ -0,0 +1,18 @@
+0
+1e0
+-34e0
+298e0
+-8.933e3
+29.488e3
+-148.232e3
+8.927559e6
+200e-3
+-20e-3
+2e-3
+-300e-6
+20.9310e-6
+-2.89362e-6
+859.289e-9
+-29.83672e-3
+202.01296e-3
+-890.7210897000000000000000000e-3
diff --git a/tests/dc/errors.txt b/tests/dc/errors.txt
new file mode 100644
index 000000000000..8ead40c57e9d
--- /dev/null
+++ b/tests/dc/errors.txt
@@ -0,0 +1,32 @@
+p
+P
+x
+R
+d
+r
+1r
+b
+4 100000|
+_
+]
+zp198202389.289374pzp[He World!]xSzpzXfrfxzpfR
+[hello]k
+3 2 0|
+3 0 0|
+3.2 3 1|
+3 3.2 1|
+2 10 34.2|
+2 _10 23|
+3 0~
+0 _251^pR
+.
+@
+0 0< $
+0 0> s e %
+[string]b
+[s][s]+
+[s][s]@
+[s][s]v
+0si 0 1 >i
+?
+?
diff --git a/tests/dc/errors/01.txt b/tests/dc/errors/01.txt
new file mode 100644
index 000000000000..8adde2ea0deb
--- /dev/null
+++ b/tests/dc/errors/01.txt
@@ -0,0 +1,2 @@
+[[aotsnheau
+'t,.h]
diff --git a/tests/dc/errors/02.txt b/tests/dc/errors/02.txt
new file mode 100644
index 000000000000..893128a8e8e7
--- /dev/null
+++ b/tests/dc/errors/02.txt
@@ -0,0 +1,10 @@
+0 R
+2 1
+1 0+pRpp
+34.x
+[lip0+si10]ip1+pR
+0 1 1++pR
+1 1+p?
+1 0+pRpp
+34.x
+[lip0+si10}ip1+si30li<L]sL0sJlLx
diff --git a/tests/dc/errors/03.txt b/tests/dc/errors/03.txt
new file mode 100644
index 000000000000..a0877e7ec264
--- /dev/null
+++ b/tests/dc/errors/03.txt
@@ -0,0 +1,2 @@
+0 lip1-si0l0+234sx_9lq+pR 34.x
+[li170LLdp1+s+sX10lM<L]sL0sJlLx
diff --git a/tests/dc/errors/04.txt b/tests/dc/errors/04.txt
new file mode 100644
index 000000000000..a59572d8f761
--- /dev/null
+++ b/tests/dc/errors/04.txt
@@ -0,0 +1,10 @@
+zp198202389.289374p1+pR
+0 1 1+kpR
+1 1+pR
+1 0IpR
+2 9+iR
+037 483+pR
+999 999+pR
+237467456283846vpR
+.0000000ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddsdddddddddddddddddddddddddddddddddddddddddddddddddddddsdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd/ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddfddddddddddddddddddddddddddddddddddddddddddddddddddddddcdddddddddddd96723895687456283846vpR
+.0
diff --git a/tests/dc/errors/05.txt b/tests/dc/errors/05.txt
new file mode 100644
index 000000000000..924f8ad41960
--- /dev/null
+++ b/tests/dc/errors/05.txt
@@ -0,0 +1,3 @@
+04604462921702348sx_928374892.28937syzpRlxlq+pR
+34.x
+[li1702348sxLLLLLL928374892.28937sLLL]sL0sJlLx
diff --git a/tests/dc/errors/06.txt b/tests/dc/errors/06.txt
new file mode 100644
index 000000000000..e806f63d71b0
--- /dev/null
+++ b/tests/dc/errors/06.txt
@@ -0,0 +1,4 @@
+00Q;pd69 p d9S16+00I;pd69Q2 0^pR
+1O392RQ2 1^pR
+1361345237859627#8sM[lip1-si0li!<LeM]^L1OsilLx
+[[Done!]pR]SM^lip1-si0li!=LesL1L;0silLx
diff --git a/tests/dc/errors/07.txt b/tests/dc/errors/07.txt
new file mode 100644
index 000000000000..6d1a9dfa9f95
--- /dev/null
+++ b/tests/dc/errors/07.txt
@@ -0,0 +1,4 @@
+1 0 1|dR
+1 [lipL]SL10sildR
+1 [lipL]sL10|Lx
+[
diff --git a/tests/dc/errors/08.txt b/tests/dc/errors/08.txt
new file mode 100644
index 000000000000..9c34b0e0e24e
--- /dev/null
+++ b/tests/dc/errors/08.txt
@@ -0,0 +1,2 @@
+0 2+p[lip1-si0li!=L^di>L]SL98silLx
+i
diff --git a/tests/dc/errors/09.txt b/tests/dc/errors/09.txt
new file mode 100644
index 000000000000..48c1e09bddda
--- /dev/null
+++ b/tests/dc/errors/09.txt
@@ -0,0 +1,22 @@
+#! /dc
+0sm[Nx]0sm[]zsWx[li]zsGx[Nx]0sm[]zsdc
+0sm[Nx]0sm[]zsWx[li]zsGx[Nx]0sm[]zsW#! /bin/dc
+0sm[Nx]0s_[]zsWx[li]zs^x[lili100>Nx]0sm[]zsWx[liNx]zsxx[li;rlilix]
+x[liN]zsWx[liNx]zsxx[li;rlilix]
+x[liNzsxx#! /bin/dc
+*sm[Nx]0sm[]zsWx[li]zsGx[Nx]0sm[]zsdc
+0sm[Nx]0sm[]zsWx[li]zsGx[Nx]0sm[]x]zsxx#! /bin/dc
+*sm[Nx]0sm[]zsWx[li]zsGx[Nx]0sm[]zsdc
+0sm[Nx]0sm[]zsWx[li]zsGx[Nx]0sm[]zsW#! /bipR
+00?00pR0.0pR
+.0000p0000000000000;0000000000.0pR
+.0000p00.000000;00000500000.0pR
+.0000p0000000000?00pR0.0pR
+.0000p0000000000000;0000000000.0pR
+.0000p00.000000;00000500000.0pR
+.0000p00000000000000000000000000000000000000000d000.0pR
+.0000p000000000000000000000000R
+.0000p02730pR
+00000pR0.0pR
+.0000p0000000000000000000000R
+.0000p00pR
diff --git a/tests/dc/errors/10.txt b/tests/dc/errors/10.txt
new file mode 100644
index 000000000000..5eb80178119a
--- /dev/null
+++ b/tests/dc/errors/10.txt
@@ -0,0 +1,19 @@
+#! /dc
+0sm[Nx]0sm[]zsWx[li]zsGx[Nfvfff[]zsm[]zsWx[li]zsPx[Nx]0sm[]zsdc
+0sm[Nx]0sm[]x[li]zsGx[Nx]0sm[]zsdc
+0sm[Nx]0sm[]zsWx[li]zsGx[Nx]0sm[]zsdc
+0sm[Nx]0sm[]zsWx[li]zsGx[Nx]0sm[]zsW#! /bin/dc
+0sm[Nx]0s_[]zsWx[li]zs^x[lili100>Nx]0sm[]zsWx[liNx]zsxx[li;rlilix]
+x[liNx]zsxx#! /bin/dc
+0sm[Nx]0sm[]zsWx[li]zsPx[Nxx]0sm[]x[li]zsGx[Nx]0sm[]zsdc
+0sm[Nx]0sm[]zsWx[li]zsGx[Nx]0sm[]zsW#!sdc
+0sm[Nx]0sm[]zsWx[li]zsGx[Nx]0sm[]zsW#! /bin/dc
+0sm[Nx]0s_@]zsWx[li]zs^x[lili100>Nx]0sm[]zsWx[liNx]zsxx[li;rlilix]
+x[liNx]zsxx#! /bin/dc
+0sm[Nx]0sm[]zsWx[li]zsPx[Nx]0sm[]zsdc
+0sm[Nx]0sm[]x[li]zsGx[Nx]0sm[]zsdc
+0sm[Nx]0sm[]zsWx[li]zsGx[Nx]0sm[]zsW#! /bin/dc
+0sm[Nx]0s_[]zsWx[li]zs^x[lili100>Nx]0sm[]zsWx[liNx]zsxx[li;rlilix]
+x[liNx]zsxx#! /bin/dc
+0sm[Nx]0sm[]zsWx[li]zsPx[Nx]0sm[]zsdc
+0sm[Nx]0sm[]zÂ…Wx[li]zsGd[Nx]0sm[]zsWx[li]zsGx[Nx]0sm[]zsW#! /Wx[li]zs^x[Nx]0s_[]zsWx[li]zs^x[lili100>Nx]0sm[]zs]0sm[]zsdc
diff --git a/tests/dc/errors/11.txt b/tests/dc/errors/11.txt
new file mode 100644
index 000000000000..b2fa5d291941
--- /dev/null
+++ b/tests/dc/errors/11.txt
@@ -0,0 +1,4 @@
+#! /bin/dc
+[[Done!]aa]sM[lip1-si0li>LeM]sL10silLx
+[[Done!]pR]sM[]sL10silLx
+[R]sM[lip=`eM]sL;Lx
diff --git a/tests/dc/errors/12.txt b/tests/dc/errors/12.txt
new file mode 100644
index 000000000000..711f970c8615
--- /dev/null
+++ b/tests/dc/errors/12.txt
@@ -0,0 +1,5 @@
+1;'9R 0si[lid1+silv14l*rliP+{Kla1;0>xli1+sililiSi1+sili14li?-si0!>x]li1162 2346dvdddd;ddddddddddddd?-sdddddddddd0+ddd 1+pR
+0dvdddd;ddSddddddddddd 0si[lid1+sil1sili14li?-si]dsxx[li;00!>x]li1162 2346dvddddddddddddddddddddddddd0 0+ddd 1+pR
+0 0 0+ddddvdddd;ddddddddddddddddddddddd;9R
+0!0 0+ddd 1+pR
+0
diff --git a/tests/dc/errors/13.txt b/tests/dc/errors/13.txt
new file mode 100644
index 000000000000..5737fd6d9a7c
--- /dev/null
+++ b/tests/dc/errors/13.txt
@@ -0,0 +1,17 @@
+zp198[Oelln, Wor\W!]pppppppppppppppR
+_1 _1(pR
+_1 _2(pR
+2 1{pR
+_1 1{pR 999+pR
+2374623 324869356734856+pR
+2378639084aaaaaaaaaaaaaaxaaaaaaaaaaaaaaR
+3729836720397239510836791082346529K084561329084561390845613409516734503870691837451 78562139198467134908618723249671349062187346898241093486139046139084613490817356023871869102746999999061872609129847+pR
+1.1 0+pR
+0 1.1+pR
+457283.731284923576 37842934672834.3874629385672354+pR
+1.0 0.1+pR
+3746289134067138046 0.138375863945R72398456712389456273486293+pR
+_1 _1+pR
+_4 _15+pR
+_1346782 _1287904651762468913476+pR
+99999999999999999999999999999999999999999999999999999999999.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999N9 0.000000000000000000000000000000000000ßßßßßßßßßßßßßßßßßßßßßßßßßßß000000000000000000000000000000000000000000000000000000000000000000000000000000000001+pR
diff --git a/tests/dc/errors/14.txt b/tests/dc/errors/14.txt
new file mode 100644
index 000000000000..c84b2b60ae06
--- /dev/null
+++ b/tests/dc/errors/14.txt
@@ -0,0 +1,7 @@
+0bpR
+1bpR
+.218933bpR
+138963.9873645bpR
+_19bpR
+_.1298376bpR
+_3892173.289375bpR: \ No newline at end of file
diff --git a/tests/dc/errors/15.txt b/tests/dc/errors/15.txt
new file mode 100644
index 000000000000..adb809dcca3d
--- /dev/null
+++ b/tests/dc/errors/15.txt
@@ -0,0 +1,11 @@
+0bpax1bpR
+1bpR
+.218933b987pR
+_19bp/98
+_38_.1/19bp38_.1/98
+_38921.1/98/98
+_38_.1/98
+_38921.1/98
+98
+_38921.1/98
+73.289 75bpu
diff --git a/tests/dc/errors/16.txt b/tests/dc/errors/16.txt
new file mode 100644
index 000000000000..1eef81b7317e
--- /dev/null
+++ b/tests/dc/errors/16.txt
@@ -0,0 +1,7 @@
+0 0;^dddddRps.R@s.16dddRRd^2ddRZ(b-P;;$p;;;;;;9;;;;;;$ppppppppppppp33
+_
+1 0+pR
+2 5+pR
+)37 =8M+p[
+999 999+ÿR
+237 \ No newline at end of file
diff --git a/tests/dc/errors/17.txt b/tests/dc/errors/17.txt
new file mode 100644
index 000000000000..dde24cc76040
--- /dev/null
+++ b/tests/dc/errors/17.txt
@@ -0,0 +1,21 @@
+0 1(pR
+1;;;;;pR
+1
+0 18d[963.9873R
+0 1894^666666696666666666PH66R]sM[liv1-si0li!<LpR
+_1 0{pR
+_1 _1{pR
+_1 f2872917389671.7573280963748_13784962873546.09287293954765~pRpR
+_23745861923467.874675129834675 _0.23542357869124756~pRpR
+_3878923750692883.7238596702834756902 _7384192674957215364986723.973F461923487621983~pRpR23873204 356489645223.76076045304879030~pRpR
+_35872917389671.75732809637
+1 0.071.75732809637
+1 0.000000000000000000000000000000000000000000000000000000000000000234672x37293735888888888888888888888888888888$88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888488888888<8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888884986723.973F461923487621983~pRpR23873204 356489645223.76076045304879030~pRpR
+_35872917389671.75732809637
+1 0.071.75732809637
+1 0.000000000000000000000000000000000000000000000000000000000000000234672837293735888888888888888888888888888888$88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888488888888<888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888S8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888Z888888888888
+_14pR
+=398NpR
+_2983
+48895 5067C 2i>LeM]sL1@silLx
+[[ \ No newline at end of file
diff --git a/tests/dc/errors/18.txt b/tests/dc/errors/18.txt
new file mode 100644
index 000000000000..685b251165db
--- /dev/null
+++ b/tests/dc/errors/18.txt
@@ -0,0 +1,3 @@
+1o VVf[li;WORli1S/Zli1;rORli1dH|2li@d-NliO+rK28729@9547628O745/pR
+_29307546189299999999999999999999999999999999999995 0.00000000000000000000000000009999999999999999999+99$9999999999.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999995 0.0000000000000000000000000000000000R0000000000000000000000000000000000000+0000000000000000-0000000000000000000005+pR
+99999999999999999999999999999999999999999999999999999999999.999999999999999999999.99999999999999999999999999999999999999999900000000000000000000000R0000000000000000000000000000000000000+0000000000000000-0000000000000000000005+pR999999999999999999999999999999999999999999 0.00000000000000000000000000000000000000000000000000000000000C0020P00000000000000000000000000000000000007fli1+7fli1+si;d7dli1+si;r=Rls1d:Mli +i100>x]dsxx[l!Wxr>x]dsxx[p!Wx]li17396719 00000000001+pR
diff --git a/tests/dc/errors/19.txt b/tests/dc/errors/19.txt
new file mode 100644
index 000000000000..defb1546c625
--- /dev/null
+++ b/tests/dc/errors/19.txt
Binary files differ
diff --git a/tests/dc/errors/20.txt b/tests/dc/errors/20.txt
new file mode 100644
index 000000000000..e6126f0b39f2
--- /dev/null
+++ b/tests/dc/errors/20.txt
@@ -0,0 +1,9 @@
+#!rpR
+I21PPrP PPPP PPsPdaP1:bpR
+ PPPPdPP1d:bpRR
+I21PPrP PPPP PPsPdaP1:bpR
+ PPPPdPP asrp#! asrpR
+I21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;PPPPdPP1d:bpRR
+I21PPrP PPPP PPsPdaP1:bpR
+ PPPPdPP asrp#! asrpR
+I21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Y;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;>;;;;;;;;;;;;2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Y;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; \ No newline at end of file
diff --git a/tests/dc/errors/21.txt b/tests/dc/errors/21.txt
new file mode 100644
index 000000000000..1a6e5c05b0ce
--- /dev/null
+++ b/tests/dc/errors/21.txt
@@ -0,0 +1,7 @@
+0bpR
+1bpR
+.218933bpR
+138963.9873645bpR
+S19bpR
+_.1298376bpR
+_3892173.289375bpR
diff --git a/tests/dc/errors/22.txt b/tests/dc/errors/22.txt
new file mode 100644
index 000000000000..23d5e2c37808
--- /dev/null
+++ b/tests/dc/errors/22.txt
@@ -0,0 +1,37 @@
+[Hello, World!]ZpR
+[HepR
+[Hello, \[ World!]pR
+[Hello, \] World!]ZpR
+[Hello, \] World!]pR
+[30pR]
+f29pR]
+[28pR]
+[27pR]
+[26pR]
+[25pR]
+[24pR]
+[23pR]
+[22pR]
+[21pR]
+[20pR]
+[19pR]
+[18pR]
+[17pR]
+[16pR]
+[15pR]
+[14pR]
+[13pR]
+[12pR]
+[11pR]
+[10pR]
+[9pR]
+[8pR]
+[7pR]
+[6pR]
+[5pR]
+[4pR]
+[3pR]
+[2pR]
+[1pR]
+[xz0<x]dsxx
+[\ \ No newline at end of file
diff --git a/tests/dc/errors/23.txt b/tests/dc/errors/23.txt
new file mode 100644
index 000000000000..bba814851f94
--- /dev/null
+++ b/tests/dc/errors/23.txt
Binary files differ
diff --git a/tests/dc/errors/24.txt b/tests/dc/errors/24.txt
new file mode 100644
index 000000000000..cc0750c6fd35
--- /dev/null
+++ b/tests/dc/errors/24.txt
@@ -0,0 +1 @@
+ [] 0:xX:i 0:iX:in/dc.873C45}pR
diff --git a/tests/dc/misc.txt b/tests/dc/misc.txt
new file mode 100644
index 000000000000..c1e7f9fd4070
--- /dev/null
+++ b/tests/dc/misc.txt
@@ -0,0 +1,2 @@
+zp198202389.289374pzp[Hello, World!]pzpzpfrfczpfR
+1n1pR
diff --git a/tests/dc/misc_results.txt b/tests/dc/misc_results.txt
new file mode 100644
index 000000000000..512944a3fc1f
--- /dev/null
+++ b/tests/dc/misc_results.txt
@@ -0,0 +1,21 @@
+0
+198202389.289374
+2
+Hello, World!
+4
+5
+5
+4
+Hello, World!
+2
+198202389.289374
+0
+4
+5
+Hello, World!
+2
+198202389.289374
+0
+0
+0
+11
diff --git a/tests/dc/modexp.txt b/tests/dc/modexp.txt
new file mode 100644
index 000000000000..a6afb998558e
--- /dev/null
+++ b/tests/dc/modexp.txt
@@ -0,0 +1,103 @@
+0 0 1|pR
+1 0 1|pR
+1 0 2|pR
+0 10 1|pR
+1 293 1|pR
+1 2789365 2|pR
+100 8 7|pR
+10922384 15031007 201|pR
+3346529 189 254|pR
+4113416930 197 14|pR
+7709 5887 111|pR
+5487406 3252 128|pR
+2080527 2279453822 219|pR
+48895 50678 232|pR
+1535808383 2902995144 18|pR
+8437837 2882198 69|pR
+35363 25806 2|pR
+3221177403 1560419989 189|pR
+227 42775 163|pR
+2811398069 37500 173|pR
+15046850 3859895697 195|pR
+15770756 3621999893 119|pR
+6937927 3719297189 183|pR
+12573 43819 209|pR
+42098463 7584603 136|pR
+8656683 1328292415 226|pR
+209 81 157|pR
+141 13317429 26|pR
+809485795 60745 101|pR
+4882 1388217898 38|pR
+750704 78 119|pR
+668879580 2888860497 179|pR
+1152725844 15295742 154|pR
+16160694 8981529 154|pR
+216 102 3|pR
+3691227289 5344109 232|pR
+2195559299 61 222|pR
+2478990626 13007440 30|pR
+45083 44 117|pR
+224 55824 53|pR
+1372700133 89 94|pR
+205 10422 48|pR
+11887 12 73|pR
+5955 24353 114|pR
+1201697310 789722419 6|pR
+56577 231 229|pR
+96 38841 189|pR
+6529661 5636520 209|pR
+11005 15955685 27|pR
+9709 231 132|pR
+59790 1034579699 166|pR
+47892 14536879 79|pR
+48 208 21|pR
+33036 3877 65|pR
+164 6527085 249|pR
+12146850 224 37|pR
+218 16425679 62|pR
+51 27641 95|pR
+3076735605 49154 32|pR
+515652717 4117874315 143|pR
+300672671 720768884 110|pR
+9422066 206 5|pR
+43 97 13|pR
+545174510 65319 126|pR
+3317462730 704990271 51|pR
+47316 23231 202|pR
+7236571 4379567 106|pR
+2584584521 2459274189 29|pR
+61562 5035178 178|pR
+65302 112 151|pR
+63040 2168854052 213|pR
+9039611 2370306559 62|pR
+16414384 1020652061 83|pR
+7491 3853569905 172|pR
+1180322494 46670 84|pR
+3823343557 3865107254 127|pR
+6240872 55335 39|pR
+2281401897 1098411 251|pR
+61 2949190429 231|pR
+8981024 162 43|pR
+1 3568883218 212|pR
+4217100969 3471787779 8|pR
+3232237 13 243|pR
+29280 3972452706 100|pR
+13077 6431923 216|pR
+104 3098510775 140|pR
+9503298 174 242|pR
+3424695712 12184 23|pR
+184 15066347 151|pR
+2935856 14003205 184|pR
+1386637762 2128151420 71|pR
+154 11960656 12|pR
+743976432 4004778779 136|pR
+3909160595 3575680922 21|pR
+26133 3580 147|pR
+409154 170 68|pR
+149 55629 40|pR
+5753 13776176 32|pR
+3831447473 658273178 98|pR
+1527252003 2300622 207|pR
+3363824553 8244645 215|pR
+20 145 101|pR
+4005077294 2196555621 94|pR
diff --git a/tests/dc/modexp_results.txt b/tests/dc/modexp_results.txt
new file mode 100644
index 000000000000..5bf0f146e967
--- /dev/null
+++ b/tests/dc/modexp_results.txt
@@ -0,0 +1,103 @@
+1
+1
+1
+0
+0
+1
+4
+74
+1
+0
+98
+0
+72
+1
+1
+1
+1
+108
+36
+52
+65
+8
+181
+22
+7
+123
+93
+21
+17
+20
+1
+108
+58
+22
+0
+105
+161
+16
+40
+15
+45
+25
+64
+69
+0
+225
+27
+1
+22
+73
+92
+38
+15
+16
+173
+33
+32
+21
+25
+109
+71
+1
+4
+62
+15
+90
+29
+5
+40
+84
+40
+53
+8
+31
+64
+44
+14
+13
+145
+1
+1
+1
+76
+0
+189
+104
+192
+9
+119
+56
+45
+4
+32
+16
+135
+4
+29
+1
+49
+0
+128
+6
+18
diff --git a/tests/dc/modulus.txt b/tests/dc/modulus.txt
new file mode 100644
index 000000000000..613944b2001a
--- /dev/null
+++ b/tests/dc/modulus.txt
@@ -0,0 +1,70 @@
+20k
+1 1%pR
+2 1%pR
+16 4%pR
+15 4%pR
+17 4%pR
+2389473 5%pR
+39240687239 1%pR
+346728934 23958%pR
+3496723859067234 298375462837546928347623059375486%pR
+_1 1%pR
+_2 1%pR
+_47589634875689345 37869235%pR
+_1274852934765 2387628935486273546%pR
+_6324758963 237854962%pR
+1 _1%pR
+2 _1%pR
+2 _2%pR
+2 _3%pR
+16 5%pR
+15 5%pR
+14 5%pR
+89237423 _237856923854%pR
+123647238946 _12467%pR
+_1 _1%pR
+_2 _1%pR
+_2 _2%pR
+_2 _3%pR
+_13 _7%pR
+_14 _7%pR
+_15 _7%pR
+_12784956 _32746%pR
+_127849612 _23712347682193%pR
+0k
+1 1%pR
+2 1%pR
+16 4%pR
+15 4%pR
+17 4%pR
+2389473 5%pR
+39240687239 1%pR
+346728934 23958%pR
+3496723859067234 298375462837546928347623059375486%pR
+_1 1%pR
+_2 1%pR
+_47589634875689345 37869235%pR
+_1274852934765 2387628935486273546%pR
+_6324758963 237854962%pR
+1 _1%pR
+2 _1%pR
+2 _2%pR
+2 _3%pR
+16 5%pR
+15 5%pR
+14 5%pR
+89237423 _237856923854%pR
+123647238946 _12467%pR
+_1 _1%pR
+_2 _1%pR
+_2 _2%pR
+_2 _3%pR
+_13 _7%pR
+_14 _7%pR
+_15 _7%pR
+_12784956 _32746%pR
+_127849612 _23712347682193%pR
+_3191280681 641165986%pR
+0k _899510228 _2448300078.40314%pR
+0k _7424863 _207.2609738667%pR
+0k 3769798918 0.6%pR
diff --git a/tests/dc/modulus_results.txt b/tests/dc/modulus_results.txt
new file mode 100644
index 000000000000..7d718d22a439
--- /dev/null
+++ b/tests/dc/modulus_results.txt
@@ -0,0 +1,68 @@
+0
+0
+0
+0
+0
+0
+0
+.00000000000000002026
+2747189239559.46904933397471305894
+0
+0
+-.00000000000011057855
+-.00076922992566770712
+-.00000000000050364144
+0
+0
+0
+.00000000000000000002
+0
+0
+0
+.00000000070585524350
+.00000000000000002898
+0
+0
+0
+-.00000000000000000002
+-.00000000000000000005
+0
+-.00000000000000000002
+-.00000000000000011722
+-.00000002640923745817
+0
+0
+0
+3
+1
+3
+0
+8758
+3496723859067234
+0
+0
+-8236960
+-1274852934765
+-140529951
+0
+0
+0
+2
+1
+0
+4
+89237423
+6692
+0
+0
+0
+-2
+-6
+0
+-1
+-14016
+-127849612
+-626616737
+-899510228.00000
+-153.1331732059
+.4
diff --git a/tests/dc/multiply.txt b/tests/dc/multiply.txt
new file mode 100644
index 000000000000..b4faac28b243
--- /dev/null
+++ b/tests/dc/multiply.txt
@@ -0,0 +1,43 @@
+0k
+0 0*pR
+0.000 0*pR
+1 0*pR
+0 1*pR
+0 2498752389672835476*pR
+873246913745129084576134 0*pR
+1 472638590273489273456*pR
+12374861230476103672835496 1*pR
+1 1*pR
+2 1*pR
+1 2*pR
+2 2*pR
+3 14*pR
+17 8*pR
+1892467513846753 1872439821374591038746*pR
+328962735862.2973546835638947635 1728465791348762356*pR
+38745962374538.387427384672934867234 0.1932476528394672837568923754*pR
+9878894576289457634856.2738627161689017387608947567654 37842939768237596237854203.29874372139852739126739621793162*pR
+_1 1*pR
+_1 2*pR
+78893457 _34876238956*pR
+235678324957634 _0.2349578349672389576*pR
+_12849567821934 12738462937681*pR
+1274861293467.927843682937462 _28935678239*pR
+2936077239872.12937462836 _0.012842357682435762*pR
+2387692387566.2378569237546 _272189345628.123875629835876*pR
+0.012348629356782835962 _23487692356*pR
+0.4768349567348675934 _0.23756834576934857638495*pR
+0.98748395367485962735486 _4675839462354867.376834956738456*pR
+_321784627934586 _235762378596*pR
+_32578623567892356 _0.32567384579638456*pR
+_35768232346876 _2348672935602387620.28375682349576237856*pR
+_0.2356728394765234 _238759624356978*pR
+_0.2345768212346780 _0.235768124697074385948943532045*pR
+_0.370873860736785306278630 _7835678398607.7086378076867096270*pR
+_78365713707.7089637863786730 _738580798679306780*pR
+_73867038956790490258249 _0.7379862716391723672803679*pR
+_378621971598721837710387 _98465373878350798.09743896037963078560*pR
+37164201 2931559660*pR
+679468076118972457796560530571.46287161642138401685 93762.2836*pR
+.000000000000000000000000001 .0000000000000000000000001*pR
+239 289 _98 .8937 _.1893 28937*****pR
diff --git a/tests/dc/multiply_results.txt b/tests/dc/multiply_results.txt
new file mode 100644
index 000000000000..9666059a5848
--- /dev/null
+++ b/tests/dc/multiply_results.txt
@@ -0,0 +1,43 @@
+0
+0
+0
+0
+0
+0
+472638590273489273456
+12374861230476103672835496
+1
+2
+2
+4
+42
+136
+3543531533584430580556128344529291738
+568600835566479683035874339053.4411638427543228060
+7487566285885.8557453089005171423976251098
+373846412427291014394738378015501363938345620046.7869650248829232267\
+2297002026819
+-1
+-2
+-2751507058396910892
+-55374468980751.0837656919743223184
+-163683743464924630346895054
+-36888976187143312550878.567134791289418
+-37706154097.696628262157533781
+-649904428532907022680241.947918694247541
+-290040807.350385412976669306472
+-.11328089187650139309272
+-4617316439035114.40320367843985107357898
+75864709277486862054521256
+10610005628108234.92015040406042336
+84007879267445533366251128067927.91168012197674537856
+56269158624557.1027018519702852
+.055305737239900889424090264801
+2906048299183.472237078104362540110129
+57879411419313585866282299201.3825582163029400
+54512860676747314187949.9414724679950990587298071
+37281153992026463004361915151761464058058.54968338992209002720
+108949072447731660
+63708478450213482928510139572007971.83536929222529239687
+0
+33137343861.8586
diff --git a/tests/dc/negate.txt b/tests/dc/negate.txt
new file mode 100644
index 000000000000..f4a3825ec72f
--- /dev/null
+++ b/tests/dc/negate.txt
@@ -0,0 +1,3 @@
+1_pR
+2_pR
+129837.218092_pR
diff --git a/tests/dc/negate_results.txt b/tests/dc/negate_results.txt
new file mode 100644
index 000000000000..e58abbf70d91
--- /dev/null
+++ b/tests/dc/negate_results.txt
@@ -0,0 +1,3 @@
+-1
+-2
+-129837.218092
diff --git a/tests/dc/places.txt b/tests/dc/places.txt
new file mode 100644
index 000000000000..9ba686e2d628
--- /dev/null
+++ b/tests/dc/places.txt
@@ -0,0 +1,16 @@
+0 0@pR
+1 0@pR
+2 0@pR
+0.0023896 0@pR
+1.298346 0@pR
+2.00000000 0@pR
+0.0023896 3@pR
+1.298346 4@pR
+2.00000000 5@pR
+289 3@pR
+18.34 6@pR
+_183.1 0@pR
+_23.238 8@pR
+_343.23 2@pR
+_.1897263 0@pR
+.1982365 0@pR
diff --git a/tests/dc/places_results.txt b/tests/dc/places_results.txt
new file mode 100644
index 000000000000..1ca49ae89932
--- /dev/null
+++ b/tests/dc/places_results.txt
@@ -0,0 +1,16 @@
+0
+1
+2
+0
+1
+2
+.002
+1.2983
+2.00000
+289.000
+18.340000
+-183
+-23.23800000
+-343.23
+0
+0
diff --git a/tests/dc/power.txt b/tests/dc/power.txt
new file mode 100644
index 000000000000..7e75a91c78a3
--- /dev/null
+++ b/tests/dc/power.txt
@@ -0,0 +1,44 @@
+20k
+0 0^pR
+0 1^pR
+0 1894^pR
+1 0^pR
+39746823 0^pR
+0.238672983047682 0^pR
+18394762374689237468.97354862973846 0^pR
+1 1^pR
+2 1^pR
+18927361346 1^pR
+0.23523785962738592635777 1^pR
+328956734869213746.89782398457234 1^pR
+8937 98^pR
+0.124876812394 2396^pR
+93762.2836 13^pR
+1 _1^pR
+2 _1^pR
+10 _1^pR
+683734768 _1^pR
+38579623756.897937568235 _1^pR
+1 _32467^pR
+2 _53^pR
+23897 _213^pR
+_1 1^pR
+_1 2^pR
+_2 1^pR
+_2 2^pR
+_237 294^pR
+_3746 28^pR
+_0.3548 35^pR
+_4267.234 37^pR
+_326.3246 78^pR
+_1 _1^pR
+_1 _2^pR
+_2 _1^pR
+_2 _2^pR
+_237 _293^pR
+_784 _23^pR
+_86 _7^pR
+_0.23424398 _781^pR
+_178.234786 _879^pR
+_1274.346 _768^pR
+_0.2959371298 227^pR
diff --git a/tests/dc/power_results.txt b/tests/dc/power_results.txt
new file mode 100644
index 000000000000..280347a9f258
--- /dev/null
+++ b/tests/dc/power_results.txt
@@ -0,0 +1,72 @@
+1
+0
+0
+1
+1
+1
+1
+1
+2
+18927361346
+.23523785962738592635777
+328956734869213746.89782398457234
+16473742664221279051571200630760751138799221376964991600670000200609\
+08006052596520320731708604393844468006290371918262741885989163144389\
+39367835091560809036359941703341471396407660150658436796925310445979\
+21333166245765946557344383284626113908419359990042883048537750217279\
+17481980123593363177308481941550382845381799410533956718500484099889\
+610805653325917409549921909941664118421333562129
+0
+43287877285033571298394739716218787350087163435619825150259705419.98\
+016445740928054425
+1.00000000000000000000
+.50000000000000000000
+.10000000000000000000
+.00000000146255543348
+.00000000002592041867
+1.00000000000000000000
+.00000000000000011102
+0
+-1
+1
+-2
+4
+14997322375665265051328725757939209353051902095893907150382724666290\
+49749481660976421019742616298227588464420182758442163654172400528243\
+00885441207762486233574213374503090372518590691583139696652847404883\
+08573912261119588874308960204159666762789603037188471170006223907416\
+60492840269152716750700089148882139254399347568222390231015487895905\
+73727080561379177721440905866857248917982113340543176658480139248897\
+54802503253413282808814063861470711399810899724515727713334909764746\
+27910290211411231279325882505708287941671508154740003122373284699097\
+78346501539634198926772266511968381368929692275950529960923432771985\
+12597189390708050983487158873301681237787429436264801751664042999180\
+3448659818912436089
+11478830555358864333472551120140548480416206583184496764727387456058\
+792742209537931243951391229607936
+-.00000000000000017759
+-2067373624686414405470850679965010694114490999957199847684803894306\
+56243666149296582304582679590231948238805965642713928910384741502707\
+.23224479257866798694
+11606078892843496082360561256965139908586179418605021706789617179085\
+85768049299693425729565480314913006780973928345684673490252494674985\
+0186164225375953066263609289359900615361965737717208159874390.293769\
+70206344604971
+-1.00000000000000000000
+1.00000000000000000000
+-.50000000000000000000
+.25000000000000000000
+0
+0
+-.00000000000002874159
+-1945134149489344891879057554905782841936258356736314337975569799825\
+94091939572752348215929683891336730843553721422164737465108229034947\
+87333189564755763444242676978610321731298729194092653999616928308494\
+26419468484566422775668903315088810746121307679948574976162519479931\
+18935243698160094347216562490000767121041786977792546155155934655909\
+14123833869470494708767968978717730012864171105540029928688274136791\
+98175053824022144065005509214813689232148489884560100200475909009813\
+340098100705258138.98542904577525702068
+0
+0
+0
diff --git a/tests/dc/rand.txt b/tests/dc/rand.txt
new file mode 100644
index 000000000000..250da02db3c8
--- /dev/null
+++ b/tests/dc/rand.txt
@@ -0,0 +1 @@
+J ss ' sr lr " st ls j ' lr GpR lr " lt GpR W W GpR
diff --git a/tests/dc/rand_results.txt b/tests/dc/rand_results.txt
new file mode 100644
index 000000000000..e8183f05f5db
--- /dev/null
+++ b/tests/dc/rand_results.txt
@@ -0,0 +1,3 @@
+1
+1
+1
diff --git a/tests/dc/read.txt b/tests/dc/read.txt
new file mode 100644
index 000000000000..9204d0a378e0
--- /dev/null
+++ b/tests/dc/read.txt
@@ -0,0 +1 @@
+3 4^pR
diff --git a/tests/dc/read_errors.txt b/tests/dc/read_errors.txt
new file mode 100644
index 000000000000..dd2f324e235d
--- /dev/null
+++ b/tests/dc/read_errors.txt
@@ -0,0 +1,2 @@
+
+?
diff --git a/tests/dc/read_results.txt b/tests/dc/read_results.txt
new file mode 100644
index 000000000000..d88e31369987
--- /dev/null
+++ b/tests/dc/read_results.txt
@@ -0,0 +1 @@
+81
diff --git a/tests/dc/scientific.txt b/tests/dc/scientific.txt
new file mode 100644
index 000000000000..59a78dbb3a6c
--- /dev/null
+++ b/tests/dc/scientific.txt
@@ -0,0 +1,51 @@
+0e0pR
+0e1pR
+0e5pR
+0e_2pR
+0e_100pR
+1e0pR
+_1e1pR
+1e9pR
+_1e21pR
+1e_1pR
+_1e_2pR
+1e_5pR
+4.92837e5pR
+_3.28971028e20pR
+6.2e3pR
+_8.289371e2pR
+5.9817280937e8pR
+_3.28977e_1pR
+8.8927891e_20pR
+_7.98239e_4pR
+4.4892e_4pR
+_18937e0pR
+198273e10pR
+_18927e_4pR
+28937e_5pR
+_891072e_7pR
+.28972e0pR
+_.891273e_1pR
+.8928397e1pR
+_.0002983172e5pR
+.00022e3pR
+_.00022e4pR
+.0000328937e8pR
+0o
+0pR
+1pR
+10pR
+_289pR
+2894pR
+_89434pR
+894370pR
+_1239839pR
+28931708pR
+_8052098.8029731809pR
+.1pR
+_.01pR
+.001pR
+_.00038pR
+.0000483pR
+_.0002894378190pR
+.2893712083pR
diff --git a/tests/dc/scientific_results.txt b/tests/dc/scientific_results.txt
new file mode 100644
index 000000000000..557fcf61fe5e
--- /dev/null
+++ b/tests/dc/scientific_results.txt
@@ -0,0 +1,50 @@
+0
+0
+0
+0
+0
+1
+-10
+1000000000
+-1000000000000000000000
+.1
+-.01
+.00001
+492837
+-328971028000000000000
+6200
+-828.9371
+598172809.37
+-.328977
+.000000000000000000088927891
+-.000798239
+.00044892
+-18937
+1982730000000000
+-1.8927
+.28937
+-.0891072
+.28972
+-.0891273
+8.928397
+-29.83172
+.22
+-2.2
+3289.37
+0
+1e0
+1.0e1
+-2.89e2
+2.894e3
+-8.9434e4
+8.94370e5
+-1.239839e6
+2.8931708e7
+-8.0520988029731809e6
+1e-1
+-1e-2
+1e-3
+-3.8e-4
+4.83e-5
+-2.894378190e-4
+2.893712083e-1
diff --git a/tests/dc/scripts/array.dc b/tests/dc/scripts/array.dc
new file mode 100755
index 000000000000..5accb118eb69
--- /dev/null
+++ b/tests/dc/scripts/array.dc
@@ -0,0 +1,3 @@
+#! /usr/bin/dc
+0si[lid:rli1+sili100>x]dsxxli1-si[li;rpRli1-sili0!>x]dsxxli1+si[li;rpRli1+sili100>x]dsxx
+0 0:a 1 1:a 2 2:a 0;a 1;a 2;a |pR
diff --git a/tests/dc/scripts/array.txt b/tests/dc/scripts/array.txt
new file mode 100644
index 000000000000..a0a2fd6f9d30
--- /dev/null
+++ b/tests/dc/scripts/array.txt
@@ -0,0 +1,201 @@
+99
+98
+97
+96
+95
+94
+93
+92
+91
+90
+89
+88
+87
+86
+85
+84
+83
+82
+81
+80
+79
+78
+77
+76
+75
+74
+73
+72
+71
+70
+69
+68
+67
+66
+65
+64
+63
+62
+61
+60
+59
+58
+57
+56
+55
+54
+53
+52
+51
+50
+49
+48
+47
+46
+45
+44
+43
+42
+41
+40
+39
+38
+37
+36
+35
+34
+33
+32
+31
+30
+29
+28
+27
+26
+25
+24
+23
+22
+21
+20
+19
+18
+17
+16
+15
+14
+13
+12
+11
+10
+9
+8
+7
+6
+5
+4
+3
+2
+1
+0
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+0
diff --git a/tests/dc/scripts/asciify.dc b/tests/dc/scripts/asciify.dc
new file mode 100755
index 000000000000..7db61210c831
--- /dev/null
+++ b/tests/dc/scripts/asciify.dc
@@ -0,0 +1,7 @@
+#! /usr/bin/dc
+# To compare:
+# cmp -l .log_dc.txt .log_dc_test.txt | gawk '{printf "%08X %02X %02X\n", $1, strtonum(0$2), strtonum(0$3)}'
+_48apR
+20k
+1 1%aR
+0si[liapRlid1+sili65536>x]ddsxapRx
diff --git a/tests/dc/scripts/asciify.txt b/tests/dc/scripts/asciify.txt
new file mode 100644
index 000000000000..a6af215aa0ea
--- /dev/null
+++ b/tests/dc/scripts/asciify.txt
Binary files differ
diff --git a/tests/dc/scripts/else.dc b/tests/dc/scripts/else.dc
new file mode 100755
index 000000000000..84deb8754e9f
--- /dev/null
+++ b/tests/dc/scripts/else.dc
@@ -0,0 +1,4 @@
+#! /usr/bin/dc
+[[Done!]pR]sM[lip1-si0li>LeM]sL10silLx
+[[Done!]pR]sM[lip1-si0li!<LeM]sL10silLx
+[[Done!]pR]sM[lip1-si0li!=LeM]sL10silLx
diff --git a/tests/dc/scripts/else.txt b/tests/dc/scripts/else.txt
new file mode 100644
index 000000000000..e5c082bd5ac9
--- /dev/null
+++ b/tests/dc/scripts/else.txt
@@ -0,0 +1,34 @@
+10
+9
+8
+7
+6
+5
+4
+3
+2
+1
+Done!
+10
+9
+8
+7
+6
+5
+4
+3
+2
+1
+0
+Done!
+10
+9
+8
+7
+6
+5
+4
+3
+2
+1
+Done!
diff --git a/tests/dc/scripts/factorial.dc b/tests/dc/scripts/factorial.dc
new file mode 100755
index 000000000000..6a751bf61352
--- /dev/null
+++ b/tests/dc/scripts/factorial.dc
@@ -0,0 +1,4 @@
+#! /usr/bin/dc
+[lb1+dsb*plb50>x]sx
+0sb1
+lxx
diff --git a/tests/dc/scripts/factorial.txt b/tests/dc/scripts/factorial.txt
new file mode 100644
index 000000000000..0bd3a30f1556
--- /dev/null
+++ b/tests/dc/scripts/factorial.txt
@@ -0,0 +1,50 @@
+1
+2
+6
+24
+120
+720
+5040
+40320
+362880
+3628800
+39916800
+479001600
+6227020800
+87178291200
+1307674368000
+20922789888000
+355687428096000
+6402373705728000
+121645100408832000
+2432902008176640000
+51090942171709440000
+1124000727777607680000
+25852016738884976640000
+620448401733239439360000
+15511210043330985984000000
+403291461126605635584000000
+10888869450418352160768000000
+304888344611713860501504000000
+8841761993739701954543616000000
+265252859812191058636308480000000
+8222838654177922817725562880000000
+263130836933693530167218012160000000
+8683317618811886495518194401280000000
+295232799039604140847618609643520000000
+10333147966386144929666651337523200000000
+371993326789901217467999448150835200000000
+13763753091226345046315979581580902400000000
+523022617466601111760007224100074291200000000
+20397882081197443358640281739902897356800000000
+815915283247897734345611269596115894272000000000
+33452526613163807108170062053440751665152000000000
+1405006117752879898543142606244511569936384000000000
+60415263063373835637355132068513997507264512000000000
+2658271574788448768043625811014615890319638528000000000
+119622220865480194561963161495657715064383733760000000000
+5502622159812088949850305428800254892961651752960000000000
+258623241511168180642964355153611979969197632389120000000000
+12413915592536072670862289047373375038521486354677760000000000
+608281864034267560872252163321295376887552831379210240000000000
+30414093201713378043612608166064768844377641568960512000000000000
diff --git a/tests/dc/scripts/loop.dc b/tests/dc/scripts/loop.dc
new file mode 100755
index 000000000000..26cec23818df
--- /dev/null
+++ b/tests/dc/scripts/loop.dc
@@ -0,0 +1,3 @@
+#! /usr/bin/dc
+[lip1-si0li>L]sL10silLx
+[lip1+si10li<L]sL0silLx
diff --git a/tests/dc/scripts/loop.txt b/tests/dc/scripts/loop.txt
new file mode 100644
index 000000000000..4029c2f0c126
--- /dev/null
+++ b/tests/dc/scripts/loop.txt
@@ -0,0 +1,20 @@
+10
+9
+8
+7
+6
+5
+4
+3
+2
+1
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
diff --git a/tests/dc/scripts/prime.dc b/tests/dc/scripts/prime.dc
new file mode 100755
index 000000000000..cc769d2bbee1
--- /dev/null
+++ b/tests/dc/scripts/prime.dc
@@ -0,0 +1 @@
+0k2p3p[dl!d2+s!%0=@l!l^!<#]s#[s/0ds^]s@[p]s&[ddvs^3s!l# x0<&2+d100000>.]ds.x
diff --git a/tests/dc/scripts/quit.dc b/tests/dc/scripts/quit.dc
new file mode 100755
index 000000000000..81e6289af25b
--- /dev/null
+++ b/tests/dc/scripts/quit.dc
@@ -0,0 +1,2 @@
+1se [li p 1+si le li !=lem]sl [lk p 1+sk le lk !=o]so [0sk lox leQ 0sk lox le 3*1+Q 0sk lox]sm [0si llx le 1+se 10 le !=n]dsnx
+1si [li p 1+si 10 li !=set]ss [1000Q]st lsx
diff --git a/tests/dc/scripts/quit.txt b/tests/dc/scripts/quit.txt
new file mode 100644
index 000000000000..a2b5201ddc05
--- /dev/null
+++ b/tests/dc/scripts/quit.txt
@@ -0,0 +1,99 @@
+0
+0
+0
+1
+0
+1
+0
+1
+2
+0
+1
+2
+0
+1
+2
+3
+0
+1
+2
+3
+0
+1
+2
+3
+4
+0
+1
+2
+3
+4
+0
+1
+2
+3
+4
+5
+0
+1
+2
+3
+4
+5
+0
+1
+2
+3
+4
+5
+6
+0
+1
+2
+3
+4
+5
+6
+0
+1
+2
+3
+4
+5
+6
+7
+0
+1
+2
+3
+4
+5
+6
+7
+0
+1
+2
+3
+4
+5
+6
+7
+8
+0
+1
+2
+3
+4
+5
+6
+7
+8
+1
+2
+3
+4
+5
+6
+7
+8
+9
diff --git a/tests/dc/scripts/stream.dc b/tests/dc/scripts/stream.dc
new file mode 100755
index 000000000000..6efcfa3820b5
--- /dev/null
+++ b/tests/dc/scripts/stream.dc
@@ -0,0 +1 @@
+0si[liPlid1+sili65536>x]ddsxPx
diff --git a/tests/dc/scripts/weird.dc b/tests/dc/scripts/weird.dc
new file mode 100755
index 000000000000..391ec05d6282
--- /dev/null
+++ b/tests/dc/scripts/weird.dc
@@ -0,0 +1,2 @@
+#! /usr/bin/dc
+zp198202389.289374pzp[He World!]SzpzXfrfxzpfR
diff --git a/tests/dc/scripts/weird.txt b/tests/dc/scripts/weird.txt
new file mode 100644
index 000000000000..d921544766af
--- /dev/null
+++ b/tests/dc/scripts/weird.txt
@@ -0,0 +1,18 @@
+0
+198202389.289374
+2
+2
+0
+2
+198202389.289374
+0
+2
+0
+198202389.289374
+0
+4
+4
+2
+0
+198202389.289374
+0
diff --git a/tests/dc/shift.txt b/tests/dc/shift.txt
new file mode 100644
index 000000000000..628b0a5bf6fe
--- /dev/null
+++ b/tests/dc/shift.txt
@@ -0,0 +1,42 @@
+0 0HpR
+1 0HpR
+2 0HpR
+0.0023896 0HpR
+1.298346 0HpR
+2.00000000 0HpR
+0.0023896 3HpR
+1.298346 4HpR
+2.00000000 5HpR
+89136.892348976 7HpR
+1892634051829351283289298 24HpR
+0 0hpR
+1 0hpR
+2 0hpR
+0.0023896 0hpR
+1.298346 0hpR
+2.00000000 0hpR
+0.0023896 3hpR
+1.298346 4hpR
+2.00000000 5hpR
+89136.892348976 7hpR
+1892634051829351283289298 24hpR
+_1 0HpR
+_2 0HpR
+_0.0023896 0HpR
+_1.298346 0HpR
+_2.00000000 0HpR
+_0.0023896 3HpR
+_1.298346 4HpR
+_2.00000000 5HpR
+_89136.892348976 7HpR
+_1892634051829351283289298 24HpR
+_1 0hpR
+_2 0hpR
+_0.0023896 0hpR
+_1.298346 0hpR
+_2.00000000 0hpR
+_0.0023896 3hpR
+_1.298346 4hpR
+_2.00000000 5hpR
+_89136.892348976 7hpR
+_1892634051829351283289298 24hpR
diff --git a/tests/dc/shift_results.txt b/tests/dc/shift_results.txt
new file mode 100644
index 000000000000..f92831f8f5cf
--- /dev/null
+++ b/tests/dc/shift_results.txt
@@ -0,0 +1,42 @@
+0
+1
+2
+.0023896
+1.298346
+2.00000000
+2.3896
+12983.46
+200000.000
+891368923489.76
+1892634051829351283289298000000000000000000000000
+0
+1
+2
+.0023896
+1.298346
+2.00000000
+.0000023896
+.0001298346
+.0000200000000
+.0089136892348976
+1.892634051829351283289298
+-1
+-2
+-.0023896
+-1.298346
+-2.00000000
+-2.3896
+-12983.46
+-200000.000
+-891368923489.76
+-1892634051829351283289298000000000000000000000000
+-1
+-2
+-.0023896
+-1.298346
+-2.00000000
+-.0000023896
+-.0001298346
+-.0000200000000
+-.0089136892348976
+-1.892634051829351283289298
diff --git a/tests/dc/sqrt.txt b/tests/dc/sqrt.txt
new file mode 100644
index 000000000000..7c13fdd0bb5d
--- /dev/null
+++ b/tests/dc/sqrt.txt
@@ -0,0 +1,14 @@
+20k
+0vpR
+2vpR
+4vpR
+9vpR
+16vpR
+25vpR
+121vpR
+48765vpR
+9287356207356vpR
+0.189274385967238956872354vpR
+12389467137496823.134567829387456283946vpR
+.0000000000000000000000000000123vpR
+1vpR
diff --git a/tests/dc/sqrt_results.txt b/tests/dc/sqrt_results.txt
new file mode 100644
index 000000000000..5ded8c294eec
--- /dev/null
+++ b/tests/dc/sqrt_results.txt
@@ -0,0 +1,13 @@
+0
+1.41421356237309504880
+2.00000000000000000000
+3.00000000000000000000
+4.00000000000000000000
+5.00000000000000000000
+11.00000000000000000000
+220.82798735667542192643
+3047516.39985021245496456781
+.435056761776252544285578
+111307983.260397019622398608908
+.0000000000000035071355833500363
+1.00000000000000000000
diff --git a/tests/dc/stdin.txt b/tests/dc/stdin.txt
new file mode 100644
index 000000000000..e7a575207f69
--- /dev/null
+++ b/tests/dc/stdin.txt
@@ -0,0 +1,3 @@
+0si[lid:rli1+sili10>x]dsxxli1-si[li;rpRli1-sili0!>x]dsxxli1+si[li;rpRli1+sili10>x]dsxx0sx0si
+1 2+p
+[foo]
diff --git a/tests/dc/stdin_results.txt b/tests/dc/stdin_results.txt
new file mode 100644
index 000000000000..52f23dbb4a90
--- /dev/null
+++ b/tests/dc/stdin_results.txt
@@ -0,0 +1,21 @@
+9
+8
+7
+6
+5
+4
+3
+2
+1
+0
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+3
diff --git a/tests/dc/strings.txt b/tests/dc/strings.txt
new file mode 100644
index 000000000000..369d8e1dd842
--- /dev/null
+++ b/tests/dc/strings.txt
@@ -0,0 +1,50 @@
+[Hello, World!]ZpR
+[Hello, World!]pR
+[Hello, \[ World!]ZpR
+[Hello, \[ World!]pR
+[Hello, \] World!]ZpR
+[Hello, \] World!]pR
+[30pR]
+[29pR]
+[28pR]
+[27pR]
+[26pR]
+[25pR]
+[24pR]
+[23pR]
+[22pR]
+[21pR]
+[20pR]
+[19pR]
+[18pR]
+[17pR]
+[16pR]
+[15pR]
+[14pR]
+[13pR]
+[12pR]
+[11pR]
+[10pR]
+[9pR]
+[8pR]
+[7pR]
+[6pR]
+[5pR]
+[4pR]
+[3pR]
+[2pR]
+[1pR]
+[xz0<x]dsxx
+[\\]pR
+[\[\]]pR
+1xpR
+[1st] 0:b [2nd] 1:b 0;b p 1;b p
+[string]XpR
+[3 4^pR]silix
+[[[q 1 3+pR]x]x]x4 5^pR
+4xpR
+5 112ax 90ax 112ax 82ax
+[\q] pR
+[q\\] pR
+[\\] pR
+92 a pR
diff --git a/tests/dc/strings_results.txt b/tests/dc/strings_results.txt
new file mode 100644
index 000000000000..509b105d51f3
--- /dev/null
+++ b/tests/dc/strings_results.txt
@@ -0,0 +1,51 @@
+13
+Hello, World!
+15
+Hello, [ World!
+15
+Hello, ] World!
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+\
+[]
+1
+1st
+2nd
+0
+81
+1024
+4
+5
+1
+q
+q\
+\
+\
diff --git a/tests/dc/subtract.txt b/tests/dc/subtract.txt
new file mode 100644
index 000000000000..2cb4104fb717
--- /dev/null
+++ b/tests/dc/subtract.txt
@@ -0,0 +1,33 @@
+0 0-pR
+0 1-pR
+1 0-pR
+1 1-pR
+5 2-pR
+2 9-pR
+321974 12845976238457-pR
+2874519803456710938465 384723854-pR
+10000000000000000000000000000000000000000 999999999999999999999999999999999999999-pR
+10000000000000000000000000000000000000000 9999999999999999999999999999999999999999-pR
+10000000000000000000000000000000000000000 999999999999999999999999999999999999999.99999999999999999999999999999999999-pR
+10000000000000000000000000000000000000000 9999999999999999999999999999999999999999.9999999999999999999999999999999999-pR
+10000000000000000000000000000000000000000 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000001-pR
+10000000000000000000000000000000000000001 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000001-pR
+10000000000000000000000000000000000000000.0000000001 0.0000000000000000000000000000000000000000000000000000000000000000000000000001-pR
+_2 6-pR
+_23784692345 182934721309467230894628735496027345-pR
+_224352354962873059862 _1245723576829456278354960278345-pR
+_3468273598 _12354243-pR
+_0.92345768293 _2354768923-pR
+_712384634.123476823 _24768293376-pR
+_1879234638 _0.917234869234-pR
+_0.9172438692134 _0.971284967124-pR
+_0.1283475123465 _0.937462346-pR
+_124765829346.2837468293562 _0.923467829346-pR
+_12476829385769 _1928476259034.8378629356-pR
+_0.38476284395876345 _94875394587623.2357869324857-pR
+_4674596708467.34754789403674343567 _48672394852354698.237548629345-pR
+979519669 3018100865-pR
+929002449 3280677283-pR
+0 _525898-pR
+3 _3-pR
+2 _1 2893714 _2189367411289 _.8921374 3.9201384----pR
diff --git a/tests/dc/subtract_results.txt b/tests/dc/subtract_results.txt
new file mode 100644
index 000000000000..9f772625422e
--- /dev/null
+++ b/tests/dc/subtract_results.txt
@@ -0,0 +1,37 @@
+0
+-1
+1
+0
+3
+-7
+-12845975916483
+2874519803456326214611
+9000000000000000000000000000000000000001
+1
+9000000000000000000000000000000000000000.000000000000000000000000000\
+00000001
+.0000000000000000000000000000000001
+9999999999999999999999999999999999999999.999999999999999999999999999\
+99999999999999999999999999999999999999999999999999999999999
+10000000000000000000000000000000000000000.99999999999999999999999999\
+999999999999999999999999999999999999999999999999999999999999
+10000000000000000000000000000000000000000.00000000009999999999999999\
+99999999999999999999999999999999999999999999999999
+-8
+-182934721309467230894628759280719690
+1245723576605103923392087218483
+-3455919355
+2354768922.07654231707
+24055908741.876523177
+-1879234637.082765130766
+.0540410979106
+.8091148336535
+-124765829345.3602790000102
+-10548353126734.1621370644
+94875394587622.85102408852693655
+48667720255646230.89000073530825656433
+-2038581196
+-2351674834
+525898
+6
+-2189370304999.1877242
diff --git a/tests/dc/trunc.txt b/tests/dc/trunc.txt
new file mode 100644
index 000000000000..684752e065dd
--- /dev/null
+++ b/tests/dc/trunc.txt
@@ -0,0 +1,11 @@
+0$pR
+1$pR
+2$pR
+0.8249167203486$pR
+1.28937150237$pR
+2.0$pR
+28937.92837605126$pR
+2890.000000000$pR
+_1$pR
+_1.128973$pR
+_9812387.28910273$pR
diff --git a/tests/dc/trunc_results.txt b/tests/dc/trunc_results.txt
new file mode 100644
index 000000000000..c680604170d7
--- /dev/null
+++ b/tests/dc/trunc_results.txt
@@ -0,0 +1,11 @@
+0
+1
+2
+0
+1
+2
+28937
+2890
+-1
+-1
+-9812387
diff --git a/tests/dc/vars.txt b/tests/dc/vars.txt
new file mode 100644
index 000000000000..bbe73b47d81f
--- /dev/null
+++ b/tests/dc/vars.txt
@@ -0,0 +1,2 @@
+298734.8921702348sx_928374892.28937syzpRlxly+pR
+298734.8921702348S xotj _928374892.28937S yotp zpRl xotj l yotp-pRzpR L xotj L yotp-pR
diff --git a/tests/dc/vars_results.txt b/tests/dc/vars_results.txt
new file mode 100644
index 000000000000..6f18e7a84b2b
--- /dev/null
+++ b/tests/dc/vars_results.txt
@@ -0,0 +1,6 @@
+0
+-928076157.3971997652
+0
+928673627.1815402348
+0
+928673627.1815402348
diff --git a/tests/errors.sh b/tests/errors.sh
new file mode 100755
index 000000000000..dd38b5d28c6b
--- /dev/null
+++ b/tests/errors.sh
@@ -0,0 +1,132 @@
+#! /bin/sh
+#
+# Copyright (c) 2018-2020 Gavin D. Howard and contributors.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+#
+# * Redistributions in binary form must reproduce the above copyright notice,
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+# WARNING: Test files cannot have empty lines!
+
+script="$0"
+testdir=$(dirname "$script")
+
+. "$testdir/../functions.sh"
+
+if [ "$#" -eq 0 ]; then
+ printf 'usage: %s dir [exec args...]\n' "$script"
+ exit 1
+else
+ d="$1"
+ shift
+fi
+
+if [ "$#" -lt 1 ]; then
+ exe="$testdir/../bin/$d"
+else
+ exe="$1"
+ shift
+fi
+
+out="$testdir/../.log_${d}_test.txt"
+
+exebase=$(basename "$exe")
+
+posix="posix_errors"
+read_errors="read_errors"
+
+if [ "$d" = "bc" ]; then
+ opts="-l"
+ halt="halt"
+ read_call="read()"
+ read_expr="${read_call}\n5+5;"
+else
+ opts="-x"
+ halt="q"
+fi
+
+for testfile in $testdir/$d/*errors.txt; do
+
+ if [ -z "${testfile##*$read_errors*}" ]; then
+ # We don't test read errors here. Skip.
+ continue
+ fi
+
+ if [ -z "${testfile##*$posix*}" ]; then
+
+ line="last"
+ printf '%s\n' "$line" | "$exe" "$@" "-lw" 2> "$out" > /dev/null
+ err="$?"
+
+ if [ "$err" -ne 0 ]; then
+ die "$d" "returned an error ($err)" "POSIX warning" 1
+ fi
+
+ checktest "$d" "1" "$line" "$out" "$exebase"
+
+ options="-ls"
+ else
+ options="$opts"
+ fi
+
+ base=$(basename "$testfile")
+ base="${base%.*}"
+ printf 'Running %s %s...' "$d" "$base"
+
+ while read -r line; do
+
+ rm -f "$out"
+
+ printf '%s\n' "$line" | "$exe" "$@" "$options" 2> "$out" > /dev/null
+ err="$?"
+
+ checktest "$d" "$err" "$line" "$out" "$exebase"
+
+ done < "$testfile"
+
+ printf 'pass\n'
+
+done
+
+for testfile in $testdir/$d/errors/*.txt; do
+
+ printf 'Running %s error file %s...' "$d" "$testfile"
+
+ printf '%s\n' "$halt" | "$exe" "$@" $opts "$testfile" 2> "$out" > /dev/null
+ err="$?"
+
+ checktest "$d" "$err" "$testfile" "$out" "$exebase"
+
+ printf 'pass\n'
+
+ printf 'Running %s error file %s through cat...' "$d" "$testfile"
+
+ cat "$testfile" | "$exe" "$@" $opts 2> "$out" > /dev/null
+ err="$?"
+
+ checkcrash "$d" "$err" "$testfile"
+
+ printf 'pass\n'
+
+done
diff --git a/tests/radamsa.sh b/tests/radamsa.sh
new file mode 100755
index 000000000000..3d7c763c5827
--- /dev/null
+++ b/tests/radamsa.sh
@@ -0,0 +1,120 @@
+#! /bin/bash
+#
+# Copyright (c) 2018-2020 Gavin D. Howard and contributors.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+#
+# * Redistributions in binary form must reproduce the above copyright notice,
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+getentry() {
+
+ if [ $# -gt 0 ]; then
+ entnum="$1"
+ else
+ entnum=0
+ fi
+
+ e=$(cat -)
+ num=$(printf '%s\n' "$e" | wc -l)
+
+ if [ "$entnum" -eq 0 ]; then
+ rand=$(printf 'irand(%s) + 1\n' "$num" | "$bcdir/bc")
+ else
+ rand="$entnum"
+ fi
+
+ ent=$(printf '%s\n' "$e" | tail -n +$rand | head -n 1)
+
+ printf '%s\n' "$ent"
+}
+
+script="$0"
+
+if [ "$#" -lt 1 ]; then
+ printf 'usage: %s dir\n' "$0"
+ exit 1
+fi
+
+d="$1"
+shift
+
+dir=$(dirname "$script")
+
+. "$dir/../functions.sh"
+
+bcdir="$dir/../bin"
+
+if [ "$d" = "bc" ]; then
+ inputs="$dir/../../inputs"
+ opts="-lq"
+elif [ "$d" = "dc" ]; then
+ inputs="$dir/../../inputs_dc"
+ opts="-x"
+else
+ err_exit "wrong type of executable" 1
+fi
+
+export ASAN_OPTIONS="abort_on_error=1"
+
+entries=$(cat "$dir/radamsa.txt")
+
+IFS=$'\n'
+
+go=1
+
+while [ "$go" -ne 0 ]; do
+
+ if [ "$d" = "bc" ]; then
+
+ entry=$(cat -- "$dir/radamsa.txt" | getentry)
+ items=$(printf '%s\n' "$entry" | radamsa -n 10)
+
+ printf '%s\n' "$items"
+
+ for i in `seq 1 10`; do
+
+ item=$(printf '%s\n' "$items" | getentry "$i")
+
+ export BC_ENV_ARGS="$item"
+ echo 'halt' | "$bcdir/$d"
+ err=$?
+
+ checkcrash "$d" "$err" "radamsa env args: \"$item\""
+ done
+
+ fi
+
+ f=$(ls "$inputs" | getentry)
+ l=$(cat "$inputs/$f" | wc -l)
+ ll=$(printf '%s^2\n' "$l" | bc)
+
+ for i in $(seq 1 2); do
+ data=$(cat "$inputs/$f" | radamsa -n 1)
+ printf '%s\n' "$data" > "$dir/../.log_${d}_test.txt"
+ printf '%s\n' "$data" | timeout -s SIGTERM 5 "$bcdir/$d" "$opts" > /dev/null
+ err=$?
+ checkcrash "$d" "$err" "radamsa stdin"
+ done
+
+done
diff --git a/tests/radamsa.txt b/tests/radamsa.txt
new file mode 100644
index 000000000000..4bf28907bead
--- /dev/null
+++ b/tests/radamsa.txt
@@ -0,0 +1,17 @@
+-lq '/home/gavin/.bcrc'
+-lq "/home/gavin/.bcrc"
+-lqg '/home/gavin/bc stuff.bc'
+-lqg "/home/gavin/bc stuff.bc"
+-lqg '/home/gavin/"bc" stuff.bc'
+-lqg "/home/gavin/'bc' stuff.bc"
+-lqg '/home/gavin/bc stuff.bc
+-lqg "/home/gavin/bc stuff.bc
+-lqg '/home/gavin/"bc" stuff.bc
+-lqg "/home/gavin/'bc' stuff.bc
+--mathlib --expand
+--file="/home/gavin/.bcrc"
+--file=/home/gavin/.bcrc
+--file="/home/gavin/bc stuff.bc"
+--file
+--expression "4+4"
+-e "irand(128)" -f /home/gavin/.bcrc
diff --git a/tests/randmath.py b/tests/randmath.py
new file mode 100755
index 000000000000..f350ef357f6b
--- /dev/null
+++ b/tests/randmath.py
@@ -0,0 +1,306 @@
+#! /usr/bin/python3 -B
+#
+# Copyright (c) 2018-2020 Gavin D. Howard and contributors.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+#
+# * Redistributions in binary form must reproduce the above copyright notice,
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+import os, errno
+import random
+import sys
+import subprocess
+
+def gen(limit=4):
+ return random.randint(0, 2 ** (8 * limit))
+
+def negative():
+ return random.randint(0, 1) == 1
+
+def zero():
+ return random.randint(0, 2 ** (8) - 1) == 0
+
+def num(op, neg, real, z, limit=4):
+
+ if z:
+ z = zero()
+ else:
+ z = False
+
+ if z:
+ return 0
+
+ if neg:
+ neg = negative()
+
+ g = gen(limit)
+
+ if real and negative():
+ n = str(gen(25))
+ length = gen(7 / 8)
+ if len(n) < length:
+ n = ("0" * (length - len(n))) + n
+ else:
+ n = "0"
+
+ g = str(g)
+ if n != "0":
+ g = g + "." + n
+
+ if neg and g != "0":
+ if op != modexp:
+ g = "-" + g
+ else:
+ g = "_" + g
+
+ return g
+
+
+def add(test, op):
+
+ tests.append(test)
+ gen_ops.append(op)
+
+def compare(exe, options, p, test, halt, expected, op, do_add=True):
+
+ if p.returncode != 0:
+
+ print(" {} returned an error ({})".format(exe, p.returncode))
+
+ if do_add:
+ print(" adding to checklist...")
+ add(test, op)
+
+ return
+
+ actual = p.stdout.decode()
+
+ if actual != expected:
+
+ if op >= exponent:
+
+ indata = "scale += 10; {}; {}".format(test, halt)
+ args = [ exe, options ]
+ p2 = subprocess.run(args, input=indata.encode(), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ expected = p2.stdout[:-10].decode()
+
+ if actual == expected:
+ print(" failed because of bug in other {}".format(exe))
+ print(" continuing...")
+ return
+
+ if do_add:
+ print(" failed; adding to checklist...")
+ add(test, op)
+ else:
+ print(" failed {}".format(test))
+ print(" expected:")
+ print(" {}".format(expected))
+ print(" actual:")
+ print(" {}".format(actual))
+
+
+def gen_test(op):
+
+ scale = num(op, False, False, True, 5 / 8)
+
+ if op < div:
+ s = fmts[op].format(scale, num(op, True, True, True), num(op, True, True, True))
+ elif op == div or op == mod:
+ s = fmts[op].format(scale, num(op, True, True, True), num(op, True, True, False))
+ elif op == power:
+ s = fmts[op].format(scale, num(op, True, True, True, 7 / 8), num(op, True, False, True, 6 / 8))
+ elif op == modexp:
+ s = fmts[op].format(scale, num(op, True, False, True), num(op, True, False, True),
+ num(op, True, False, False))
+ elif op == sqrt:
+ s = "1"
+ while s == "1":
+ s = num(op, False, True, True, 1)
+ s = fmts[op].format(scale, s)
+ else:
+
+ if op == exponent:
+ first = num(op, True, True, True, 6 / 8)
+ elif op == bessel:
+ first = num(op, False, True, True, 6 / 8)
+ else:
+ first = num(op, True, True, True)
+
+ if op != bessel:
+ s = fmts[op].format(scale, first)
+ else:
+ s = fmts[op].format(scale, first, 6 / 8)
+
+ return s
+
+def run_test(t):
+
+ op = random.randrange(bessel + 1)
+
+ if op != modexp:
+ exe = "bc"
+ halt = "halt"
+ options = "-lq"
+ else:
+ exe = "dc"
+ halt = "q"
+ options = ""
+
+ test = gen_test(op)
+
+ if "c(0)" in test or "scale = 4; j(4" in test:
+ return
+
+ bcexe = exedir + "/" + exe
+ indata = test + "\n" + halt
+
+ print("Test {}: {}".format(t, test))
+
+ if exe == "bc":
+ args = [ exe, options ]
+ else:
+ args = [ exe ]
+
+ p = subprocess.run(args, input=indata.encode(), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+
+ output1 = p.stdout.decode()
+
+ if p.returncode != 0 or output1 == "":
+ print(" other {} returned an error ({}); continuing...".format(exe, p.returncode))
+ return
+
+ if output1 == "\n":
+ print(" other {} has a bug; continuing...".format(exe))
+ return
+
+ if output1 == "-0\n":
+ output1 = "0\n"
+ elif output1 == "-0":
+ output1 = "0"
+
+ args = [ bcexe, options ]
+
+ p = subprocess.run(args, input=indata.encode(), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ compare(exe, options, p, test, halt, output1, op)
+
+
+if __name__ != "__main__":
+ sys.exit(1)
+
+script = sys.argv[0]
+testdir = os.path.dirname(script)
+
+exedir = testdir + "/../bin"
+
+ops = [ '+', '-', '*', '/', '%', '^', '|' ]
+files = [ "add", "subtract", "multiply", "divide", "modulus", "power", "modexp",
+ "sqrt", "exponent", "log", "arctangent", "sine", "cosine", "bessel" ]
+funcs = [ "sqrt", "e", "l", "a", "s", "c", "j" ]
+
+fmts = [ "scale = {}; {} + {}", "scale = {}; {} - {}", "scale = {}; {} * {}",
+ "scale = {}; {} / {}", "scale = {}; {} % {}", "scale = {}; {} ^ {}",
+ "{}k {} {} {}|pR", "scale = {}; sqrt({})", "scale = {}; e({})",
+ "scale = {}; l({})", "scale = {}; a({})", "scale = {}; s({})",
+ "scale = {}; c({})", "scale = {}; j({}, {})" ]
+
+div = 3
+mod = 4
+power = 5
+modexp = 6
+sqrt = 7
+exponent = 8
+bessel = 13
+
+gen_ops = []
+tests = []
+
+try:
+ i = 0
+ while True:
+ run_test(i)
+ i = i + 1
+except KeyboardInterrupt:
+ pass
+
+if len(tests) == 0:
+ print("\nNo items in checklist.")
+ print("Exiting")
+ sys.exit(0)
+
+print("\nGoing through the checklist...\n")
+
+if len(tests) != len(gen_ops):
+ print("Corrupted checklist!")
+ print("Exiting...")
+ sys.exit(1)
+
+for i in range(0, len(tests)):
+
+ print("\n{}".format(tests[i]))
+
+ op = int(gen_ops[i])
+
+ if op != modexp:
+ exe = "bc"
+ halt = "halt"
+ options = "-lq"
+ else:
+ exe = "dc"
+ halt = "q"
+ options = ""
+
+ indata = tests[i] + "\n" + halt
+
+ args = [ exe, options ]
+
+ p = subprocess.run(args, input=indata.encode(), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+
+ expected = p.stdout.decode()
+
+ bcexe = exedir + "/" + exe
+ args = [ bcexe, options ]
+
+ p = subprocess.run(args, input=indata.encode(), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+
+ compare(exe, options, p, tests[i], halt, expected, op, False)
+
+ answer = input("\nAdd test ({}/{}) to test suite? [y/N]: ".format(i + 1, len(tests)))
+
+ if 'Y' in answer or 'y' in answer:
+
+ print("Yes")
+
+ name = testdir + "/" + exe + "/" + files[op]
+
+ with open(name + ".txt", "a") as f:
+ f.write(tests[i] + "\n")
+
+ with open(name + "_results.txt", "a") as f:
+ f.write(expected)
+
+ else:
+ print("No")
+
+print("Done!")
diff --git a/tests/read.sh b/tests/read.sh
new file mode 100755
index 000000000000..635291221465
--- /dev/null
+++ b/tests/read.sh
@@ -0,0 +1,126 @@
+#! /bin/sh
+#
+# Copyright (c) 2018-2020 Gavin D. Howard and contributors.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+#
+# * Redistributions in binary form must reproduce the above copyright notice,
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+set -e
+
+script="$0"
+testdir=$(dirname "$script")
+
+. "$testdir/../functions.sh"
+
+if [ "$#" -lt 1 ]; then
+ printf 'usage: %s dir [exe [args...]]\n' "$0"
+ printf 'valid dirs are:\n'
+ printf '\n'
+ cat "$testdir/all.txt"
+ printf '\n'
+ exit 1
+fi
+
+d="$1"
+shift
+
+if [ "$#" -gt 0 ]; then
+ exe="$1"
+ shift
+else
+ exe="$testdir/../bin/$d"
+fi
+
+name="$testdir/$d/read.txt"
+results="$testdir/$d/read_results.txt"
+errors="$testdir/$d/read_errors.txt"
+
+out="$testdir/../.log_${d}_test.txt"
+
+exebase=$(basename "$exe")
+
+if [ "$d" = "bc" ]; then
+ options="-lq"
+ halt="halt"
+else
+ options="-x"
+ halt="q"
+fi
+
+if [ "$d" = "bc" ]; then
+ read_call="read()"
+ read_expr="${read_call}\n5+5;"
+else
+ read_call="?"
+ read_expr="${read_call}"
+fi
+
+printf 'Running %s read...' "$d"
+
+while read line; do
+
+ printf '%s\n%s\n' "$read_call" "$line" | "$exe" "$@" "$options" > "$out"
+ diff "$results" "$out"
+
+done < "$name"
+
+printf 'pass\n'
+
+set +e
+
+printf 'Running %s read errors...' "$d"
+
+while read line; do
+
+ printf '%s\n%s\n' "$read_call" "$line" | "$exe" "$@" "$options" 2> "$out" > /dev/null
+ err="$?"
+
+ checktest "$d" "$err" "$line" "$out" "$exebase"
+
+done < "$errors"
+
+printf 'pass\n'
+
+printf 'Running %s empty read...' "$d"
+
+read_test=$(printf '%s\n' "$read_call")
+
+printf '%s\n' "$read_test" | "$exe" "$@" "$opts" 2> "$out" > /dev/null
+err="$?"
+
+checktest "$d" "$err" "$read_test" "$out" "$exebase"
+
+printf 'pass\n'
+
+printf 'Running %s read EOF...' "$d"
+
+read_test=$(printf '%s' "$read_call")
+
+printf '%s' "$read_test" | "$exe" "$@" "$opts" 2> "$out" > /dev/null
+err="$?"
+
+checktest "$d" "$err" "$read_test" "$out" "$exebase"
+
+printf 'pass\n'
diff --git a/tests/script.sh b/tests/script.sh
new file mode 100755
index 000000000000..4d1b2354f42c
--- /dev/null
+++ b/tests/script.sh
@@ -0,0 +1,155 @@
+#! /bin/sh
+#
+# Copyright (c) 2018-2020 Gavin D. Howard and contributors.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+#
+# * Redistributions in binary form must reproduce the above copyright notice,
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+set -e
+
+script="$0"
+
+testdir=$(dirname "${script}")
+
+if [ "$#" -lt 2 ]; then
+ printf 'usage: %s dir script [run_extra_tests] [run_stack_tests] [generate_tests] [time_tests] [exec args...]\n' "$script"
+ exit 1
+fi
+
+d="$1"
+shift
+
+f="$1"
+shift
+
+if [ "$#" -gt 0 ]; then
+ run_extra_tests="$1"
+ shift
+else
+ run_extra_tests=1
+fi
+
+if [ "$#" -gt 0 ]; then
+ run_stack_tests="$1"
+ shift
+else
+ run_stack_tests=1
+fi
+
+if [ "$#" -gt 0 ]; then
+ generate="$1"
+ shift
+else
+ generate=1
+fi
+
+if [ "$#" -gt 0 ]; then
+ time_tests="$1"
+ shift
+else
+ time_tests=0
+fi
+
+if [ "$#" -gt 0 ]; then
+ exe="$1"
+ shift
+else
+ exe="$testdir/../bin/$d"
+fi
+
+out="$testdir/../.log_${d}_test.txt"
+
+if [ "$d" = "bc" ]; then
+
+ if [ "$run_stack_tests" -ne 0 ]; then
+ options="-lgq"
+ else
+ options="-lq"
+ fi
+
+ halt="halt"
+
+else
+ options="-x"
+ halt="q"
+fi
+
+scriptdir="$testdir/$d/scripts"
+
+name="${f%.*}"
+
+if [ "$f" = "timeconst.bc" ]; then
+ exit 0
+fi
+
+if [ "$run_extra_tests" -eq 0 ]; then
+ if [ "$f" = "rand.bc" ]; then
+ printf 'Skipping %s script: %s\n' "$d" "$f"
+ exit 0
+ fi
+fi
+
+if [ "$run_stack_tests" -eq 0 ]; then
+
+ if [ "$f" = "globals.bc" -o "$f" = "references.bc" -o "$f" = "rand.bc" ]; then
+ printf 'Skipping %s script: %s\n' "$d" "$f"
+ exit 0
+ fi
+
+fi
+
+s="$scriptdir/$f"
+orig="$testdir/$name.txt"
+results="$scriptdir/$name.txt"
+
+if [ -f "$orig" ]; then
+ res="$orig"
+elif [ -f "$results" ]; then
+ res="$results"
+elif [ "$generate" -eq 0 ]; then
+ printf 'Skipping %s script %s\n' "$d" "$s"
+ exit 0
+else
+ printf 'Generating %s results...' "$f"
+ printf '%s\n' "$halt" | "$d" "$s" > "$results"
+ printf 'done\n'
+ res="$results"
+fi
+
+printf 'Running %s script %s...' "$d" "$f"
+
+if [ "$time_tests" -ne 0 ]; then
+ printf '\n'
+ printf '%s\n' "$halt" | /usr/bin/time -p "$exe" "$@" $options "$s" > "$out"
+ printf '\n'
+else
+ printf '%s\n' "$halt" | "$exe" "$@" $options "$s" > "$out"
+fi
+
+diff "$res" "$out"
+
+rm -f "$out"
+
+printf 'pass\n'
diff --git a/tests/scripts.sh b/tests/scripts.sh
new file mode 100755
index 000000000000..13932fc4db17
--- /dev/null
+++ b/tests/scripts.sh
@@ -0,0 +1,86 @@
+#! /bin/sh
+#
+# Copyright (c) 2018-2020 Gavin D. Howard and contributors.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+#
+# * Redistributions in binary form must reproduce the above copyright notice,
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+set -e
+
+script="$0"
+
+testdir=$(dirname "${script}")
+
+if [ "$#" -eq 0 ]; then
+ printf 'usage: %s dir [run_extra_tests] [run_stack_tests] [generate_tests] [time_tests] [exec args...]\n' "$script"
+ exit 1
+else
+ d="$1"
+ shift
+fi
+
+if [ "$#" -gt 0 ]; then
+ run_extra_tests="$1"
+ shift
+else
+ run_extra_tests=1
+fi
+
+if [ "$#" -gt 0 ]; then
+ run_stack_tests="$1"
+ shift
+else
+ run_stack_tests=1
+fi
+
+if [ "$#" -gt 0 ]; then
+ generate="$1"
+ shift
+else
+ generate=1
+fi
+
+if [ "$#" -gt 0 ]; then
+ time_tests="$1"
+ shift
+else
+ time_tests=0
+fi
+
+if [ "$#" -gt 0 ]; then
+ exe="$1"
+ shift
+else
+ exe="$testdir/../bin/$d"
+fi
+
+scriptdir="$testdir/$d/scripts"
+
+for s in $scriptdir/*.$d; do
+
+ f=$(basename "$s")
+ sh "$testdir/script.sh" "$d" "$f" "$run_extra_tests" "$run_stack_tests" "$generate" "$time_tests" "$exe" "$@"
+
+done
diff --git a/tests/stdin.sh b/tests/stdin.sh
new file mode 100755
index 000000000000..cfd45805face
--- /dev/null
+++ b/tests/stdin.sh
@@ -0,0 +1,73 @@
+#! /bin/sh
+#
+# Copyright (c) 2018-2020 Gavin D. Howard and contributors.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+#
+# * Redistributions in binary form must reproduce the above copyright notice,
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+set -e
+
+script="$0"
+
+testdir=$(dirname "$script")
+
+if [ "$#" -lt 1 ]; then
+ printf 'usage: %s dir [exe [args...]]\n' "$0"
+ printf 'valid dirs are:\n'
+ printf '\n'
+ cat "$testdir/all.txt"
+ printf '\n'
+ exit 1
+fi
+
+d="$1"
+shift
+
+if [ "$#" -gt 0 ]; then
+ exe="$1"
+ shift
+else
+ exe="$testdir/../bin/$d"
+fi
+
+out="$testdir/../.log_${d}_test.txt"
+
+if [ "$d" = "bc" ]; then
+ options="-ilq"
+else
+ options="-x"
+fi
+
+rm -f "$out"
+
+printf 'Running %s stdin tests...' "$d"
+
+cat "$testdir/$d/stdin.txt" | "$exe" "$@" "$options" > "$out" 2> /dev/null
+
+diff "$testdir/$d/stdin_results.txt" "$out"
+
+rm -f "$out1"
+
+printf 'pass\n'
diff --git a/tests/test.sh b/tests/test.sh
new file mode 100755
index 000000000000..a8e7ddeb9f63
--- /dev/null
+++ b/tests/test.sh
@@ -0,0 +1,132 @@
+#! /bin/sh
+#
+# Copyright (c) 2018-2020 Gavin D. Howard and contributors.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+#
+# * Redistributions in binary form must reproduce the above copyright notice,
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+set -e
+
+script="$0"
+
+testdir=$(dirname "$script")
+
+if [ "$#" -lt 2 ]; then
+ printf 'usage: %s dir test [generate_tests] [time_tests] [exe [args...]]\n' "$0"
+ printf 'valid dirs are:\n'
+ printf '\n'
+ cat "$testdir/all.txt"
+ printf '\n'
+ exit 1
+fi
+
+d="$1"
+shift
+
+t="$1"
+name="$testdir/$d/$t.txt"
+results="$testdir/$d/${t}_results.txt"
+shift
+
+if [ "$#" -gt 0 ]; then
+ generate_tests="$1"
+ shift
+else
+ generate_tests=1
+fi
+
+if [ "$#" -gt 0 ]; then
+ time_tests="$1"
+ shift
+else
+ time_tests=0
+fi
+
+if [ "$#" -gt 0 ]; then
+ exe="$1"
+ shift
+else
+ exe="$testdir/../bin/$d"
+fi
+
+out="$testdir/../.log_${d}_test.txt"
+
+if [ "$d" = "bc" ]; then
+ options="-lq"
+ var="BC_LINE_LENGTH"
+ halt="halt"
+else
+ options=""
+ var="DC_LINE_LENGTH"
+ halt="q"
+fi
+
+if [ "${exe#*toybox}" != "$exe" -o "${exe#*busybox}" != "$exe" ]; then
+ if [ "$t" = "print2" -o "$t" = "misc4" ]; then
+ base=$(basename "$exe")
+ printf 'Skipping %s test for %s...\n' "$t" "$base"
+ exit 0
+ fi
+fi
+
+if [ ! -f "$name" ]; then
+
+ if [ "$generate_tests" -eq 0 ]; then
+ printf 'Skipping %s %s test\n' "$d" "$t"
+ exit 0
+ fi
+
+ printf 'Generating %s %s...' "$d" "$t"
+ "$testdir/$d/scripts/$t.$d" > "$name"
+ printf 'done\n'
+fi
+
+if [ ! -f "$results" ]; then
+ printf 'Generating %s %s results...' "$d" "$t"
+ printf '%s\n' "$halt" | "$d" $options "$name" > "$results"
+ printf 'done\n'
+fi
+
+if [ "$d" = "dc" ]; then
+ options="-x"
+fi
+
+export $var=string
+
+printf 'Running %s %s...' "$d" "$t"
+
+if [ "$time_tests" -ne 0 ]; then
+ printf '\n'
+ printf '%s\n' "$halt" | /usr/bin/time -p "$exe" "$@" $options "$name" > "$out"
+ printf '\n'
+else
+ printf '%s\n' "$halt" | "$exe" "$@" $options "$name" > "$out"
+fi
+
+diff "$results" "$out"
+
+rm -f "$out"
+
+printf 'pass\n'