1*cf5a6c84SAndroid Build Coastguard Worker#!/bin/bash 2*cf5a6c84SAndroid Build Coastguard Worker 3*cf5a6c84SAndroid Build Coastguard Worker[ -f testing.sh ] && . testing.sh 4*cf5a6c84SAndroid Build Coastguard Worker 5*cf5a6c84SAndroid Build Coastguard Worker#testing "name" "command" "result" "infile" "stdin" 6*cf5a6c84SAndroid Build Coastguard Worker 7*cf5a6c84SAndroid Build Coastguard Workertesting "(exit with error)" "seq 2> /dev/null || echo yes" "yes\n" "" "" 8*cf5a6c84SAndroid Build Coastguard Workertesting "(exit with error)" "seq 1 2 3 4 2> /dev/null || echo yes" \ 9*cf5a6c84SAndroid Build Coastguard Worker "yes\n" "" "" 10*cf5a6c84SAndroid Build Coastguard Workertesting "one argument" "seq 3" "1\n2\n3\n" "" "" 11*cf5a6c84SAndroid Build Coastguard Workertesting "two arguments" "seq 5 7" "5\n6\n7\n" "" "" 12*cf5a6c84SAndroid Build Coastguard Workertesting "two arguments reversed" "seq 7 5" "" "" "" 13*cf5a6c84SAndroid Build Coastguard Workertesting "two arguments equal" "seq 3 3" "3\n" "" "" 14*cf5a6c84SAndroid Build Coastguard Workertesting "two arguments equal, arbitrary negative step" "seq 1 -15 1" \ 15*cf5a6c84SAndroid Build Coastguard Worker "1\n" "" "" 16*cf5a6c84SAndroid Build Coastguard Workertesting "two arguments equal, arbitrary positive step" "seq 1 +15 1" \ 17*cf5a6c84SAndroid Build Coastguard Worker "1\n" "" "" 18*cf5a6c84SAndroid Build Coastguard Workertesting "count up by 2" "seq 4 2 8" "4\n6\n8\n" "" "" 19*cf5a6c84SAndroid Build Coastguard Workertesting "count down by 2" "seq 8 -2 4" "8\n6\n4\n" "" "" 20*cf5a6c84SAndroid Build Coastguard Workertesting "count wrong way #1" "seq 4 -2 8" "" "" "" 21*cf5a6c84SAndroid Build Coastguard Workertesting "count wrong way #2" "seq 8 2 4" "" "" "" 22*cf5a6c84SAndroid Build Coastguard Workertesting "count by .3" "seq 3 .3 4" "3.0\n3.3\n3.6\n3.9\n" "" "" 23*cf5a6c84SAndroid Build Coastguard Workertesting "count by -.9" "seq .7 -.9 -2.2" "0.7\n-0.2\n-1.1\n-2.0\n" "" "" 24*cf5a6c84SAndroid Build Coastguard Worker 25*cf5a6c84SAndroid Build Coastguard Worker# Ubuntu does this, for no obvious reason. (The "yes" command exists.) 26*cf5a6c84SAndroid Build Coastguard Worker#testing "count up by zero" "seq 4 0 8 | head -n 4" "4\n4\n4\n4\n" "" "" 27*cf5a6c84SAndroid Build Coastguard Worker#testing "count nowhere by zero" "seq 4 0 4 | head -n 4" "4\n4\n4\n4\n" "" "" 28*cf5a6c84SAndroid Build Coastguard Worker 29*cf5a6c84SAndroid Build Coastguard Workertesting "count down by zero" "seq 8 0 4 | head -n 4" "" "" "" 30*cf5a6c84SAndroid Build Coastguard Workertesting "separator -" "seq -s - 1 3" "1-2-3\n" "" "" 31*cf5a6c84SAndroid Build Coastguard Workertesting "format string" 'seq -f %+01g -10 5 10' "-10\n-5\n+0\n+5\n+10\n" \ 32*cf5a6c84SAndroid Build Coastguard Worker "" "" 33*cf5a6c84SAndroid Build Coastguard Workertesting "separator and format string" "seq -f \%03g -s \; 5 -1 0" "005;004;003;002;001;000\n" "" "" 34*cf5a6c84SAndroid Build Coastguard Workertesting "padding" "seq -s, -w -2 19 120" "-02,017,036,055,074,093,112\n" \ 35*cf5a6c84SAndroid Build Coastguard Worker "" "" 36*cf5a6c84SAndroid Build Coastguard Workertesting "padding" "seq -s, -w -2 3 12" "-2,01,04,07,10\n" "" "" 37*cf5a6c84SAndroid Build Coastguard Workertesting "padding" "seq -s, -w -2.2 3.3 12" "-2.2,01.1,04.4,07.7,11.0\n" \ 38*cf5a6c84SAndroid Build Coastguard Worker "" "" 39*cf5a6c84SAndroid Build Coastguard Worker 40*cf5a6c84SAndroid Build Coastguard Worker# Test -f format filtering 41*cf5a6c84SAndroid Build Coastguard Workerfor i in %f %e %g "boo %f yah" "% f" %-1.2f %+-f "%+ - f" %.2f %3.f "%'.2f" \ 42*cf5a6c84SAndroid Build Coastguard Worker %%%f%% 43*cf5a6c84SAndroid Build Coastguard Workerdo 44*cf5a6c84SAndroid Build Coastguard Worker testing "filter -f \"$i\"" "seq -f \"$i\" 1 3 > /dev/null && echo yes" \ 45*cf5a6c84SAndroid Build Coastguard Worker "yes\n" "" "" 46*cf5a6c84SAndroid Build Coastguard Workerdone 47*cf5a6c84SAndroid Build Coastguard Worker# Test -f format filtering failures 48*cf5a6c84SAndroid Build Coastguard Workerfor i in %d %s "" "boo %f %f yah" "%*f" %-1.2.3f '%2$f' %1-f "%1 f" \ 49*cf5a6c84SAndroid Build Coastguard Worker %2..2f %%%f%%% 50*cf5a6c84SAndroid Build Coastguard Workerdo 51*cf5a6c84SAndroid Build Coastguard Worker testing "filter reject -f '$i'" \ 52*cf5a6c84SAndroid Build Coastguard Worker "seq -f '$i' 1 3 2>/dev/null || echo no" "no\n" "" "" 53*cf5a6c84SAndroid Build Coastguard Workerdone 54*cf5a6c84SAndroid Build Coastguard Worker 55*cf5a6c84SAndroid Build Coastguard Workertesting "precision inc" "seq -s, 1.0 2.00 4" "1.00,3.00\n" "" "" 56*cf5a6c84SAndroid Build Coastguard Workertesting "precision first" "seq -s, 1.000 2.0 4" "1.000,3.000\n" "" "" 57*cf5a6c84SAndroid Build Coastguard Worker 58*cf5a6c84SAndroid Build Coastguard Worker# In ubuntu inc and first set precision, but last doesn't. (Why?) 59*cf5a6c84SAndroid Build Coastguard Worker#testing "precision last" "seq -s, 1.0 2.0 4.00" "1.0,3.0\n" "" "" 60*cf5a6c84SAndroid Build Coastguard Worker 61*cf5a6c84SAndroid Build Coastguard Workertesting "precision int" "seq -s, 9007199254740991 1 9007199254740991" \ 62*cf5a6c84SAndroid Build Coastguard Worker "9007199254740991\n" "" "" 63*cf5a6c84SAndroid Build Coastguard Workertesting "precision e" "seq -s, 1.0e0 2" "1.0,2.0\n" "" "" 64*cf5a6c84SAndroid Build Coastguard Workertesting "precision E" "seq -s, 1.0E0 2" "1.0,2.0\n" "" "" 65*cf5a6c84SAndroid Build Coastguard Worker 66*cf5a6c84SAndroid Build Coastguard Workertesting "invalid last" "seq 1 1 1f 2>/dev/null || echo y" "y\n" "" "" 67*cf5a6c84SAndroid Build Coastguard Workertesting "invalid first" "seq 1f 1 1 2>/dev/null || echo y" "y\n" "" "" 68*cf5a6c84SAndroid Build Coastguard Workertesting "invalid increment" "seq 1 1f 1 2>/dev/null || echo y" "y\n" "" "" 69*cf5a6c84SAndroid Build Coastguard Worker 70*cf5a6c84SAndroid Build Coastguard Worker# TODO: busybox fails this too, but GNU seems to not use double for large ints. 71*cf5a6c84SAndroid Build Coastguard Worker#testing "too large for double" "seq -s, 9007199254740991 1 9007199254740992" "9007199254740992\n" "" "" 72*cf5a6c84SAndroid Build Coastguard Worker 73*cf5a6c84SAndroid Build Coastguard Workertesting "INT_MIN" "seq -2147483648 -2147483647" "-2147483648\n-2147483647\n"\ 74*cf5a6c84SAndroid Build Coastguard Worker "" "" 75*cf5a6c84SAndroid Build Coastguard Worker 76*cf5a6c84SAndroid Build Coastguard Worker# macOS doesn't include a timeout(1), nor a good alternative. 77*cf5a6c84SAndroid Build Coastguard Workerskipnot [ "$(uname)" != "Darwin" ] 78*cf5a6c84SAndroid Build Coastguard Workertesting "fast path" "timeout 10 seq 10000000 > /dev/null" "" "" "" 79