Temat: [KOL] Testy

Potwierdzam
Ale Kamil, tu jest jeszcze paczka small, którą pominąłeś. Co mam zrobić aby i na niej przetestować?
A tak na poważnie, to można jeszcze trochę uwygodnić tę testerkę

for t in $2/*.in; do
echo $q
o=${t%.in}.out
diff -bsq $o <(./$1 < $t) || break
done

aby nie trzeba było jej za każdym razem zmieniać jak zmieniamy testowany program i folder tylko można je podawać jako argumenty uruchamiania, przykładowe użycie "./test.sh kol big"
Potwierdzam obydwie paczki
Potwierdzam
To ja też potwierdzam :)
To ja też wrzucę swoją sprawdzaczkę do testów:

#!/bin/bash
PROG_OUT=out

if [ $# == 0 ] ; then
echo "using: $0 PROG [PROG_test]"
exit
fi
if [ $# == 1 ] ; then
PROG=$1
FILES="${PROG}_test"
else
PROG=$1
FILES=$2
fi

echo "Program name: $PROG"
echo "Test folder: $FILES"
echo "Processing..."

let good=0
let bad=0

FILES="${FILES}/*.in"

for INPUT in $FILES
do
OUTPUT=${INPUT/%.in/.out}

./$PROG < $INPUT > $PROG_OUT
if diff $OUTPUT $PROG_OUT --ignore-trailing-space --ignore-space-change &>/dev/null ; then
let good++
else
let bad++
echo "błąd: $INPUT"
fi
done

echo "Test passed: $good"
echo "Test failed: $bad"
Potwierdzam
potwierdzam
Potwierdzam obie paki. Moja sprawdzaczka wygląda tak (plik Makefile, \t to tabulator):

------8<------
TARGET = $(basename $(wildcard *.cpp))

.PHONY: all clean test check %.check

all: $(TARGET)

%: %.cpp
\tg++ -std=c++17 -static -O3 $< -lm -Wall -o $@

clean:
\t-rm $(TARGET)

test: $(addsuffix .out,$(basename $(shell ls -v *.in 2>/dev/null)))

%.out: %.in $(TARGET)
\t./$(TARGET) < $< > $@

check: $(addsuffix .check,$(basename $(shell ls -v *.out 2>/dev/null)))

%.check: %.in $(TARGET)
\t./$(TARGET) < $< | diff - $(addsuffix .out,$(basename $@)) || true

time: $(addsuffix .time,$(basename $(shell ls -v *.in 2>/dev/null)))

%.time: %.in $(TARGET)
#\ttime -f%U ./$(TARGET) < $< > /dev/null
\tsh -c "time ./$(TARGET) < $< > /dev/null" 2>&1 | grep user

%.in: %
\t./$< > $@
------8<------

Uruchamianie:
make # kompilacja
make clean # usunięcie skompilowanych programów
make check # sprawdzenie testów (uruchomienie dla *.in i porównanie wyników z *.out)
make test # utworzenie wyników *.out na podstawie *.in
make time # test wydajnościowy (zmierzenie czasów wykonania dla wszystkich *.in)
Potwierdzam
Ciekawe testy, potwierdzam poprawność.
Potwierdzam.
Potwierdzam
Potwierdzam
Potwierdzam
Potwierdzam
Potwierdzam
Potwierdzam