Difference between revisions of "Libchecker:Примеры использования"

From EjudgeWiki
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
Навигация: [[Main Page|Главная страница]]/[[Система ejudge]]/[[Проверяющие программы]]/[[libchecker]]/[[libchecker:Примеры использования]]
+
Навигация: [[Main Page|Главная страница]]/[[Система ejudge]]/[[Проверяющие программы]]/[[libchecker]]/[[libchecker:Примеры использования|Примеры использования]]
  
 
===Сравнение двух целых чисел===
 
===Сравнение двух целых чисел===
Line 33: Line 33:
  
 
===Сравнение двух текстовых файлов===
 
===Сравнение двух текстовых файлов===
Приведённая ниже проверяющая программа сравнивает файл с результатом работы тести-
+
Приведённая ниже проверяющая программа сравнивает файл с результатом работы тестируемой программы с эталонным файлом. При сравнении игнорируются пробелы на концах
руемой программы с эталонным файлом. При сравнении игнорируются пробелы на концах
 
 
строк и пустые строки в конце файлов.
 
строк и пустые строки в конце файлов.
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 checker_normalize_file(team_lines, &team_lines_num);
+
15   <tt>''// отбрасываем пробелы в результате работы программы''</tt>
17 // отбрасываем пробелы в эталонном файле
+
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 }