Description:
change compile to remove package from java change box command for run script
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r167:9db5952d7bb1 - - 2 files changed: 10 inserted, 3 deleted

@@ -15,152 +15,159
15 if ENV['TALKATIVE']!=nil
15 if ENV['TALKATIVE']!=nil
16 puts str
16 puts str
17 end
17 end
18 if ENV['GRADER_LOGGING']!=nil
18 if ENV['GRADER_LOGGING']!=nil
19 log_fname = ENV['GRADER_LOGGING']
19 log_fname = ENV['GRADER_LOGGING']
20 fp = File.open(log_fname,"a")
20 fp = File.open(log_fname,"a")
21 fp.puts("run: #{Time.new.strftime("%H:%M")} #{str}")
21 fp.puts("run: #{Time.new.strftime("%H:%M")} #{str}")
22 fp.close
22 fp.close
23 end
23 end
24 end
24 end
25
25
26 C_COMPILER = "/usr/bin/gcc"
26 C_COMPILER = "/usr/bin/gcc"
27 CPLUSPLUS_COMPILER = "/usr/bin/g++"
27 CPLUSPLUS_COMPILER = "/usr/bin/g++"
28 PASCAL_COMPILER = "/usr/bin/fpc"
28 PASCAL_COMPILER = "/usr/bin/fpc"
29 JAVA_COMPILER = "/usr/bin/javac"
29 JAVA_COMPILER = "/usr/bin/javac"
30 RUBY_INTERPRETER = "/usr/bin/ruby"
30 RUBY_INTERPRETER = "/usr/bin/ruby"
31 PYTHON_INTERPRETER = "/usr/bin/python"
31 PYTHON_INTERPRETER = "/usr/bin/python"
32 PYTHON_CHECKER = "/usr/bin/pyflakes"
32 PYTHON_CHECKER = "/usr/bin/pyflakes"
33
33
34 C_OPTIONS = "-O2 -s -static -std=c99 -DCONTEST -lm -Wall"
34 C_OPTIONS = "-O2 -s -static -std=c99 -DCONTEST -lm -Wall"
35 CPLUSPLUS_OPTIONS = "-O2 -s -std=c++11 -static -DCONTEST -lm -Wall"
35 CPLUSPLUS_OPTIONS = "-O2 -s -std=c++11 -static -DCONTEST -lm -Wall"
36 PASCAL_OPTIONS = "-O1 -XS -dCONTEST"
36 PASCAL_OPTIONS = "-O1 -XS -dCONTEST"
37 JAVA_OPTIONS = ""
37 JAVA_OPTIONS = ""
38 PYTHON_OPTIONS = ""
38 PYTHON_OPTIONS = ""
39
39
40 # Check for the correct number of arguments. Otherwise, print usage.
40 # Check for the correct number of arguments. Otherwise, print usage.
41 if ARGV.length == 0 or ARGV.length > 4
41 if ARGV.length == 0 or ARGV.length > 4
42 puts "Usage: compile <language> [<source-file>] [<output-file>] [<message-file>]"
42 puts "Usage: compile <language> [<source-file>] [<output-file>] [<message-file>]"
43 puts
43 puts
44 puts "<source-file> is defaulted to \"source\"."
44 puts "<source-file> is defaulted to \"source\"."
45 puts "<output-file> is defaulted to \"a.out\"."
45 puts "<output-file> is defaulted to \"a.out\"."
46 puts "<message-file> is defaulted to \"compiler_message\"."
46 puts "<message-file> is defaulted to \"compiler_message\"."
47 puts
47 puts
48 exit(127)
48 exit(127)
49 end
49 end
50
50
51 PARAMS = {
51 PARAMS = {
52 :source_file => [1,'source'],
52 :source_file => [1,'source'],
53 :output_file => [2,'a.out'],
53 :output_file => [2,'a.out'],
54 :message_file => [3,'compiler_message']
54 :message_file => [3,'compiler_message']
55 }
55 }
56
56
57 params = {}
57 params = {}
58 params[:prog_lang] = ARGV[0]
58 params[:prog_lang] = ARGV[0]
59 PARAMS.each_key do |param_name|
59 PARAMS.each_key do |param_name|
60 index, default = PARAMS[param_name]
60 index, default = PARAMS[param_name]
61 if ARGV.length > index
61 if ARGV.length > index
62 params[param_name] = ARGV[index]
62 params[param_name] = ARGV[index]
63 else
63 else
64 params[param_name] = default
64 params[param_name] = default
65 end
65 end
66 talk "#{param_name}: #{params[param_name]}"
66 talk "#{param_name}: #{params[param_name]}"
67 end
67 end
68
68
69 # Remove any remaining output files or message files.
69 # Remove any remaining output files or message files.
70 if FileTest.exists? params[:output_file]
70 if FileTest.exists? params[:output_file]
71 FileUtils.rm(params[:output_file])
71 FileUtils.rm(params[:output_file])
72 end
72 end
73 if FileTest.exists? params[:message_file]
73 if FileTest.exists? params[:message_file]
74 FileUtils.rm(params[:message_file])
74 FileUtils.rm(params[:message_file])
75 end
75 end
76
76
77 # Check if the source file exists before attempt compiling.
77 # Check if the source file exists before attempt compiling.
78 if !FileTest.exists? params[:source_file]
78 if !FileTest.exists? params[:source_file]
79 talk("ERROR: The source file does not exist!")
79 talk("ERROR: The source file does not exist!")
80 open(params[:message_file],"w") do |f|
80 open(params[:message_file],"w") do |f|
81 f.puts "ERROR: The source file did not exist."
81 f.puts "ERROR: The source file did not exist."
82 end
82 end
83 exit(127)
83 exit(127)
84 end
84 end
85
85
86 if params[:prog_lang]=='cpp'
86 if params[:prog_lang]=='cpp'
87 params[:prog_lang] = 'c++'
87 params[:prog_lang] = 'c++'
88 end
88 end
89
89
90 # Compile.
90 # Compile.
91 case params[:prog_lang]
91 case params[:prog_lang]
92
92
93 when "c"
93 when "c"
94 command = "#{C_COMPILER} #{params[:source_file]} -o #{params[:output_file]} #{C_OPTIONS} 2> #{params[:message_file]}"
94 command = "#{C_COMPILER} #{params[:source_file]} -o #{params[:output_file]} #{C_OPTIONS} 2> #{params[:message_file]}"
95 system(command)
95 system(command)
96
96
97 when "c++"
97 when "c++"
98 command = "#{CPLUSPLUS_COMPILER} #{params[:source_file]} -o #{params[:output_file]} #{CPLUSPLUS_OPTIONS} 2> #{params[:message_file]}"
98 command = "#{CPLUSPLUS_COMPILER} #{params[:source_file]} -o #{params[:output_file]} #{CPLUSPLUS_OPTIONS} 2> #{params[:message_file]}"
99 system(command)
99 system(command)
100
100
101 when "pas"
101 when "pas"
102 command = "#{PASCAL_COMPILER} #{params[:source_file]} -ooutpas #{PASCAL_OPTIONS} > #{params[:message_file]}"
102 command = "#{PASCAL_COMPILER} #{params[:source_file]} -ooutpas #{PASCAL_OPTIONS} > #{params[:message_file]}"
103 system(command)
103 system(command)
104 FileUtils.mv("output", params[:output_file])
104 FileUtils.mv("output", params[:output_file])
105
105
106 when "java"
106 when "java"
107 #rename the file to the public class name
107 #rename the file to the public class name
108
108
109 #get the class name
109 #get the class name
110 classname = 'DUMMY'
110 classname = 'DUMMY'
111 + source = Array.new
111 File.foreach(params[:source_file]) do |line|
112 File.foreach(params[:source_file]) do |line|
112 md = /\s*public\s*class\s*(\w*)/.match(line)
113 md = /\s*public\s*class\s*(\w*)/.match(line)
113 classname=md[1] if md
114 classname=md[1] if md
115 + source << line unless line =~ /\s*package\s*\w+\s*\;/
114 end
116 end
115 - system("cp #{params[:source_file]} #{classname}.java")
117 + File.open("#{classname}.java","w") do |file|
118 + source.each do |s|
119 + file.puts s
120 + end
121 + end
122 + #system("cp #{params[:source_file]} #{classname}.java")
116 command = "#{JAVA_COMPILER} #{classname}.java 2> #{params[:message_file]}"
123 command = "#{JAVA_COMPILER} #{classname}.java 2> #{params[:message_file]}"
117 system(command)
124 system(command)
118 if File.exists?(classname + ".class")
125 if File.exists?(classname + ".class")
119 File.open(params[:output_file],"w") {|file| file.write("#{classname}")}
126 File.open(params[:output_file],"w") {|file| file.write("#{classname}")}
120 end
127 end
121 if classname == 'DUMMY'
128 if classname == 'DUMMY'
122 File.open(params[:message_file],"w") {|file| file.write("Cannot find any public class in the source code\n")}
129 File.open(params[:message_file],"w") {|file| file.write("Cannot find any public class in the source code\n")}
123 end
130 end
124
131
125 when "ruby"
132 when "ruby"
126 command = "#{RUBY_INTERPRETER} -c #{params[:source_file]} 2> #{params[:message_file]}"
133 command = "#{RUBY_INTERPRETER} -c #{params[:source_file]} 2> #{params[:message_file]}"
127 if system(command)
134 if system(command)
128 File.open(params[:output_file],"w") do |out_file|
135 File.open(params[:output_file],"w") do |out_file|
129 out_file.puts "#!#{RUBY_INTERPRETER}"
136 out_file.puts "#!#{RUBY_INTERPRETER}"
130 File.open(params[:source_file],"r").each do |line|
137 File.open(params[:source_file],"r").each do |line|
131 out_file.print line
138 out_file.print line
132 end
139 end
133 end
140 end
134 File.chmod(0755, params[:output_file])
141 File.chmod(0755, params[:output_file])
135 end
142 end
136
143
137 when "python"
144 when "python"
138 command = "#{PYTHON_CHECKER} #{params[:source_file]} > #{params[:message_file]}"
145 command = "#{PYTHON_CHECKER} #{params[:source_file]} > #{params[:message_file]}"
139 if system(command)
146 if system(command)
140 #compile to python bytecode
147 #compile to python bytecode
141 command = "#{PYTHON_INTERPRETER} -m py_compile #{params[:source_file]}"
148 command = "#{PYTHON_INTERPRETER} -m py_compile #{params[:source_file]}"
142 puts "compile: #{command}"
149 puts "compile: #{command}"
143 system(command)
150 system(command)
144 puts "pwd: " + Dir.pwd
151 puts "pwd: " + Dir.pwd
145 Dir.new('.').each {|file| puts file}
152 Dir.new('.').each {|file| puts file}
146 File.open(params[:output_file],"w") do |out_file|
153 File.open(params[:output_file],"w") do |out_file|
147 out_file.puts "#!#{PYTHON_INTERPRETER} #{params[:source_file]}c"
154 out_file.puts "#!#{PYTHON_INTERPRETER} #{params[:source_file]}c"
148 end
155 end
149 File.chmod(0755, params[:output_file])
156 File.chmod(0755, params[:output_file])
150 FileUtils.cp("#{params[:source_file]}c",params[:output_file])
157 FileUtils.cp("#{params[:source_file]}c",params[:output_file])
151 end
158 end
152
159
153 else
160 else
154 talk("ERROR: Invalid language specified!")
161 talk("ERROR: Invalid language specified!")
155 open(params[:message_file],"w") do |f|
162 open(params[:message_file],"w") do |f|
156 f.puts "ERROR: Invalid language specified!"
163 f.puts "ERROR: Invalid language specified!"
157 end
164 end
158 exit(127)
165 exit(127)
159 end
166 end
160
167
161 # Report success or failure.
168 # Report success or failure.
162 if FileTest.exists? params[:output_file]
169 if FileTest.exists? params[:output_file]
163 talk "Compilation was successful!"
170 talk "Compilation was successful!"
164 else
171 else
165 talk "ERROR: Something was wrong during the compilation!"
172 talk "ERROR: Something was wrong during the compilation!"
166 end
173 end
@@ -1,186 +1,186
1 #!/usr/bin/env ruby
1 #!/usr/bin/env ruby
2
2
3 require 'fileutils'
3 require 'fileutils'
4
4
5 def log(str='')
5 def log(str='')
6 if ENV['TALKATIVE']!=nil
6 if ENV['TALKATIVE']!=nil
7 puts str
7 puts str
8 end
8 end
9 if ENV['GRADER_LOGGING']!=nil
9 if ENV['GRADER_LOGGING']!=nil
10 log_fname = ENV['GRADER_LOGGING']
10 log_fname = ENV['GRADER_LOGGING']
11 fp = File.open(log_fname,"a")
11 fp = File.open(log_fname,"a")
12 fp.puts("run: #{Time.new.strftime("%H:%M")} #{str}")
12 fp.puts("run: #{Time.new.strftime("%H:%M")} #{str}")
13 fp.close
13 fp.close
14 end
14 end
15 end
15 end
16
16
17 def extract_time(t)
17 def extract_time(t)
18 # puts "TIME: #{t}"
18 # puts "TIME: #{t}"
19 if (result=/^(.*)r(.*)u(.*)s/.match(t))
19 if (result=/^(.*)r(.*)u(.*)s/.match(t))
20 {:real => result[1], :user => result[2], :sys => result[3]}
20 {:real => result[1], :user => result[2], :sys => result[3]}
21 else
21 else
22 #{:real => 0, :user => 0, :sys => 0}
22 #{:real => 0, :user => 0, :sys => 0}
23 #puts "ERROR READING RUNNING TIME: #{t}"
23 #puts "ERROR READING RUNNING TIME: #{t}"
24 raise "Error reading running time: #{t}"
24 raise "Error reading running time: #{t}"
25 end
25 end
26 end
26 end
27
27
28 def compile_box(source,bin)
28 def compile_box(source,bin)
29 system("g++ #{source} -o #{bin}")
29 system("g++ #{source} -o #{bin}")
30 end
30 end
31
31
32 if ARGV.length < 2 || ARGV.length > 3
32 if ARGV.length < 2 || ARGV.length > 3
33 puts "Usage: run <language> <test-num> [<program-name>]"
33 puts "Usage: run <language> <test-num> [<program-name>]"
34 exit(127)
34 exit(127)
35 end
35 end
36
36
37 language = ARGV[0]
37 language = ARGV[0]
38 test_num = ARGV[1].to_i
38 test_num = ARGV[1].to_i
39 if ARGV.length > 2
39 if ARGV.length > 2
40 program_name = ARGV[2]
40 program_name = ARGV[2]
41 else
41 else
42 program_name = "a.out"
42 program_name = "a.out"
43 end
43 end
44
44
45 problem_home = ENV['PROBLEM_HOME']
45 problem_home = ENV['PROBLEM_HOME']
46 source_name = ENV['SOURCE_NAME']
46 source_name = ENV['SOURCE_NAME']
47 require "#{problem_home}/script/test_dsl.rb"
47 require "#{problem_home}/script/test_dsl.rb"
48 load "#{problem_home}/test_cases/all_tests.cfg"
48 load "#{problem_home}/test_cases/all_tests.cfg"
49 problem = Problem.get_instance
49 problem = Problem.get_instance
50
50
51 sandbox_dir = Dir.getwd
51 sandbox_dir = Dir.getwd
52
52
53 if problem.well_formed? == false
53 if problem.well_formed? == false
54 log "The problem specification is not well formed."
54 log "The problem specification is not well formed."
55 exit(127)
55 exit(127)
56 end
56 end
57
57
58 # Check if the test number is okay.
58 # Check if the test number is okay.
59 if test_num <= 0 || test_num > problem.num_tests
59 if test_num <= 0 || test_num > problem.num_tests
60 log "You have specified a wrong test number."
60 log "You have specified a wrong test number."
61 exit(127)
61 exit(127)
62 end
62 end
63
63
64 #####################################
64 #####################################
65 # Set the relavant file names here. #
65 # Set the relavant file names here. #
66 #####################################
66 #####################################
67
67
68 input_file_name = "#{problem_home}/test_cases/#{test_num}/input-#{test_num}.txt"
68 input_file_name = "#{problem_home}/test_cases/#{test_num}/input-#{test_num}.txt"
69
69
70 #####################################
70 #####################################
71
71
72 time_limit = problem.get_time_limit test_num
72 time_limit = problem.get_time_limit test_num
73 mem_limit = problem.get_mem_limit(test_num) * 1024
73 mem_limit = problem.get_mem_limit(test_num) * 1024
74
74
75 # Copy the input file.
75 # Copy the input file.
76 #`cp #{problem_home}/test_cases/#{test_num}/#{input_file_name} .`
76 #`cp #{problem_home}/test_cases/#{test_num}/#{input_file_name} .`
77
77
78 # check if box is there, if not, compile it!
78 # check if box is there, if not, compile it!
79 if !File.exists?("#{problem_home}/script/box")
79 if !File.exists?("#{problem_home}/script/box")
80 log "WARNING: Compiling box: to increase efficiency, it should be compile manually"
80 log "WARNING: Compiling box: to increase efficiency, it should be compile manually"
81 compile_box("#{problem_home}/script/box.cc",
81 compile_box("#{problem_home}/script/box.cc",
82 "#{problem_home}/script/box")
82 "#{problem_home}/script/box")
83 end
83 end
84
84
85 # Hide PROBLEM_HOME
85 # Hide PROBLEM_HOME
86 ENV['PROBLEM_HOME'] = nil
86 ENV['PROBLEM_HOME'] = nil
87 ENV['SOURCE_NAME'] = nil
87 ENV['SOURCE_NAME'] = nil
88
88
89 # Run the program.
89 # Run the program.
90 #run_command = "/usr/bin/time -f \"#{time_output_format}\" 2>run_result #{problem_home}/script/box_new -a 2 -f -t #{time_limit} -m #{mem_limit} -i #{input_file_name} -o output.txt #{program_name}"
90 #run_command = "/usr/bin/time -f \"#{time_output_format}\" 2>run_result #{problem_home}/script/box_new -a 2 -f -t #{time_limit} -m #{mem_limit} -i #{input_file_name} -o output.txt #{program_name}"
91 #
91 #
92
92
93 JAVA_OPTION = "-s set_robust_list -s futex -s clone -s getppid -s clone -s wait4 -p /usr/bin/ -p ./"
93 JAVA_OPTION = "-s set_robust_list -s futex -s clone -s getppid -s clone -s wait4 -p /usr/bin/ -p ./"
94 - RUBY_OPTION = "-p /usr/lib64/ -p /lib64/ -p /dev/urandom -p #{sandbox_dir}/#{program_name} -s set_robust_list -s sched_getaffinity -s clock_gettime -s sigaltstack -s pipe2 -s clone -s futex -s openat"
94 + RUBY_OPTION = "-p /usr/lib64/ -p /usr/local/lib/ -p /lib64/ -p /dev/urandom -p #{sandbox_dir}/#{program_name} -p #{sandbox_dir}/ -s set_robust_list -s sched_getaffinity -s clock_gettime -s sigaltstack -s pipe2 -s clone -s futex -s openat -s pipe"
95 - PYTHON_OPTION = "-p /usr/lib64/ -p /lib64/ -p /usr/bin/ -p /usr/local/lib64/ -p /usr/local/lib/ -p #{sandbox_dir}/#{program_name} -p ./#{program_name} -p #{sandbox_dir}/#{source_name} -s set_robust_list -s openat -s recvmsg -s connect -s socket -s sendto -E PYTHONNOUSERSITE=yes"
95 + PYTHON_OPTION = "-p /usr/lib64/ -p /lib64/ -p /usr/bin/ -p /usr/local/lib64/ -p /usr/local/lib/ -p #{sandbox_dir}/#{program_name} -p ./#{program_name} -p #{sandbox_dir}/#{source_name} -s set_robust_list -s openat -s recvmsg -s connect -s socket -s sendto -s futex -E PYTHONNOUSERSITE=yes"
96
96
97 case language
97 case language
98 when "java"
98 when "java"
99 # for java, extract the classname
99 # for java, extract the classname
100 # wne have to add additional systemcall and we don't check the mem limit (dunno how to fix...)
100 # wne have to add additional systemcall and we don't check the mem limit (dunno how to fix...)
101 classname = 'DUMMY'
101 classname = 'DUMMY'
102 File.open(program_name,"r").each do |line|
102 File.open(program_name,"r").each do |line|
103 classname = line
103 classname = line
104 end
104 end
105 #for java, we cannot really check the memory limit...
105 #for java, we cannot really check the memory limit...
106 run_command = "#{problem_home}/script/box -a 3 -f -T -t #{time_limit} #{JAVA_OPTION} -i #{input_file_name} -o output.txt /usr/bin/java #{classname} 2>run_result"
106 run_command = "#{problem_home}/script/box -a 3 -f -T -t #{time_limit} #{JAVA_OPTION} -i #{input_file_name} -o output.txt /usr/bin/java #{classname} 2>run_result"
107 when "ruby"
107 when "ruby"
108 run_command = "#{problem_home}/script/box -a 2 -f -T -t #{time_limit} -m #{mem_limit} #{RUBY_OPTION} -i #{input_file_name} -o output.txt /usr/bin/ruby #{program_name} 2>run_result"
108 run_command = "#{problem_home}/script/box -a 2 -f -T -t #{time_limit} -m #{mem_limit} #{RUBY_OPTION} -i #{input_file_name} -o output.txt /usr/bin/ruby #{program_name} 2>run_result"
109 when "python"
109 when "python"
110 run_command = "#{problem_home}/script/box -a 2 -f -T -t #{time_limit} -m #{mem_limit} #{PYTHON_OPTION} -i #{input_file_name} -o output.txt /usr/bin/python #{program_name} 2>run_result"
110 run_command = "#{problem_home}/script/box -a 2 -f -T -t #{time_limit} -m #{mem_limit} #{PYTHON_OPTION} -i #{input_file_name} -o output.txt /usr/bin/python #{program_name} 2>run_result"
111 else # for c++, pascal, we do the normal checking
111 else # for c++, pascal, we do the normal checking
112 run_command = "#{problem_home}/script/box -a 2 -f -T -t #{time_limit} -m #{mem_limit} -i #{input_file_name} -o output.txt #{program_name} 2>run_result"
112 run_command = "#{problem_home}/script/box -a 2 -f -T -t #{time_limit} -m #{mem_limit} -i #{input_file_name} -o output.txt #{program_name} 2>run_result"
113 end
113 end
114
114
115
115
116 log "Running test #{test_num}..."
116 log "Running test #{test_num}..."
117 log run_command
117 log run_command
118 log
118 log
119 system(run_command)
119 system(run_command)
120
120
121 # Restore PROBLEM_HOME
121 # Restore PROBLEM_HOME
122 ENV['PROBLEM_HOME'] = problem_home
122 ENV['PROBLEM_HOME'] = problem_home
123
123
124 # Create the result file.
124 # Create the result file.
125 result_file = File.new("result", "w")
125 result_file = File.new("result", "w")
126 comment_file = File.new("comment", "w")
126 comment_file = File.new("comment", "w")
127
127
128 # Check if the program actually produced any output.
128 # Check if the program actually produced any output.
129 run_result_file = File.new("run_result", "r")
129 run_result_file = File.new("run_result", "r")
130 run_result = run_result_file.readlines
130 run_result = run_result_file.readlines
131 run_result_file.close
131 run_result_file.close
132
132
133 run_stat = run_result[run_result.length-1]
133 run_stat = run_result[run_result.length-1]
134 running_time = extract_time(run_stat)
134 running_time = extract_time(run_stat)
135
135
136 report = lambda{ |status, points, comment|
136 report = lambda{ |status, points, comment|
137 result_file.write status.strip
137 result_file.write status.strip
138 result_file.write "\n"
138 result_file.write "\n"
139 result_file.write points.to_s.strip
139 result_file.write points.to_s.strip
140 result_file.write "\n"
140 result_file.write "\n"
141 result_file.write run_stat.strip
141 result_file.write run_stat.strip
142 result_file.write "\n"
142 result_file.write "\n"
143 result_file.close
143 result_file.close
144 FileUtils.rm "run_result"
144 FileUtils.rm "run_result"
145 # `rm output.txt` --- keep the output
145 # `rm output.txt` --- keep the output
146
146
147 comment_file.write comment
147 comment_file.write comment
148
148
149 # added for debuggin --- jittat
149 # added for debuggin --- jittat
150 comment_file.write "--run-result--\n"
150 comment_file.write "--run-result--\n"
151 run_result.each do |l|
151 run_result.each do |l|
152 comment_file.write l
152 comment_file.write l
153 end
153 end
154
154
155 comment_file.close
155 comment_file.close
156
156
157 log "Done!"
157 log "Done!"
158 exit(0)
158 exit(0)
159 }
159 }
160
160
161
161
162 if run_result[0][0,2] != "OK"
162 if run_result[0][0,2] != "OK"
163 log "There was a runtime error."
163 log "There was a runtime error."
164 report.call(run_result[0], 0, "No comment.\n")
164 report.call(run_result[0], 0, "No comment.\n")
165 end
165 end
166
166
167 if running_time[:user].to_f > time_limit
167 if running_time[:user].to_f > time_limit
168 log "Time limit exceeded."
168 log "Time limit exceeded."
169 report.call("Time limit exceeded", 0, "No comment.\n")
169 report.call("Time limit exceeded", 0, "No comment.\n")
170 end
170 end
171
171
172 # Run 'check' to evaluate the output.
172 # Run 'check' to evaluate the output.
173 #puts "There was no runtime error. Proceed to checking the output."
173 #puts "There was no runtime error. Proceed to checking the output."
174 check_command = "#{problem_home}/script/check #{language} #{test_num}"
174 check_command = "#{problem_home}/script/check #{language} #{test_num}"
175 log "Checking the output..."
175 log "Checking the output..."
176 log check_command
176 log check_command
177 if not system(check_command)
177 if not system(check_command)
178 log "Problem with check script"
178 log "Problem with check script"
179 report.call("Incorrect",0,"Check script error.\n")
179 report.call("Incorrect",0,"Check script error.\n")
180 exit(127)
180 exit(127)
181 end
181 end
182
182
183 check_file = File.new("check_result", "r")
183 check_file = File.new("check_result", "r")
184 check_file_lines = check_file.readlines
184 check_file_lines = check_file.readlines
185
185
186 report.call(check_file_lines[0], check_file_lines[1], "No comment.\n")
186 report.call(check_file_lines[0], check_file_lines[1], "No comment.\n")
You need to be logged in to leave comments. Login now