pliki *.in; *.out

0

Mam program w c++ i testy w plikach *in (w *.out wyniki). W jaki sposób mogę sprawdzic te testy z wyjsciem mojego programu?

0

diff out_twojego_programu out_testowy to w linii poleceń.

0

jest jeszcze comp, możesz też zainstalować plugin compare do notepad++...

0

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?

1

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

0

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" ?

0
@echo off
problemy2 <in2.txt >out
fc /B out2.out out
pause
problemy2 <in3.txt >out
fc /B out3.out out
pause

1 użytkowników online, w tym zalogowanych: 0, gości: 1