android_external_toybox/tests/seq.test
Elliott Hughes 296a75aa80 Fix the seq and sort tests on macOS and Android.
seq has a test that uses timeout (which isn't available on macOS),
and sort had tests that used |& which is a modern bashism (which
isn't in macOS' old bash, and Android uses mksh rather than bash).

This doesn't fix the tar tests for macOS, so macOS CI will still
be broken, but that's a separate issue, and this will fix Android
CI.
2022-08-24 03:43:35 -05:00

79 lines
3.3 KiB
Bash
Executable File

#!/bin/bash
[ -f testing.sh ] && . testing.sh
#testing "name" "command" "result" "infile" "stdin"
testing "(exit with error)" "seq 2> /dev/null || echo yes" "yes\n" "" ""
testing "(exit with error)" "seq 1 2 3 4 2> /dev/null || echo yes" \
"yes\n" "" ""
testing "one argument" "seq 3" "1\n2\n3\n" "" ""
testing "two arguments" "seq 5 7" "5\n6\n7\n" "" ""
testing "two arguments reversed" "seq 7 5" "" "" ""
testing "two arguments equal" "seq 3 3" "3\n" "" ""
testing "two arguments equal, arbitrary negative step" "seq 1 -15 1" \
"1\n" "" ""
testing "two arguments equal, arbitrary positive step" "seq 1 +15 1" \
"1\n" "" ""
testing "count up by 2" "seq 4 2 8" "4\n6\n8\n" "" ""
testing "count down by 2" "seq 8 -2 4" "8\n6\n4\n" "" ""
testing "count wrong way #1" "seq 4 -2 8" "" "" ""
testing "count wrong way #2" "seq 8 2 4" "" "" ""
testing "count by .3" "seq 3 .3 4" "3.0\n3.3\n3.6\n3.9\n" "" ""
testing "count by -.9" "seq .7 -.9 -2.2" "0.7\n-0.2\n-1.1\n-2.0\n" "" ""
# Ubuntu does this, for no obvious reason. (The "yes" command exists.)
#testing "count up by zero" "seq 4 0 8 | head -n 4" "4\n4\n4\n4\n" "" ""
#testing "count nowhere by zero" "seq 4 0 4 | head -n 4" "4\n4\n4\n4\n" "" ""
testing "count down by zero" "seq 8 0 4 | head -n 4" "" "" ""
testing "separator -" "seq -s - 1 3" "1-2-3\n" "" ""
testing "format string" 'seq -f %+01g -10 5 10' "-10\n-5\n+0\n+5\n+10\n" \
"" ""
testing "separator and format string" "seq -f \%03g -s \; 5 -1 0" "005;004;003;002;001;000\n" "" ""
testing "padding" "seq -s, -w -2 19 120" "-02,017,036,055,074,093,112\n" \
"" ""
testing "padding" "seq -s, -w -2 3 12" "-2,01,04,07,10\n" "" ""
testing "padding" "seq -s, -w -2.2 3.3 12" "-2.2,01.1,04.4,07.7,11.0\n" \
"" ""
# Test -f format filtering
for i in %f %e %g "boo %f yah" "% f" %-1.2f %+-f "%+ - f" %.2f %3.f "%'.2f" \
%%%f%%
do
testing "filter -f \"$i\"" "seq -f \"$i\" 1 3 > /dev/null && echo yes" \
"yes\n" "" ""
done
# Test -f format filtering failures
for i in %d %s "" "boo %f %f yah" "%*f" %-1.2.3f '%2$f' %1-f "%1 f" \
%2..2f %%%f%%%
do
testing "filter reject -f '$i'" \
"seq -f '$i' 1 3 2>/dev/null || echo no" "no\n" "" ""
done
testing "precision inc" "seq -s, 1.0 2.00 4" "1.00,3.00\n" "" ""
testing "precision first" "seq -s, 1.000 2.0 4" "1.000,3.000\n" "" ""
# In ubuntu inc and first set precision, but last doesn't. (Why?)
#testing "precision last" "seq -s, 1.0 2.0 4.00" "1.0,3.0\n" "" ""
testing "precision int" "seq -s, 9007199254740991 1 9007199254740991" \
"9007199254740991\n" "" ""
testing "precision e" "seq -s, 1.0e0 2" "1.0,2.0\n" "" ""
testing "precision E" "seq -s, 1.0E0 2" "1.0,2.0\n" "" ""
testing "invalid last" "seq 1 1 1f 2>/dev/null || echo y" "y\n" "" ""
testing "invalid first" "seq 1f 1 1 2>/dev/null || echo y" "y\n" "" ""
testing "invalid increment" "seq 1 1f 1 2>/dev/null || echo y" "y\n" "" ""
# TODO: busybox fails this too, but GNU seems to not use double for large ints.
#testing "too large for double" "seq -s, 9007199254740991 1 9007199254740992" "9007199254740992\n" "" ""
testing "INT_MIN" "seq -2147483648 -2147483647" "-2147483648\n-2147483647\n"\
"" ""
# macOS doesn't include a timeout(1), nor a good alternative.
skipnot [ "$(uname)" != "Darwin" ]
testing "fast path" "timeout 10 seq 10000000 > /dev/null" "" "" ""