Bash · 2241 bytes Raw Blame History
1 #!/bin/sh
2 TEST_PREFIX="[printf]"
3 . "$(cd "$(dirname "$0")" && pwd)/test_harness.sh"
4
5 section "1. printf format specifiers"
6 compare_output "printf %s string" 'printf "%s\n" hello'
7 compare_output "printf %d decimal" 'printf "%d\n" 42'
8 compare_output "printf %x hex lowercase" 'printf "%x\n" 255'
9 compare_output "printf %X hex uppercase" 'printf "%X\n" 255'
10 compare_output "printf %o octal" 'printf "%o\n" 8'
11 compare_output "printf %c character" 'printf "%c\n" A'
12 compare_output "printf %i integer" 'printf "%i\n" 42'
13
14 section "2. printf width and precision"
15 compare_output "printf left-aligned %-10s" 'printf "[%-10s]\n" hi'
16 compare_output "printf right-aligned %10s" 'printf "[%10s]\n" hi'
17 compare_output "printf precision truncate %.5s" 'printf "%.5s\n" "hello world"'
18 compare_output "printf zero-padded %05d" 'printf "%05d\n" 42'
19 compare_output "printf width with string %8s" 'printf "[%8s]\n" "abc"'
20 compare_output "printf negative number" 'printf "%d\n" -5'
21
22 section "3. printf escape sequences"
23 compare_output "printf newline in format" 'printf "a\nb\n"'
24 compare_output "printf tab in format" 'printf "a\tb\n"'
25 compare_output "printf backslash in format" 'printf "a\\\\b\n"'
26 compare_output "printf carriage return" 'printf "hello\rworld\n"'
27 compare_output "printf literal percent" 'printf "100%%\n"'
28
29 section "4. printf multiple args and %b"
30 compare_output "printf recycles format for multiple args" 'printf "%s\n" a b c'
31 compare_output "printf %b interprets escapes in arg" 'printf "%b\n" "hello\nworld"'
32 compare_output "printf multiple %s in format" 'printf "%s=%s\n" key val'
33 compare_output "printf mixed format" 'printf "%s is %d\n" age 25'
34
35 section "5. printf error handling"
36 compare_exit "printf missing format string" 'printf'
37 compare_output "printf missing arg uses default" 'printf "%s %d\n"'
38 compare_output "printf extra args recycle" 'printf "%s\n" a b c d'
39 check_output "printf %d with non-numeric arg" 'printf "%d\n" abc 2>&1' "fortsh: printf: abc: invalid number
40 0"
41
42 section "6. printf special formats"
43 compare_output "printf %q shell-quoted string" 'printf "%q\n" "hello world"'
44 compare_output "printf octal escape in format" 'printf "\101\n"'
45 compare_output "printf hex escape in format" 'printf "\x41\n"'
46
47 print_summary