Mam program w c++ i testy w plikach *in (w *.out wyniki). W jaki sposób mogę sprawdzic te testy z wyjsciem mojego programu?
diff out_twojego_programu out_testowy to w linii poleceń.
jest jeszcze comp, możesz też zainstalować plugin compare do notepad++...
mógłbys bardziej łopatologicznie? :D mam pierwszy raz do czynienia z tym. tzn musze wyrzucic wyjscie programu do pliku, tak? i porownac te dwa pliki? i jakiej linii polecen?
Rozwiązanie dla systemów Linux
Ten skrypt napisałem sobie na potyczki algorytmiczne:
#!/usr/bin/python
from subprocess import call
import sys
import os
import glob
output_filename = 'app'
class testset:
def __init__(self, input_filename, expected_filename):
self._input_filename = input_filename
self._expected_filename = expected_filename
def run_test(self):
command_to_run = './{0} < {1} > tmp_output'.format(output_filename, self._input_filename)
if os.system(command_to_run) <> 0:
return False
expected = open(self._expected_filename, 'r')
output = open('tmp_output', 'r')
res = output.read().strip() == expected.read().strip()
expected.close()
output.close()
return res
def input_filename(self):
return self._input_filename
def cppcompile():
return 0 == call(['g++', '-Wall', '-pedantic', '-g', 'main.cpp', '-lm', '-o{0}'.format(output_filename)])
#################################################################
# insert tests to be run here. all tests must be testset object #
#################################################################
tests = []
def read_available_tests():
'''reads all tests in directory in format test_name.in for input data and test_name.out for output data'''
path = '.'
for infile in glob.glob( os.path.join(path, '*.in') ):
test_name = infile[:-3]
tests.append(testset("{0}.in".format(test_name), '{0}.out'.format(test_name)))
read_available_tests()
if not cppcompile():
sys.exit(2)
if len(tests) == 0:
print 'no tests has been setup. please edit {0} or create tests int format name.in, name.out'.format(sys.argv[0])
sys.exit(3)
failed_tests = []
for test in tests:
if not test.run_test():
failed_tests.append(test.input_filename())
if len(failed_tests) == 0:
print 'all tests succeeded'
sys.exit(0)
else:
print 'Tests that failed:'
print failed_tests
sys.exit(1)
Zakłada, że w katalogu znajduje się plik main.cpp, kompiluje go(do debugowania), znajduje wszystkie testy i wypisuje raporcik. Od razu przepraszam ludzi na codzień piszących w pythonie za tę wizualną torturę. Myślę, że skrypt się przyda.
Edit: na prośbę pytającego napiszę tutaj "co trzeba z tym skryptem zrobić":
Skrypt należy skopiować do katalogu z plikiem main.cpp oraz plikami *.in, *.out.
Następnie należy nadać mu prawa do uruchomienia:
chmod +x test.py
Teraz wystarczy go uruchomić:
./test.py
Mam skrypt sprawdzający pod windowsa. jednak nie rozumiem kilku rzeczy..
ocen.bat
(c) 2003, Olimpiada Informatyczna
SPOSOB UZYCIA:
Umiesc plik wykonywalny z rozwiazaniem swojego zadania w katalogu
zawierjacym ocen.bat.
ocen.bat ID
gdzie ID jest identyfikatorem zadania
Ocenienie rozwiazania zadania ID na podstawie wszystkich
testow zawartych w zestawie.
(gdzie ID oznacza trzyliterowy identyfikator zadania)
Przyklad:
ocen.bat szp
ocen.bat ID NR
gdzie ID jest identyfikatorem zadania
NR jest numerem testu
Ocenienie rozwiazania zadania ID na podstawie testu o numerze NR
Przyklad:
ocen.bat szp 1
"ocen.bat ID
gdzie ID jest identyfikatorem zadania". Gdzie ja mam niby wywołac te polecenie "ocen.bat ID" ?
@echo off
problemy2 <in2.txt >out
fc /B out2.out out
pause
problemy2 <in3.txt >out
fc /B out3.out out
pause