at_coder_friends 0.5.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +5 -2
- data/.rubocop.yml +1 -0
- data/.rubocop_todo.yml +4 -1
- data/Gemfile.lock +16 -14
- data/Rakefile +2 -0
- data/at_coder_friends.gemspec +1 -0
- data/lib/at_coder_friends.rb +13 -5
- data/lib/at_coder_friends/cli.rb +1 -2
- data/lib/at_coder_friends/config_loader.rb +2 -2
- data/lib/at_coder_friends/context.rb +3 -3
- data/lib/at_coder_friends/cxx_generator.rb +7 -13
- data/lib/at_coder_friends/emitter.rb +0 -4
- data/lib/at_coder_friends/parser/constraints_parser.rb +26 -0
- data/lib/at_coder_friends/parser/format_parser.rb +154 -0
- data/lib/at_coder_friends/parser/main.rb +16 -0
- data/lib/at_coder_friends/parser/page_parser.rb +119 -0
- data/lib/at_coder_friends/path_util.rb +10 -0
- data/lib/at_coder_friends/problem.rb +11 -14
- data/lib/at_coder_friends/scraping/agent.rb +77 -0
- data/lib/at_coder_friends/scraping/authentication.rb +71 -0
- data/lib/at_coder_friends/scraping/custom_test.rb +53 -0
- data/lib/at_coder_friends/scraping/session.rb +26 -0
- data/lib/at_coder_friends/scraping/submission.rb +31 -0
- data/lib/at_coder_friends/scraping/tasks.rb +39 -0
- data/lib/at_coder_friends/test_runner/base.rb +123 -0
- data/lib/at_coder_friends/test_runner/judge.rb +44 -0
- data/lib/at_coder_friends/test_runner/sample.rb +35 -0
- data/lib/at_coder_friends/verifier.rb +4 -2
- data/lib/at_coder_friends/version.rb +1 -1
- data/tasks/regression.rake +163 -0
- metadata +30 -7
- data/lib/at_coder_friends/format_parser.rb +0 -151
- data/lib/at_coder_friends/judge_test_runner.rb +0 -34
- data/lib/at_coder_friends/sample_test_runner.rb +0 -31
- data/lib/at_coder_friends/scraping_agent.rb +0 -265
- data/lib/at_coder_friends/test_runner.rb +0 -104
@@ -1,104 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'rbconfig'
|
4
|
-
|
5
|
-
module AtCoderFriends
|
6
|
-
# run tests for the specified program.
|
7
|
-
class TestRunner
|
8
|
-
include PathUtil
|
9
|
-
|
10
|
-
attr_reader :ctx
|
11
|
-
|
12
|
-
def initialize(ctx)
|
13
|
-
@ctx = ctx
|
14
|
-
@path, @dir, @prg, @base, @ext, @q = split_prg_path(ctx.path)
|
15
|
-
end
|
16
|
-
|
17
|
-
def config
|
18
|
-
ctx.config
|
19
|
-
end
|
20
|
-
|
21
|
-
# rubocop:disable Metrics/MethodLength
|
22
|
-
def run_test(id, infile, outfile, expfile)
|
23
|
-
return false unless File.exist?(infile) && File.exist?(expfile)
|
24
|
-
|
25
|
-
puts "==== #{id} (#{test_loc}) ===="
|
26
|
-
|
27
|
-
success = send(test_mtd, infile, outfile)
|
28
|
-
input, result, expected =
|
29
|
-
[infile, outfile, expfile].map { |file| File.read(file) }
|
30
|
-
|
31
|
-
puts '-- input --'
|
32
|
-
print input
|
33
|
-
puts '-- expected --'
|
34
|
-
print expected
|
35
|
-
puts '-- result --'
|
36
|
-
print result
|
37
|
-
if !success
|
38
|
-
puts '!!!!! RE !!!!!'
|
39
|
-
elsif result != expected
|
40
|
-
puts '!!!!! WA !!!!!'
|
41
|
-
else
|
42
|
-
puts '<< OK >>'
|
43
|
-
end
|
44
|
-
true
|
45
|
-
end
|
46
|
-
# rubocop:enable Metrics/MethodLength
|
47
|
-
|
48
|
-
def test_loc
|
49
|
-
test_cmd ? 'local' : 'remote'
|
50
|
-
end
|
51
|
-
|
52
|
-
def test_mtd
|
53
|
-
test_cmd ? :local_test : :remote_test
|
54
|
-
end
|
55
|
-
|
56
|
-
def local_test(infile, outfile)
|
57
|
-
system("#{test_cmd} < #{infile} > #{outfile}")
|
58
|
-
end
|
59
|
-
|
60
|
-
def remote_test(infile, outfile)
|
61
|
-
res = ctx.scraping_agent.code_test(infile)
|
62
|
-
unless res && res['Result']
|
63
|
-
File.write(outfile, 'Remote test failed.')
|
64
|
-
return false
|
65
|
-
end
|
66
|
-
puts "Exit code: #{res.dig('Result', 'ExitCode')}"
|
67
|
-
puts "Time: #{res.dig('Result', 'TimeConsumption')}ms"
|
68
|
-
puts "Memory: #{res.dig('Result', 'MemoryConsumption')}KB"
|
69
|
-
if res.dig('Result', 'ExitCode') != 0
|
70
|
-
File.write(outfile, res['Stderr'])
|
71
|
-
return false
|
72
|
-
end
|
73
|
-
File.write(outfile, res['Stdout'])
|
74
|
-
true
|
75
|
-
end
|
76
|
-
|
77
|
-
def test_cmd
|
78
|
-
@test_cmd ||= begin
|
79
|
-
cmds = config.dig('ext_settings', @ext, 'test_cmd')
|
80
|
-
cmd = cmds && (cmds[which_os.to_s] || cmds['default'])
|
81
|
-
return nil unless cmd
|
82
|
-
|
83
|
-
cmd.gsub('{dir}', @dir).gsub('{base}', @base)
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
def which_os
|
88
|
-
@which_os ||= begin
|
89
|
-
case RbConfig::CONFIG['host_os']
|
90
|
-
when /mswin|msys|mingw|cygwin|bccwin|wince|emc/
|
91
|
-
:windows
|
92
|
-
when /darwin|mac os/
|
93
|
-
:macosx
|
94
|
-
when /linux/
|
95
|
-
:linux
|
96
|
-
when /solaris|bsd/
|
97
|
-
:unix
|
98
|
-
else
|
99
|
-
:unknown
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|