Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions .github/scripts/iccdev-applysearch-cli-args-regression.sh
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ APPLY="$(find "$TOOLS_DIR" -maxdepth 2 -name iccApplySearch -type f 2>/dev/null
DATA="$TESTING_DIR/ApplyDataFiles/rgb8bit.txt"
SRGB="$TESTING_DIR/sRGB_v4_ICC_preference.icc"
CFG="$OUTDIR/applysearch-cfg.json"
THREADED_DATA="$OUTDIR/rgb8bit-threaded.txt"

fail() {
echo " [FAIL] iccApplySearch-cli-args -- $1"
Expand Down Expand Up @@ -147,9 +148,54 @@ require_file "$CFG"
run_expect_success valid-cfg "$APPLY" -cfg "$CFG"
run_expect_success valid-legacy "$APPLY" "$DATA" 0 0 "$SRGB" 1 "$SRGB" 1 -INIT 1

# Repeat the tracked input until the batch is strictly larger than the
# 1,024-pixel bulk threshold. This makes all eight requested workers useful and
# keeps the fixture generated from an existing cross-platform input even if its
# row count changes.
sed -n '1,2p' "$DATA" > "$THREADED_DATA"
source_rows="$(sed -n '3,$p' "$DATA" | awk 'NF { count++ } END { print count + 0 }')"
if (( source_rows <= 0 )); then
fail "tracked input has no data rows"
fi
repeat_count=$((1024 / source_rows + 1))
for ((i = 0; i < repeat_count; ++i)); do
sed -n '3,$p' "$DATA" >> "$THREADED_DATA"
done
threaded_rows="$(sed -n '3,$p' "$THREADED_DATA" | awk 'NF { count++ } END { print count + 0 }')"
if (( threaded_rows <= 1024 )); then
fail "threaded fixture has only $threaded_rows data rows"
fi

run_expect_success valid-threads-default \
"$APPLY" "$THREADED_DATA" 0 0 "$SRGB" 1 "$SRGB" 1 -INIT 1
if [ ! -s "$OUTDIR/valid-threads-default.log" ]; then
fail "valid-threads-default produced no output"
fi
for nthreads in 0 1 2 4 8; do
run_expect_success "valid-threads-$nthreads" \
"$APPLY" -threads "$nthreads" "$THREADED_DATA" 0 0 "$SRGB" 1 "$SRGB" 1 -INIT 1
if [ ! -s "$OUTDIR/valid-threads-$nthreads.log" ]; then
fail "valid-threads-$nthreads produced no output"
fi
cmp "$OUTDIR/valid-threads-default.log" "$OUTDIR/valid-threads-$nthreads.log" ||
fail "valid-threads-$nthreads output differs from the default output"
done
run_expect_success valid-threads-cfg "$APPLY" -threads 8 -cfg "$CFG"

# The #1674 guard this script exists for: everything past argv[2] used to be read
# and dropped, leaving a zero exit behind.
run_expect_reject cfg-extra "$APPLY" -cfg "$CFG" ignored-extra
run_expect_reject threads-negative "$APPLY" -threads -1 -cfg "$CFG"
run_expect_reject threads-too-large "$APPLY" -threads 257 -cfg "$CFG"
grep -Fq "expected 0..256" "$OUTDIR/threads-too-large.log" ||
fail "threads-too-large diagnostic omitted the supported range"
run_expect_reject threads-not-a-number "$APPLY" -threads nope -cfg "$CFG"
run_expect_reject threads-missing-count "$APPLY" -threads
run_expect_reject threads-missing-command "$APPLY" -threads 8
run_expect_reject threads-debugcalc \
"$APPLY" -threads 8 -debugcalc "$DATA" 0 0 "$SRGB" 1 "$SRGB" 1 -INIT 1
grep -Fqx -- "-debugcalc requires -threads 1" "$OUTDIR/threads-debugcalc.log" ||
fail "threads-debugcalc did not enforce the single-thread diagnostic"

# Already rejected on master; pinned so the surface cannot regress quietly.
run_expect_reject init-missing-value "$APPLY" "$DATA" 0 0 "$SRGB" 1 "$SRGB" 1 -INIT
Expand Down
5 changes: 5 additions & 0 deletions docs/ctest.md
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,11 @@ The JSON round-trip uses a temporary directory for generated `.json` and
round-trip `.icc` files so a passing Unix run does not remove or modify tracked
files in `Testing/`.

`iccdev.applysearch-cli-args` derives a batch of more than 1,024 rows from the
tracked RGB input and requires byte-identical output for the default path and
`-threads 0`, `1`, `2`, `4`, and `8`. It also covers configuration mode,
malformed thread counts, and the single-thread requirement for `-debugcalc`.

`iccdev.tool-coverage` may add focused command-line regressions inside the
existing script without changing the CTest suite count. When a bug is tied to an
AFL-minimized crash or hang, embed the smallest stable reproducer in the script
Expand Down