#!/bin/bash set -euo pipefail if [[ $# -ne 2 ]]; then echo "$0 " exit 1 fi CONCAT=$1 MAKE_PNG=$2 INPUT1=$(mktemp -p .) INPUT2=$(mktemp -p .) EXPECTED_TXT=$(mktemp -p .) EXPECTED=$(mktemp -p .) ACTUAL=$(mktemp -p .) function die { echo "$1" rm -f "$INPUT1" "$INPUT2" "$EXPECTED_TXT" "$EXPECTED" "$ACTUAL" exit 1 } # Testing inputs with matching widths. "./$MAKE_PNG" 4 3 1 2 3 > "$INPUT1" "./$MAKE_PNG" 4 2 10 20 30 > "$INPUT2" cat < "$EXPECTED_TXT" P3 4 5 255 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 10 20 30 10 20 30 10 20 30 10 20 30 10 20 30 10 20 30 10 20 30 10 20 30 EOT ppmtoppm < "$EXPECTED_TXT" > "$EXPECTED" "./$CONCAT" "$INPUT1" "$INPUT2" > "$ACTUAL" if ! ( pngtopnm "$ACTUAL" | ppmtoppm | diff -q "$EXPECTED" - ); then die "$LINENO: Output mismatched" fi # Testing inputs with mismatched widths. "./$MAKE_PNG" 1 4 1 2 3 > "$INPUT1" "./$MAKE_PNG" 4 1 10 20 30 > "$INPUT2" cat < "$EXPECTED_TXT" P3 4 5 255 1 2 3 0 0 0 0 0 0 0 0 0 1 2 3 0 0 0 0 0 0 0 0 0 1 2 3 0 0 0 0 0 0 0 0 0 1 2 3 0 0 0 0 0 0 0 0 0 10 20 30 10 20 30 10 20 30 10 20 30 EOT ppmtoppm < "$EXPECTED_TXT" > "$EXPECTED" "./$CONCAT" "$INPUT1" "$INPUT2" > "$ACTUAL" if ! ( pngtopnm -mix -background rgb:00/00/00 "$ACTUAL" | ppmtoppm | diff -q "$EXPECTED" - ); then die "$LINENO: Output mismatched" fi # Try again with a different background color to verify alpha. # Also switch the order for variety. cat < "$EXPECTED_TXT" P3 4 5 255 10 20 30 10 20 30 10 20 30 10 20 30 1 2 3 9 8 7 9 8 7 9 8 7 1 2 3 9 8 7 9 8 7 9 8 7 1 2 3 9 8 7 9 8 7 9 8 7 1 2 3 9 8 7 9 8 7 9 8 7 EOT ppmtoppm < "$EXPECTED_TXT" > "$EXPECTED" "./$CONCAT" "$INPUT2" "$INPUT1" > "$ACTUAL" if ! ( pngtopnm -mix -background rgb:09/08/07 "$ACTUAL" | ppmtoppm | diff -q "$EXPECTED" - ); then die "$LINENO: Output mismatched" fi # Try reading from stdin twice. cat < "$INPUT1" P3 4 3 255 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 EOT cat < "$EXPECTED_TXT" P3 4 6 255 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 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 EOT ppmtoppm < "$EXPECTED_TXT" > "$EXPECTED" pnmtopng "$INPUT1" | "./$CONCAT" - - > "$ACTUAL" if ! ( pngtopnm "$ACTUAL" | ppmtoppm | diff -q "$EXPECTED" - ); then die "$LINENO: Output mismatched" fi rm -f "$INPUT1" "$INPUT2" "$EXPECTED_TXT" "$EXPECTED" "$ACTUAL"