Description:
added quick hack on running scripts, and compiler calls
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r111:06c23d391544 - - 4 files changed: 13 inserted, 11 deleted

@@ -108,25 +108,25
108 108 if @config.talkative
109 109 puts str
110 110 end
111 111 end
112 112
113 113 def call_judge(problem_home,language,grading_dir,fname)
114 114 ENV['PROBLEM_HOME'] = problem_home
115 115
116 116 talk grading_dir
117 117 Dir.chdir grading_dir
118 118 cmd = "#{problem_home}/script/judge #{language} #{fname}"
119 119 talk "CMD: #{cmd}"
120 - system(cmd)
120 + system("ruby " + cmd)
121 121 end
122 122
123 123 def get_std_script_dir
124 124 GRADER_ROOT + '/std-script'
125 125 end
126 126
127 127 def copy_script(problem_home)
128 128 script_dir = "#{problem_home}/script"
129 129 std_script_dir = get_std_script_dir
130 130
131 131 raise "std-script directory not found" if !FileTest.exist?(std_script_dir)
132 132
@@ -14,27 +14,27
14 14 def talk(msg)
15 15 if ENV['TALKATIVE']!=nil
16 16 puts str
17 17 end
18 18 if ENV['GRADER_LOGGING']!=nil
19 19 log_fname = ENV['GRADER_LOGGING']
20 20 fp = File.open(log_fname,"a")
21 21 fp.puts("run: #{Time.new.strftime("%H:%M")} #{str}")
22 22 fp.close
23 23 end
24 24 end
25 25
26 - C_COMPILER = "/usr/bin/gcc"
27 - CPLUSPLUS_COMPILER = "/usr/bin/g++"
28 - PASCAL_COMPILER = "/usr/bin/fpc"
26 + C_COMPILER = "gcc"
27 + CPLUSPLUS_COMPILER = "g++"
28 + PASCAL_COMPILER = "fpc"
29 29
30 30 C_OPTIONS = "-O2 -s -static -std=c99 -DCONTEST -lm -Wall"
31 31 CPLUSPLUS_OPTIONS = "-O2 -s -static -DCONTEST -lm -Wall"
32 32 PASCAL_OPTIONS = "-O1 -XS -dCONTEST"
33 33
34 34 # Check for the correct number of arguments. Otherwise, print usage.
35 35 if ARGV.length == 0 or ARGV.length > 4
36 36 puts "Usage: compile <language> [<source-file>] [<output-file>] [<message-file>]"
37 37 puts
38 38 puts "<source-file> is defaulted to \"source\"."
39 39 puts "<output-file> is defaulted to \"a.out\"."
40 40 puts "<message-file> is defaulted to \"compiler_message\"."
@@ -89,27 +89,29
89 89 # Compile
90 90 log
91 91 log "Compiling..."
92 92 call_and_log("Cannot copy the source file to #{sandbox_dir}") {
93 93 FileUtils.cp(source_file, sandbox_dir)
94 94 }
95 95 begin
96 96 Dir.chdir sandbox_dir
97 97 rescue
98 98 log "ERROR: Cannot change directory to #{sandbox_dir}."
99 99 exit(127)
100 100 end
101 - execute("#{problem_home}/script/compile #{language} #{source_file}", "Compilation error!")
102 - compile_message = open("compiler_message").read
103 - compile_message.strip!
101 + execute("ruby #{problem_home}/script/compile #{language} #{source_file}", "Compilation error!")
102 + open("compiler_message") do |f|
103 + compile_message = f.read
104 + compile_message.strip!
105 + end
104 106 call_and_log("Cannot move the compiler message to #{test_result_dir}.") {
105 107 FileUtils.mv("compiler_message", test_result_dir)
106 108 }
107 109 if !FileTest.exist?("a.out")
108 110 log "Cannot compile the source code. See message in #{test_result_dir}/compile_message"
109 111 exit(127)
110 112 else
111 113 call_and_log("Cannot move the compiled program to #{test_result_dir}") {
112 114 FileUtils.mv("a.out",test_result_dir)
113 115 }
114 116 FileUtils.rm_rf("#{sandbox_dir}/.")
115 117 end
@@ -125,25 +127,25
125 127
126 128 # Doing the testing.
127 129 (1..(problem.num_tests)).each do |test_num|
128 130
129 131 $stdout.print "[#{test_num}]"
130 132 $stdout.flush
131 133
132 134 log "Test number: #{test_num}"
133 135 call_and_log("Cannot copy the compiled program into #{sandbox_dir}") {
134 136 FileUtils.cp("#{test_result_dir}/a.out", sandbox_dir)
135 137 }
136 138 begin
137 - execute("#{problem_home}/script/run #{language} #{test_num}", "Error occured during execution of the run script")
139 + execute("ruby #{problem_home}/script/run #{language} #{test_num}", "Error occured during execution of the run script")
138 140 rescue
139 141 # do nothing
140 142 end
141 143 call_and_log("Cannot create directory #{test_result_dir}/#{test_num}") {
142 144 FileUtils.mkdir "#{test_result_dir}/#{test_num}"
143 145 }
144 146 call_and_log("Cannot copy the result file into #{test_result_dir}/#{test_num}") {
145 147 FileUtils.mv "#{sandbox_dir}/result", "#{test_result_dir}/#{test_num}"
146 148 }
147 149 call_and_log("Cannot copy the comment file into #{test_result_dir}/#{test_num}") {
148 150 FileUtils.mv "#{sandbox_dir}/comment", "#{test_result_dir}/#{test_num}"
149 151 }
@@ -157,16 +159,16
157 159
158 160 $stdout.print "[done]\n"
159 161
160 162 # Grade
161 163 log
162 164 log "Grading..."
163 165 begin
164 166 Dir.chdir test_result_dir
165 167 rescue
166 168 log "ERROR: Cannot change directory to #{test_result_dir}."
167 169 exit(127)
168 170 end
169 - execute("#{problem_home}/script/grade", "An error occured during grading!")
171 + execute("ruby #{problem_home}/script/grade", "An error occured during grading!")
170 172
171 173 log
172 174 log "All done!"
@@ -64,25 +64,25
64 64
65 65 input_file_name = "#{problem_home}/test_cases/#{test_num}/input-#{test_num}.txt"
66 66
67 67 #####################################
68 68
69 69 time_limit = problem.get_time_limit test_num
70 70 mem_limit = problem.get_mem_limit(test_num) * 1024
71 71
72 72 # Copy the input file.
73 73 #`cp #{problem_home}/test_cases/#{test_num}/#{input_file_name} .`
74 74
75 75 # check if box is there, if not, compile it!
76 - if !File.exists?("#{problem_home}/script/box")
76 + if !File.exists?("#{problem_home}/script/box") and !File.exists?("#{problem_home}/script/box.exe")
77 77 log "WARNING: Compiling box: to increase efficiency, it should be compile manually"
78 78 compile_box("#{problem_home}/script/box.cc",
79 79 "#{problem_home}/script/box")
80 80 end
81 81
82 82 # Hide PROBLEM_HOME
83 83 ENV['PROBLEM_HOME'] = nil
84 84
85 85 # Run the program.
86 86 #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}"
87 87 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"
88 88 log "Running test #{test_num}..."
@@ -136,22 +136,22
136 136 end
137 137
138 138 if running_time[:user].to_f + running_time[:sys].to_f > time_limit
139 139 log "Time limit exceeded."
140 140 report.call("Time limit exceeded", 0, "No comment.\n")
141 141 end
142 142
143 143 # Run 'check' to evaluate the output.
144 144 #puts "There was no runtime error. Proceed to checking the output."
145 145 check_command = "#{problem_home}/script/check #{language} #{test_num}"
146 146 log "Checking the output..."
147 147 log check_command
148 - if not system(check_command)
148 + if not system("ruby " + check_command)
149 149 log "Problem with check script"
150 150 report.call("Incorrect",0,"Check script error.\n")
151 151 exit(127)
152 152 end
153 153
154 154 check_file = File.new("check_result", "r")
155 155 check_file_lines = check_file.readlines
156 156
157 157 report.call(check_file_lines[0], check_file_lines[1], "No comment.\n")
You need to be logged in to leave comments. Login now