Difference between revisions of "Libchecker:Примеры использования"
From EjudgeWiki
(2 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
− | Навигация: [[Main Page|Главная страница]]/[[Система ejudge]]/[[Проверяющие программы]]/[[libchecker]]/[[libchecker:Примеры использования]] | + | Навигация: [[Main Page|Главная страница]]/[[Система ejudge]]/[[Проверяющие программы]]/[[libchecker]]/[[libchecker:Примеры использования|Примеры использования]] |
===Сравнение двух целых чисел=== | ===Сравнение двух целых чисел=== | ||
Line 5: | Line 5: | ||
эталонным ответом. | эталонным ответом. | ||
− | 1 <tt>'''#define''' NEED_CORR 1</tt> | + | 1 <tt>'''#define''' NEED_CORR 1</tt> |
− | + | 2 <tt>'''#define''' NEED_INFO 0</tt> | |
− | 2 <tt>'''#define''' NEED_INFO 0</tt> | + | 3 <tt>'''#define''' NEED_TGZ 0</tt> |
− | + | 4 <tt>'''#include''' "checker.h"</tt> | |
− | 3 <tt>'''#define''' NEED_TGZ 0</tt> | + | 5 |
− | + | 6 <tt>'''int''' checker_main('''int''' argc, '''char''' **argv)</tt> | |
− | 4 <tt>'''#include''' "checker.h"</tt> | + | 7 <tt>{</tt> |
− | + | 8 <tt> '''int''' team_ans, corr_ans;</tt> | |
− | 5 | + | 9 |
− | + | 10 <tt> ''// presentation error, если файл пуст или нельзя считать число''</tt> | |
− | 6 <tt>'''int''' checker_main('''int''' argc, '''char''' **argv)</tt> | + | 11 <tt>checker_read_team_int("team_ans", 1, &team_ans);</tt> |
− | + | 12 | |
− | 7 <tt>{</tt> | + | 13 <tt> ''// checker failed, если файл пуст или нельзя считать число''</tt> |
− | + | 14 <tt>checker_read_corr_int("corr_ans", 1, &corr_ans);</tt> | |
− | 8 <tt> '''int''' team_ans, corr_ans;</tt> | + | 15 |
− | + | 16 <tt> ''// presentation error, если после числа в файле идёт "мусор"''</tt> | |
− | 9 | + | 17 <tt>checker_team_eof();</tt> |
− | + | 18 | |
− | 10 <tt> ''// presentation error, если файл пуст или нельзя считать число''</tt> | + | 19 <tt> ''// checker failed, если после числа в файле идёт "мусор"''</tt> |
− | + | 20 <tt>checker_corr_eof();</tt> | |
− | 11 <tt>checker_read_team_int("team_ans", 1, &team_ans);</tt> | + | 21 |
− | + | 22 <tt> '''if''' (team_ans != corr_ans)</tt> | |
− | 12 | + | 23 <tt> fatal_WA("Answers do not match: team = %d, corr = %d",</tt> |
− | + | 24 <tt> team_ans, corr_ans);</tt> | |
− | 13 <tt> ''// checker failed, если файл пуст или нельзя считать число''</tt> | + | 25 <tt> checker_OK();</tt> |
− | + | 26 <tt>}</tt> | |
− | 14 <tt>checker_read_corr_int("corr_ans", 1, &corr_ans);</tt> | ||
− | |||
− | 15 | ||
− | |||
− | 16 <tt> ''// presentation error, если после числа в файле идёт "мусор"''</tt> | ||
− | |||
− | 17 <tt>checker_team_eof();</tt> | ||
− | |||
− | 18 | ||
− | |||
− | 19 <tt> ''// checker failed, если после числа в файле идёт "мусор"''</tt> | ||
− | |||
− | 20 <tt>checker_corr_eof();</tt> | ||
− | |||
− | 21 | ||
− | |||
− | 22 <tt> '''if''' (team_ans != corr_ans)</tt> | ||
− | |||
− | 23 <tt> fatal_WA("Answers do not match: team = %d, corr = %d",</tt> | ||
− | |||
− | 24 <tt> team_ans, corr_ans);</tt> | ||
− | |||
− | 25 <tt> checker_OK();</tt> | ||
− | |||
− | 26 <tt>}</tt> | ||
===Сравнение двух текстовых файлов=== | ===Сравнение двух текстовых файлов=== | ||
− | Приведённая ниже проверяющая программа сравнивает файл с результатом работы | + | Приведённая ниже проверяющая программа сравнивает файл с результатом работы тестируемой программы с эталонным файлом. При сравнении игнорируются пробелы на концах |
− | |||
строк и пустые строки в конце файлов. | строк и пустые строки в конце файлов. | ||
− | 1 #define NEED_CORR 1 | + | |
− | 2 #define NEED_INFO 0 | + | 1 <tt>'''#define''' NEED_CORR 1</tt> |
− | 3 #define NEED_TGZ 0 | + | 2 <tt>'''#define''' NEED_INFO 0</tt> |
− | 4 #include "checker.h" | + | 3 <tt>'''#define''' NEED_TGZ 0</tt> |
− | 5 | + | 4 <tt>'''#include''' "checker.h"</tt> |
− | 6 int checker_main(int argc, char **argv) | + | 5 |
− | 7 { | + | 6 <tt>'''int''' checker_main('''int''' argc, '''char''' **argv)</tt> |
− | 8 char **team_lines, **corr_lines; | + | 7 <tt>{</tt> |
− | 9 size_t team_lines_num, corr_lines_num, i; | + | 8 <tt>'''char''' **team_lines, **corr_lines;</tt> |
− | 10 | + | 9 <tt>size_t team_lines_num, corr_lines_num, i;</tt> |
− | 11 // считываем файл результата работы программы | + | 10 |
− | 12 checker_read_file_by_line(1, &team_lines, &team_lines_num); | + | 11 <tt>''// считываем файл результата работы программы''</tt> |
− | 13 // считываем эталонный файл | + | 12 <tt>checker_read_file_by_line(1, &team_lines, &team_lines_num);</tt> |
− | 14 checker_read_file_by_line(2, &corr_lines, &corr_lines_num); | + | 13 <tt>''// считываем эталонный файл''</tt> |
− | 15 // отбрасываем пробелы в результате работы программы | + | 14 <tt>checker_read_file_by_line(2, &corr_lines, &corr_lines_num);</tt> |
− | 16 | + | 15 <tt>''// отбрасываем пробелы в результате работы программы''</tt> |
− | + | 16 <tt>''// отбрасываем пробелы в эталонном файле''</tt> | |
− | 18 checker_normalize_file(corr_lines, &corr_lines_num); | + | 18 <tt>checker_normalize_file(corr_lines, &corr_lines_num);</tt> |
− | 19 | + | 19 |
− | 20 if (team_lines_num != corr_lines_num) | + | 20 <tt>'''if''' (team_lines_num != corr_lines_num)</tt> |
− | 21 fatal_WA("Different number of lines: team = %zu, corr = %zu", | + | 21 <tt>fatal_WA("Different number of lines: team = %zu, corr = %zu",</tt> |
− | 22 team_lines_num, corr_lines_num); | + | 22 <tt>team_lines_num, corr_lines_num);</tt> |
− | 23 for (i = 0; i < team_lines_num; i++) | + | 23 <tt>'''for''' (i = 0; i < team_lines_num; i++)</tt> |
− | 24 if (strcmp(team_lines[i], corr_lines[i]) != 0) | + | 24 <tt>'''if''' (strcmp(team_lines[i], corr_lines[i]) != 0)</tt> |
− | 25 fatal_WA("Line %zu differs: team:\n>%s<\ncorr:\n>%s<", | + | 25 <tt>fatal_WA("Line %zu differs: team:\n>%s<\ncorr:\n>%s<",</tt> |
− | 26 i + 1, team_lines[i], corr_lines[i]); | + | 26 <tt>i + 1, team_lines[i], corr_lines[i]);</tt> |
− | 27 | + | 27 |
− | 28 checker_OK(); | + | 28 <tt>checker_OK();</tt> |
− | 29 } | + | 29 <tt>}</tt> |
Latest revision as of 09:10, 24 February 2012
Навигация: Главная страница/Система ejudge/Проверяющие программы/libchecker/Примеры использования
Сравнение двух целых чисел
Приведённая ниже проверяющая программа предполагает, что файл с результатом работы программы должен содержать единственное целое число. Это число сравнивается с эталонным ответом.
1 #define NEED_CORR 1 2 #define NEED_INFO 0 3 #define NEED_TGZ 0 4 #include "checker.h" 5 6 int checker_main(int argc, char **argv) 7 { 8 int team_ans, corr_ans; 9 10 // presentation error, если файл пуст или нельзя считать число 11 checker_read_team_int("team_ans", 1, &team_ans); 12 13 // checker failed, если файл пуст или нельзя считать число 14 checker_read_corr_int("corr_ans", 1, &corr_ans); 15 16 // presentation error, если после числа в файле идёт "мусор" 17 checker_team_eof(); 18 19 // checker failed, если после числа в файле идёт "мусор" 20 checker_corr_eof(); 21 22 if (team_ans != corr_ans) 23 fatal_WA("Answers do not match: team = %d, corr = %d", 24 team_ans, corr_ans); 25 checker_OK(); 26 }
Сравнение двух текстовых файлов
Приведённая ниже проверяющая программа сравнивает файл с результатом работы тестируемой программы с эталонным файлом. При сравнении игнорируются пробелы на концах строк и пустые строки в конце файлов.
1 #define NEED_CORR 1 2 #define NEED_INFO 0 3 #define NEED_TGZ 0 4 #include "checker.h" 5 6 int checker_main(int argc, char **argv) 7 { 8 char **team_lines, **corr_lines; 9 size_t team_lines_num, corr_lines_num, i; 10 11 // считываем файл результата работы программы 12 checker_read_file_by_line(1, &team_lines, &team_lines_num); 13 // считываем эталонный файл 14 checker_read_file_by_line(2, &corr_lines, &corr_lines_num); 15 // отбрасываем пробелы в результате работы программы 16 // отбрасываем пробелы в эталонном файле 18 checker_normalize_file(corr_lines, &corr_lines_num); 19 20 if (team_lines_num != corr_lines_num) 21 fatal_WA("Different number of lines: team = %zu, corr = %zu", 22 team_lines_num, corr_lines_num); 23 for (i = 0; i < team_lines_num; i++) 24 if (strcmp(team_lines[i], corr_lines[i]) != 0) 25 fatal_WA("Line %zu differs: team:\n>%s<\ncorr:\n>%s<", 26 i + 1, team_lines[i], corr_lines[i]); 27 28 checker_OK(); 29 }