hexdump: add tests for %x, handle little/big endian properly

Signed-off-by: Radoslav Kolev <radoslav.kolev@suse.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Radoslav Kolev 2025-04-24 00:45:27 +03:00 committed by Denys Vlasenko
parent b8ce2084cd
commit e6317e72dd

View file

@ -5,6 +5,17 @@
. ./testing.sh
input=\
"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"\
"\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"\
"\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f"\
"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"\
"\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"
little_endian=false
{ printf '\0\1' | hexdump -d | grep -q 256; } && little_endian=true
readonly little_endian
# testing "description" "command" "result" "infile" "stdin"
testing 'hexdump -C with four NULs' \
'hexdump -C' \
@ -43,12 +54,7 @@ testing "hexdump -e %3_u" \
80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f
f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 fa fb fc fd fe ff
" \
"" \
"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"\
"\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"\
"\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f"\
"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"\
"\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"\
"" "$input"
testing "hexdump -e /1 %d" \
"hexdump -e '16/1 \" %4d\" \"\n\"'" \
@ -59,33 +65,74 @@ testing "hexdump -e /1 %d" \
-128 -127 -126 -125 -124 -123 -122 -121 -120 -119 -118 -117 -116 -115 -114 -113
-16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1
" \
"" \
"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"\
"\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"\
"\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f"\
"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"\
"\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"\
"" "$input"
testing "hexdump -e /2 %d" \
"hexdump -e '8/2 \" %6d\" \"\n\"'" \
"\
$little_endian || SKIP=1
testing "hexdump -e /2 %d (little endian)" \
"hexdump -e '8/2 \" %6d\" \"\n\"'" \
"\
256 770 1284 1798 2312 2826 3340 3854
4368 4882 5396 5910 6424 6938 7452 7966
29040 29554 30068 30582 31096 31610 32124 32638
-32384 -31870 -31356 -30842 -30328 -29814 -29300 -28786
-3600 -3086 -2572 -2058 -1544 -1030 -516 -2
" \
"" \
"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"\
"\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"\
"\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f"\
"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"\
"\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"\
"" "$input"
SKIP=
testing "hexdump -n4 -e '\"%u\"'" \
$little_endian && SKIP=1
testing "hexdump -e /2 %d (big endian)" \
"hexdump -e '8/2 \" %6d\" \"\n\"'" \
"\
1 515 1029 1543 2057 2571 3085 3599
4113 4627 5141 5655 6169 6683 7197 7711
28785 29299 29813 30327 30841 31355 31869 32383
-32639 -32125 -31611 -31097 -30583 -30069 -29555 -29041
-3855 -3341 -2827 -2313 -1799 -1285 -771 -257
" \
"" "$input"
SKIP=
$little_endian || SKIP=1
testing "hexdump -e /2 %x (little endian)" \
"hexdump -e '8/2 \" %6x\" \"\n\"'" \
"\
100 302 504 706 908 b0a d0c f0e
1110 1312 1514 1716 1918 1b1a 1d1c 1f1e
7170 7372 7574 7776 7978 7b7a 7d7c 7f7e
8180 8382 8584 8786 8988 8b8a 8d8c 8f8e
f1f0 f3f2 f5f4 f7f6 f9f8 fbfa fdfc fffe
" \
"" "$input"
SKIP=
$little_endian && SKIP=1
testing "hexdump -e /2 %x (big endian)" \
"hexdump -e '8/2 \" %6x\" \"\n\"'" \
"\
1 203 405 607 809 a0b c0d e0f
1011 1213 1415 1617 1819 1a1b 1c1d 1e1f
7071 7273 7475 7677 7879 7a7b 7c7d 7e7f
8081 8283 8485 8687 8889 8a8b 8c8d 8e8f
f0f1 f2f3 f4f5 f6f7 f8f9 fafb fcfd feff
" \
"" "$input"
SKIP=
$little_endian || SKIP=1
testing "hexdump -n4 -e '\"%u\"' (little endian)" \
"hexdump -n4 -e '\"%u\"'" \
"12345678" \
"" \
"\x4e\x61\xbc\x00AAAA"
SKIP=
$little_endian && SKIP=1
testing "hexdump -n4 -e '\"%u\"' (big endian)" \
"hexdump -n4 -e '\"%u\"'" \
"1315027968" \
"" \
"\x4e\x61\xbc\x00AAAA"
SKIP=
exit $FAILCOUNT