fold/bench/corpora/poj-104/fetch.sh
trvon 3f1234f7bb
fold: bounded symbolic SAST for C++
Clang LibTooling + Z3 BV-64 encoding.
11 detectors: clone, equiv, class-dup, dead, null-deref,
div-by-zero, int-overflow, oob, int-truncation,
sign-conversion, taint-track.

Interfaces: CLI, MCP (JSON-RPC 2.0), LSP.
Output: SARIF 2.1.0, JSON, Markdown.
2026-05-14 23:14:54 -04:00

48 lines
1.6 KiB
Bash
Executable file

#!/usr/bin/env bash
# Fetch the POJ-104 C++ source corpus from Microsoft's CodeXGLUE repo.
#
# Layout afterwards:
# bench/corpora/poj-104/dataset/
# 1/1.txt 2.txt ... # 104 algorithm folders, each containing ~500 .txt
# 2/...
# ...
#
# CodeXGLUE ships the files as `.txt` (the original submission archive used
# .txt to bypass file-type filtering). We rename them to `.cpp` in place so
# the standard run_bench.py glob picks them up.
set -euo pipefail
HERE="$(cd "$(dirname "$0")" && pwd)"
cd "$HERE"
if [[ -d dataset ]]; then
echo "POJ-104 already fetched at $HERE/dataset; skipping clone."
exit 0
fi
echo "Cloning CodeXGLUE (sparse: POJ-104 only)..."
TMPDIR="$(mktemp -d)"
trap 'rm -rf "$TMPDIR"' EXIT
git clone --depth 1 --filter=blob:none --sparse \
https://github.com/microsoft/CodeXGLUE.git "$TMPDIR/codex"
( cd "$TMPDIR/codex" && \
git sparse-checkout set Code-Code/Clone-detection-POJ-104/dataset )
mv "$TMPDIR/codex/Code-Code/Clone-detection-POJ-104/dataset" "$HERE/dataset-raw"
echo "Renaming .txt → .cpp so run_bench's *.cpp glob finds them..."
( cd "$HERE/dataset-raw" && find . -name '*.txt' -print0 \
| xargs -0 -I{} sh -c 'mv "{}" "${1%.txt}.cpp"' _ {} )
mv "$HERE/dataset-raw" "$HERE/dataset"
count=$(find "$HERE/dataset" -name '*.cpp' | wc -l)
echo "POJ-104 ready: $count .cpp files in $HERE/dataset"
echo ""
echo "Next:"
echo " python3 bench/gold/_generate_poj104.py"
echo " python3 bench/run_bench.py --corpus $HERE/dataset --name poj-104 \\"
echo " --tools fold,clang-tidy --detectors equiv --processes 4"
echo " python3 bench/score.py --run-dir bench/results/<latest> \\"
echo " --gold bench/gold/poj-104.json"