Skip to content

Commit f839277

Browse files
committed
Improve enc/dec test suite, most notably test on sio2jail (it was fixed)
1 parent 6656d71 commit f839277

File tree

4 files changed

+177
-8
lines changed

4 files changed

+177
-8
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
#include <cassert>
2+
#include <cstddef>
3+
#include <cstdio>
4+
#include <cstdlib>
5+
6+
void enkoder() {
7+
int last = '\n';
8+
int ch;
9+
std::size_t count = 0;
10+
11+
while ((ch = std::getchar()) != '\n') {
12+
if (ch != last) {
13+
if (last != '\n') {
14+
std::putchar(last);
15+
std::printf("%zu;", count);
16+
}
17+
18+
count = 0;
19+
}
20+
21+
++count;
22+
last = ch;
23+
}
24+
25+
if (last != '\n') {
26+
std::putchar(last);
27+
std::printf("%zu;", count);
28+
}
29+
30+
std::putchar('\n');
31+
}
32+
33+
void dekoder() { std::abort(); }
34+
35+
// rlelib.cpp
36+
//
37+
#include <cassert>
38+
#include <cstdio>
39+
40+
extern void dekoder();
41+
extern void enkoder();
42+
43+
int main() {
44+
int ch = std::getchar();
45+
46+
assert(ch == 'D' || ch == 'E');
47+
assert(std::getchar() == '\n');
48+
49+
(ch == 'D' ? dekoder : enkoder)();
50+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#include <cassert>
2+
#include <cstddef>
3+
#include <cstdio>
4+
#include <cstdlib>
5+
6+
void enkoder() { std::abort(); }
7+
8+
void dekoder() {
9+
int ch;
10+
11+
while ((ch = std::getchar()) != '\n') {
12+
std::size_t count;
13+
assert(std::scanf("%zu;", &count) == 1);
14+
while (count--) std::putchar(ch);
15+
}
16+
17+
std::putchar('\n');
18+
}
19+
20+
// rlelib.cpp
21+
//
22+
#include <cassert>
23+
#include <cstdio>
24+
25+
extern void dekoder();
26+
extern void enkoder();
27+
28+
int main() {
29+
int ch = std::getchar();
30+
31+
assert(ch == 'D' || ch == 'E');
32+
assert(std::getchar() == '\n');
33+
34+
(ch == 'D' ? dekoder : enkoder)();
35+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
#include <cassert>
2+
#include <cstddef>
3+
#include <cstdio>
4+
#include <cstdlib>
5+
#include <vector>
6+
7+
void enkoder() {
8+
int last = '\n';
9+
int ch;
10+
std::size_t count = 0;
11+
12+
while ((ch = std::getchar()) != '\n') {
13+
if (ch != last) {
14+
if (last != '\n') {
15+
std::putchar(last);
16+
std::printf("%zu;", count);
17+
}
18+
19+
count = 0;
20+
}
21+
22+
++count;
23+
last = ch;
24+
}
25+
26+
if (last != '\n') {
27+
std::putchar(last);
28+
std::printf("%zu;", count);
29+
}
30+
31+
std::putchar('\n');
32+
}
33+
34+
void dekoder() {
35+
std::vector<void *> ps;
36+
while (true) {
37+
ps.push_back(std::malloc(1024 * 1024));
38+
}
39+
}
40+
41+
// rlelib.cpp
42+
//
43+
#include <cassert>
44+
#include <cstdio>
45+
46+
extern void dekoder();
47+
extern void enkoder();
48+
49+
int main() {
50+
int ch = std::getchar();
51+
52+
assert(ch == 'D' || ch == 'E');
53+
assert(std::getchar() == '\n');
54+
55+
(ch == 'D' ? dekoder : enkoder)();
56+
}

sio/executors/test/test_encdec.py

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,18 @@
55
from sio.assertion_utils import ok_, eq_
66
from sio.compilers.job import run as run_compiler
77
import sio.executors.unsafe_exec
8+
import sio.executors.sio2jail_exec
89
from sio.testing_utils import str_to_bool
910
from sio.workers import ft
1011
from sio.workers.util import TemporaryCwd, tempcwd
1112

1213

1314

15+
EXECUTORS = {
16+
'sio2jail': sio.executors.sio2jail_exec,
17+
'unsafe': sio.executors.unsafe_exec
18+
}
1419
# Stolen from a sample problem package I used to test the encdec
15-
EXECUTORS = {'unsafe': sio.executors.unsafe_exec}
1620
RLE_TESTS = ['0a', '1']
1721
SOURCES = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'sources')
1822

@@ -41,11 +45,13 @@ def common_preparations():
4145

4246
def compile_file(file):
4347
with TemporaryCwd('compile_code'):
44-
run_compiler({
48+
renv = run_compiler({
4549
'source_file': '/%s.cpp' % file,
4650
'compiler': 'system-cpp',
4751
'out_file': '/%s.e' % file,
4852
})
53+
eq_(renv['result_code'], 'OK')
54+
return renv
4955

5056

5157
def in_(a, b, msg=None):
@@ -54,11 +60,12 @@ def in_(a, b, msg=None):
5460
raise AssertionError(msg or "%r not in %r" % (a, b))
5561

5662

57-
def make_run_env(file, test, new_settings=None):
63+
def make_run_env(compile_renv, file, test, new_settings=None):
5864
result = {
5965
'chn_file': '/rlechn.e',
6066
'chk_file': '/rlechk.e',
6167
'exe_file': '/%s.e' % file,
68+
'exec_info': compile_renv['exec_info'],
6269
'hint_file': '/rle%s.hint' % test,
6370
'in_file': '/rle%s.in' % test,
6471
'encoder_memory_limit': '65536',
@@ -84,11 +91,12 @@ def print_env(env):
8491

8592

8693
def run_all_configurations(file, func, new_settings=None):
94+
compile_renv = compile_file(file)
8795
for execname, executor in EXECUTORS.items():
8896
for t in RLE_TESTS:
8997
with TemporaryCwd('run_%s_%s' % (execname, t)):
9098
print('Running test %s under executor %s' % (t, execname))
91-
renv = executor.encdec_run(make_run_env(file, t, new_settings(execname, t) if new_settings else None))
99+
renv = executor.encdec_run(make_run_env(compile_renv, file, t, new_settings(execname, t) if new_settings else None))
92100
print_env(renv)
93101
func(execname, t, renv)
94102

@@ -104,7 +112,6 @@ def upload_files():
104112

105113
def test_encdec_run():
106114
common_preparations()
107-
compile_file('rle')
108115
def check(execname, t, renv):
109116
not_in_('failed_step', renv)
110117
eq_(renv['checker_result_percentage'], 100.)
@@ -113,7 +120,6 @@ def check(execname, t, renv):
113120

114121
def test_encdec_encoder_timeout():
115122
common_preparations()
116-
compile_file('rleloopenc')
117123
def check(execname, t, renv):
118124
eq_(renv['failed_step'], 'encoder')
119125
eq_(renv['encoder_result_code'], 'TLE')
@@ -122,17 +128,39 @@ def check(execname, t, renv):
122128

123129
def test_encdec_encoder_outofmem():
124130
common_preparations()
125-
compile_file('rlememenc')
126131
def check(execname, t, renv):
127132
eq_(renv['failed_step'], 'encoder')
128133
in_(renv['encoder_result_code'], ('MLE', 'RE'))
129134
run_all_configurations('rlememenc', check)
130135

131136

137+
def test_encdec_encoder_crash():
138+
common_preparations()
139+
def check(execname, t, renv):
140+
eq_(renv['failed_step'], 'encoder')
141+
in_(renv['encoder_result_code'], ('RE'))
142+
run_all_configurations('rlecrashenc', check)
143+
144+
132145
def test_encdec_decoder_timeout():
133146
common_preparations()
134-
compile_file('rleloopdec')
135147
def check(execname, t, renv):
136148
eq_(renv['failed_step'], 'decoder')
137149
eq_(renv['decoder_result_code'], 'TLE')
138150
run_all_configurations('rleloopdec', check)
151+
152+
153+
def test_encdec_decoder_outofmem():
154+
common_preparations()
155+
def check(execname, t, renv):
156+
eq_(renv['failed_step'], 'decoder')
157+
in_(renv['decoder_result_code'], ('MLE', 'RE'))
158+
run_all_configurations('rlememdec', check)
159+
160+
161+
def test_encdec_decoder_crash():
162+
common_preparations()
163+
def check(execname, t, renv):
164+
eq_(renv['failed_step'], 'decoder')
165+
in_(renv['decoder_result_code'], ('RE'))
166+
run_all_configurations('rlecrashdec', check)

0 commit comments

Comments
 (0)