Skip to content

Commit

Permalink
Merge pull request #305 from blackav/296-support-test-groups-in-polyg…
Browse files Browse the repository at this point in the history
…on-import

296 support test groups in polygon import
  • Loading branch information
blackav authored Jan 27, 2024
2 parents 2933ce9 + 0ac11f0 commit e2c564d
Show file tree
Hide file tree
Showing 25 changed files with 899 additions and 42 deletions.
535 changes: 533 additions & 2 deletions bin/ej-polygon.c

Large diffs are not rendered by default.

10 changes: 8 additions & 2 deletions checkers/main.unix.make
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# -*- Makefile -*-

# Copyright (C) 2015-2022 Alexander Chernov <[email protected]> */
# Copyright (C) 2015-2024 Alexander Chernov <[email protected]> */

# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
Expand Down Expand Up @@ -66,10 +66,12 @@ endif
endif
TARGETLIBS = libchecker.a libchecker2.a

TARGETS += gvaluer

all : ${TARGETS} mo

clean :
-rm -fr *.o *.a *.so *~ *.bak testinfo.h trie.h trie_private.h trie_4.c testinfo.c testinfo_lookup.c pic pic32 m32 ${CHKXFILES} ${STYLEXFILES}
-rm -fr *.o *.a *.so *~ *.bak testinfo.h trie.h trie_private.h trie_4.c testinfo.c testinfo_lookup.c pic pic32 m32 ${CHKXFILES} ${STYLEXFILES} gvaluer
pic :
mkdir pic

Expand Down Expand Up @@ -100,6 +102,7 @@ install : all
install -m 644 delphi/testlib.pas "${DESTDIR}${datadir}/ejudge/testlib/delphi"
mkdir -p "${DESTDIR}${libexecdir}/ejudge/checkers"
for i in ${CHKXFILES} ${STYLEXFILES}; do install -m 755 $$i "${DESTDIR}${libexecdir}/ejudge/checkers"; done
for i in gvaluer; do install -m 755 $$i "${DESTDIR}${libexecdir}/ejudge/checkers"; done
-cd "${DESTDIR}${datadir}/ejudge/testlib/fpc"; FPC=`"${DESTDIR}${libexecdir}/ejudge"/fpc-version -p`; [ x"$$FPC" != x ] && "$$FPC" testlib.pas
-cd "${DESTDIR}${datadir}/ejudge/testlib/delphi"; DCC=`"${DESTDIR}${libexecdir}/ejudge"/dcc-version -p`; [ x"$$DCC" != x ] && "$$DCC" testlib.pas
if [ x"${ENABLE_NLS}" = x1 ]; then for locale in "ru_RU.UTF-8" "uk_UA.UTF-8" "kk_KZ.UTF-8"; do install -d "${DESTDIR}${datadir}/locale/$${locale}/LC_MESSAGES"; install -m 0644 "locale/$${locale}/LC_MESSAGES/ejudgecheckers.mo" "${DESTDIR}${datadir}/locale/$${locale}/LC_MESSAGES"; done; fi
Expand Down Expand Up @@ -227,6 +230,9 @@ cmp_% : cmp_%.c checker.h checker_internal.h libchecker.so
${CC} ${CFLAGS} ${LDFLAGS} ${RPATHOPT} -L. $< -o $@ -lchecker -lm
endif

gvaluer : gvaluer.cpp
g++ -Wall -Werror -O2 $^ -o$@ || ( echo 'echo "gvaluer not compiled"' > gvaluer; chmod 755 gvaluer)

style_% : style_%.c
${CC} ${CFLAGS} ${LDFLAGS} -L.. $< -o $@ -lcommon -lplatform -lcommon -lplatform -lz -lm

Expand Down
10 changes: 9 additions & 1 deletion csp/super-server/cnts_edit_cur_problem_checking.csp
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
<%@expand MENU_YESNO3 "enable_extended_info" "checking" "Pass extended info to checkers" "250" %>
<%@expand MENU_YESNO3 "stop_on_first_fail" "checking" "Stop after the first failed test (like ACM)" "250" %>
<%@expand MENU_TEXTFIELD_WITH_DEFAULT "valuer_cmd" "checking" "Score valuer name" "250" %>
<%@expand MENU_TEXTFIELD_WITH_DEFAULT "standard_valuer" "checking" "Standard valuer" "250" %>
<%@expand MENU_YESNO3 "valuer_sets_marked" "checking" "Valuer sets <i>marked</i> flag" "250" %>
<%@expand MENU_YESNO3 "interactive_valuer" "checking" "Valuer works interactively" "250" %>
<%@expand MENU_TEXTFIELD "valuer_env" "checking" "Valuer environment" "250" %>
Expand Down Expand Up @@ -83,7 +84,7 @@ $(function() {
$("#orig-check_cmd-div").toggle(!has_standard_checker);
$("#orig-checker_env-div").toggle(<s:v type="jsbool" value="prob_id > 0" />);

var has_valuer = <s:v type="jsbool" value="tmp_prob->valuer_cmd" />;
var has_valuer = <s:v type="jsbool" value="tmp_prob->valuer_cmd" /> || <s:v type="jsbool" value="tmp_prob->standard_valuer" />;
$("#orig-valuer_sets_marked-div").toggle(has_valuer);
$("#orig-interactive_valuer-div").toggle(has_valuer);
$("#orig-valuer_env-div").toggle(has_valuer && <s:v type="jsbool" value="prob_id > 0" />);
Expand Down Expand Up @@ -115,6 +116,7 @@ function popupCheckingDialog(e, skipField)
<%@expand COPY_YESNO3 "enable_extended_info" %>
<%@expand COPY_YESNO3 "stop_on_first_fail" %>
<%@expand COPY_TEXTFIELD_WITH_DEFAULT "valuer_cmd" "!prob->valuer_cmd" %>
<%@expand COPY_TEXTFIELD_WITH_DEFAULT "standard_valuer" "!prob->standard_valuer" %>
<%@expand COPY_YESNO3 "valuer_sets_marked" %>
<%@expand COPY_YESNO3 "interactive_valuer" %>
<%@expand COPY_TEXTFIELD "valuer_env" %>
Expand All @@ -133,6 +135,7 @@ function popupCheckingDialog(e, skipField)
<%@expand CLEAR_TEXTFIELD_WITH_DEFAULT "checker_max_rss_size" %>
<%@expand CLEAR_TEXTFIELD "checker_env" %>
<%@expand CLEAR_TEXTFIELD_WITH_DEFAULT "valuer_cmd" %>
<%@expand CLEAR_TEXTFIELD_WITH_DEFAULT "standard_valuer" %>
<%@expand CLEAR_TEXTFIELD "valuer_env" %>
<%@expand CLEAR_TEXTFIELD_WITH_DEFAULT "interactor_cmd" %>
<%@expand CLEAR_TEXTFIELD "interactor_env" %>
Expand All @@ -155,6 +158,7 @@ function checkingDialogOnChange(field)
<%@expand ONCHANGE_WITH_DEFAULT "checker_max_stack_size" %>
<%@expand ONCHANGE_WITH_DEFAULT "checker_max_rss_size" %>
<%@expand ONCHANGE_WITH_DEFAULT "valuer_cmd" %>
<%@expand ONCHANGE_WITH_DEFAULT "standard_valuer" %>
<%@expand ONCHANGE_WITH_DEFAULT "interactor_cmd" %>
<%@expand ONCHANGE_WITH_DEFAULT "interactor_time_limit" %>
<%@expand ONCHANGE_WITH_DEFAULT "interactor_real_time_limit" %>
Expand All @@ -166,6 +170,10 @@ function checkingDialogOnChange(field)

var valuer_cmd = $("#edit-valuer_cmd").val();
if ($("#edit-valuer_cmd_dflt").is(':checked') && <s:v type="jsbool" value="sup_prob && sup_prob->valuer_cmd" />) valuer_cmd = "X";
if (!valuer_cmd) {
valuer_cmd = $("#edit-standard_valuer").val();
if ($("#edit-standard_valuer_dflt").is(':checked') && <s:v type="jsbool" value="sup_prob && sup_prob->standard_valuer" />) valuer_cmd = "X";
}
$("#edit-valuer_sets_marked-div").toggle(valuer_cmd != "");
$("#edit-interactive_valuer-div").toggle(valuer_cmd != "");
$("#edit-valuer_env-div").toggle(valuer_cmd != "" && <s:v type="jsbool" value="prob_id > 0" />);
Expand Down
29 changes: 29 additions & 0 deletions csp/super-server/cnts_edit_cur_problem_page.csp
Original file line number Diff line number Diff line change
Expand Up @@ -1815,6 +1815,35 @@ function viewDialogOnChange(field)
}
%>

<%
{
%>
<s:tr attr="form_row_attrs[row ^= 1]" id="orig-standard_valuer-div">
<td>Standard valuer:</td>
<td><%
const unsigned char *value = prob->standard_valuer;
%><s:textfield id="orig-standard_valuer" readonly="readonly" name="param" value="value" size="48" maxlength="1024" checkExpr="" /><%
if (prob_id <= 0) {
if (!value) {
%>(<i>Not set</i>)<%
}
} else {
if (!value) {
if (!tmp_prob->standard_valuer) {
%>(<i>Not set</i>)<%
} else {
%>(<i>Default: <s:v value="tmp_prob->standard_valuer" /></i>)<%
}
}
}
%></td>
<td><input type="button" onclick="popupCheckingDialog(event, 'standard_valuer')" value="Clear" /></td>
<td onclick="np(event);"><s:help topic="Serve.cfg:problem:standard_valuer" /></td>
</s:tr>
<%
}
%>

<%@expand ORIG_INHERITABLE_BOOLEAN "valuer_sets_marked" "Checking" "Valuer sets <i>marked</i> flag" %>
<%@expand ORIG_INHERITABLE_BOOLEAN "interactive_valuer" "Checking" "Valuer works interactively" %>
<%@expand ORIG_ENV "valuer_env" "Checking" "Valuer environment" %>
Expand Down
20 changes: 20 additions & 0 deletions csp/super-server/prob_save_checking_form.csp
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@
int stop_on_first_fail = -1;
unsigned char *valuer_cmd = NULL;
ejintbool_t valuer_cmd_dflt = 0;
unsigned char *standard_valuer = NULL;
ejintbool_t standard_valuer_dflt = 0;
int valuer_sets_marked = -1;
int interactive_valuer = -1;
char **valuer_env = NULL;
Expand Down Expand Up @@ -80,6 +82,8 @@
%><s:read var="stop_on_first_fail" default="-1" /><%
%><s:read var="valuer_cmd" normalize="yes" nonnull="yes" /><%
%><s:read var="valuer_cmd_dflt" default="0" /><%
%><s:read var="standard_valuer" normalize="yes" nonnull="yes" /><%
%><s:read var="standard_valuer_dflt" default="0" /><%
%><s:read var="valuer_sets_marked" default="-1" /><%
%><s:read var="interactive_valuer" default="-1" /><%
%><s:read var="valuer_env" /><%
Expand Down Expand Up @@ -140,6 +144,10 @@
xfree(valuer_cmd);
valuer_cmd = NULL;
}
if (standard_valuer_dflt) {
xfree(standard_valuer);
standard_valuer = NULL;
}
if (valuer_sets_marked > 0) valuer_sets_marked = 1;
if (interactive_valuer > 0) interactive_valuer = 1;
if (interactor_cmd_dflt) {
Expand All @@ -155,6 +163,7 @@
}

if (prob_id <= 0) {
// abstract problem
i = -prob_id;
if (i >= phr->ss->aprob_u) FAIL(SSERV_ERR_INVALID_PARAMETER);
prob = phr->ss->aprobs[i];
Expand All @@ -166,6 +175,15 @@
if (stop_on_first_fail < 0) stop_on_first_fail = 0;
if (valuer_sets_marked < 0) valuer_sets_marked = 0;
if (interactive_valuer < 0) interactive_valuer = 0;
if (standard_checker && !standard_checker[0]) {
standard_checker = NULL;
}
if (valuer_cmd && !valuer_cmd[0]) {
xfree(valuer_cmd); valuer_cmd = NULL;
}
if (standard_valuer && !standard_valuer[0]) {
xfree(standard_valuer); standard_valuer = NULL;
}
} else {
i = prob_id;
if (i >= phr->ss->prob_a) FAIL(SSERV_ERR_INVALID_PARAMETER);
Expand Down Expand Up @@ -207,6 +225,7 @@
prob->enable_extended_info = enable_extended_info;
prob->stop_on_first_fail = stop_on_first_fail;
MOVESTR(valuer_cmd);
MOVESTR(standard_valuer);
prob->valuer_sets_marked = valuer_sets_marked;
prob->interactive_valuer = interactive_valuer;
MOVEENV(valuer_env);
Expand All @@ -233,6 +252,7 @@ cleanup:;
xfree(check_cmd);
sarray_free(checker_env);
xfree(valuer_cmd);
xfree(standard_valuer);
sarray_free(valuer_env);
xfree(interactor_cmd);
sarray_free(interactor_env);
Expand Down
14 changes: 14 additions & 0 deletions gen/prepare_meta.c
Original file line number Diff line number Diff line change
Expand Up @@ -1286,6 +1286,7 @@ static struct meta_info_item meta_info_section_problem_data_data[] =
[CNTSPROB_custom_compile_cmd] = { CNTSPROB_custom_compile_cmd, 's', XSIZE(struct section_problem_data, custom_compile_cmd), "custom_compile_cmd", XOFFSET(struct section_problem_data, custom_compile_cmd) },
[CNTSPROB_custom_lang_name] = { CNTSPROB_custom_lang_name, 's', XSIZE(struct section_problem_data, custom_lang_name), "custom_lang_name", XOFFSET(struct section_problem_data, custom_lang_name) },
[CNTSPROB_extra_src_dir] = { CNTSPROB_extra_src_dir, 's', XSIZE(struct section_problem_data, extra_src_dir), "extra_src_dir", XOFFSET(struct section_problem_data, extra_src_dir) },
[CNTSPROB_standard_valuer] = { CNTSPROB_standard_valuer, 's', XSIZE(struct section_problem_data, standard_valuer), "standard_valuer", XOFFSET(struct section_problem_data, standard_valuer) },
[CNTSPROB_test_pat] = { CNTSPROB_test_pat, 's', XSIZE(struct section_problem_data, test_pat), "test_pat", XOFFSET(struct section_problem_data, test_pat) },
[CNTSPROB_corr_pat] = { CNTSPROB_corr_pat, 's', XSIZE(struct section_problem_data, corr_pat), "corr_pat", XOFFSET(struct section_problem_data, corr_pat) },
[CNTSPROB_info_pat] = { CNTSPROB_info_pat, 's', XSIZE(struct section_problem_data, info_pat), "info_pat", XOFFSET(struct section_problem_data, info_pat) },
Expand Down Expand Up @@ -1353,12 +1354,15 @@ static struct meta_info_item meta_info_section_problem_data_data[] =
[CNTSPROB_open_tests] = { CNTSPROB_open_tests, 's', XSIZE(struct section_problem_data, open_tests), "open_tests", XOFFSET(struct section_problem_data, open_tests) },
[CNTSPROB_open_tests_count] = { CNTSPROB_open_tests_count, 'i', XSIZE(struct section_problem_data, open_tests_count), NULL, XOFFSET(struct section_problem_data, open_tests_count) },
[CNTSPROB_open_tests_val] = { CNTSPROB_open_tests_val, '?', XSIZE(struct section_problem_data, open_tests_val), NULL, XOFFSET(struct section_problem_data, open_tests_val) },
[CNTSPROB_open_tests_group] = { CNTSPROB_open_tests_group, '?', XSIZE(struct section_problem_data, open_tests_group), NULL, XOFFSET(struct section_problem_data, open_tests_group) },
[CNTSPROB_final_open_tests] = { CNTSPROB_final_open_tests, 's', XSIZE(struct section_problem_data, final_open_tests), "final_open_tests", XOFFSET(struct section_problem_data, final_open_tests) },
[CNTSPROB_final_open_tests_count] = { CNTSPROB_final_open_tests_count, 'i', XSIZE(struct section_problem_data, final_open_tests_count), NULL, XOFFSET(struct section_problem_data, final_open_tests_count) },
[CNTSPROB_final_open_tests_val] = { CNTSPROB_final_open_tests_val, '?', XSIZE(struct section_problem_data, final_open_tests_val), NULL, XOFFSET(struct section_problem_data, final_open_tests_val) },
[CNTSPROB_final_open_tests_group] = { CNTSPROB_final_open_tests_group, '?', XSIZE(struct section_problem_data, final_open_tests_group), NULL, XOFFSET(struct section_problem_data, final_open_tests_group) },
[CNTSPROB_token_open_tests] = { CNTSPROB_token_open_tests, 's', XSIZE(struct section_problem_data, token_open_tests), "token_open_tests", XOFFSET(struct section_problem_data, token_open_tests) },
[CNTSPROB_token_open_tests_count] = { CNTSPROB_token_open_tests_count, 'i', XSIZE(struct section_problem_data, token_open_tests_count), NULL, XOFFSET(struct section_problem_data, token_open_tests_count) },
[CNTSPROB_token_open_tests_val] = { CNTSPROB_token_open_tests_val, '?', XSIZE(struct section_problem_data, token_open_tests_val), NULL, XOFFSET(struct section_problem_data, token_open_tests_val) },
[CNTSPROB_token_open_tests_group] = { CNTSPROB_token_open_tests_group, '?', XSIZE(struct section_problem_data, token_open_tests_group), NULL, XOFFSET(struct section_problem_data, token_open_tests_group) },
[CNTSPROB_max_vm_size] = { CNTSPROB_max_vm_size, 'E', XSIZE(struct section_problem_data, max_vm_size), "max_vm_size", XOFFSET(struct section_problem_data, max_vm_size) },
[CNTSPROB_max_data_size] = { CNTSPROB_max_data_size, 'E', XSIZE(struct section_problem_data, max_data_size), "max_data_size", XOFFSET(struct section_problem_data, max_data_size) },
[CNTSPROB_max_stack_size] = { CNTSPROB_max_stack_size, 'E', XSIZE(struct section_problem_data, max_stack_size), "max_stack_size", XOFFSET(struct section_problem_data, max_stack_size) },
Expand Down Expand Up @@ -1652,6 +1656,9 @@ void cntsprob_copy(struct section_problem_data *dst, const struct section_proble
if (src->extra_src_dir) {
dst->extra_src_dir = strdup(src->extra_src_dir);
}
if (src->standard_valuer) {
dst->standard_valuer = strdup(src->standard_valuer);
}
if (src->test_pat) {
dst->test_pat = strdup(src->test_pat);
}
Expand Down Expand Up @@ -1761,16 +1768,19 @@ void cntsprob_copy(struct section_problem_data *dst, const struct section_proble
}
// private open_tests_count
// private open_tests_val
// private open_tests_group
if (src->final_open_tests) {
dst->final_open_tests = strdup(src->final_open_tests);
}
// private final_open_tests_count
// private final_open_tests_val
// private final_open_tests_group
if (src->token_open_tests) {
dst->token_open_tests = strdup(src->token_open_tests);
}
// private token_open_tests_count
// private token_open_tests_val
// private token_open_tests_group
dst->max_vm_size = src->max_vm_size;
dst->max_data_size = src->max_data_size;
dst->max_stack_size = src->max_stack_size;
Expand Down Expand Up @@ -1840,6 +1850,7 @@ void cntsprob_free(struct section_problem_data *ptr)
free(ptr->custom_compile_cmd);
free(ptr->custom_lang_name);
free(ptr->extra_src_dir);
free(ptr->standard_valuer);
free(ptr->test_pat);
free(ptr->corr_pat);
free(ptr->info_pat);
Expand Down Expand Up @@ -1905,12 +1916,15 @@ void cntsprob_free(struct section_problem_data *ptr)
free(ptr->open_tests);
// private open_tests_count
// private open_tests_val
// private open_tests_group
free(ptr->final_open_tests);
// private final_open_tests_count
// private final_open_tests_val
// private final_open_tests_group
free(ptr->token_open_tests);
// private token_open_tests_count
// private token_open_tests_val
// private token_open_tests_group
free(ptr->extid);
free(ptr->unhandled_vars);
sarray_free((char**) ptr->score_view);
Expand Down
5 changes: 5 additions & 0 deletions gen/problem_config_meta.c
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,7 @@ static struct meta_info_item meta_info_problem_config_section_data[] =
[META_PROBLEM_CONFIG_SECTION_container_options] = { META_PROBLEM_CONFIG_SECTION_container_options, 's', XSIZE(struct problem_config_section, container_options), "container_options", XOFFSET(struct problem_config_section, container_options) },
[META_PROBLEM_CONFIG_SECTION_iframe_statement] = { META_PROBLEM_CONFIG_SECTION_iframe_statement, 's', XSIZE(struct problem_config_section, iframe_statement), "iframe_statement", XOFFSET(struct problem_config_section, iframe_statement) },
[META_PROBLEM_CONFIG_SECTION_extra_src_dir] = { META_PROBLEM_CONFIG_SECTION_extra_src_dir, 's', XSIZE(struct problem_config_section, extra_src_dir), "extra_src_dir", XOFFSET(struct problem_config_section, extra_src_dir) },
[META_PROBLEM_CONFIG_SECTION_standard_valuer] = { META_PROBLEM_CONFIG_SECTION_standard_valuer, 's', XSIZE(struct problem_config_section, standard_valuer), "standard_valuer", XOFFSET(struct problem_config_section, standard_valuer) },
[META_PROBLEM_CONFIG_SECTION_test_sets] = { META_PROBLEM_CONFIG_SECTION_test_sets, 'x', XSIZE(struct problem_config_section, test_sets), "test_sets", XOFFSET(struct problem_config_section, test_sets) },
[META_PROBLEM_CONFIG_SECTION_date_penalty] = { META_PROBLEM_CONFIG_SECTION_date_penalty, 'x', XSIZE(struct problem_config_section, date_penalty), "date_penalty", XOFFSET(struct problem_config_section, date_penalty) },
[META_PROBLEM_CONFIG_SECTION_group_start_date] = { META_PROBLEM_CONFIG_SECTION_group_start_date, 'x', XSIZE(struct problem_config_section, group_start_date), "group_start_date", XOFFSET(struct problem_config_section, group_start_date) },
Expand Down Expand Up @@ -528,6 +529,9 @@ void meta_problem_config_section_copy(struct problem_config_section *dst, const
if (src->extra_src_dir) {
dst->extra_src_dir = strdup(src->extra_src_dir);
}
if (src->standard_valuer) {
dst->standard_valuer = strdup(src->standard_valuer);
}
dst->test_sets = (typeof(dst->test_sets)) sarray_copy((char**) src->test_sets);
dst->date_penalty = (typeof(dst->date_penalty)) sarray_copy((char**) src->date_penalty);
dst->group_start_date = (typeof(dst->group_start_date)) sarray_copy((char**) src->group_start_date);
Expand Down Expand Up @@ -616,6 +620,7 @@ void meta_problem_config_section_free(struct problem_config_section *ptr)
free(ptr->container_options);
free(ptr->iframe_statement);
free(ptr->extra_src_dir);
free(ptr->standard_valuer);
sarray_free((char**) ptr->test_sets);
sarray_free((char**) ptr->date_penalty);
sarray_free((char**) ptr->group_start_date);
Expand Down
Loading

0 comments on commit e2c564d

Please sign in to comment.