Description:
[grader] fixed the case when result file is ill-formatted git-svn-id: http://theory.cpe.ku.ac.th/grader/judge/trunk/scripts@130 6386c4cd-e34a-4fa8-8920-d93eb39b512e
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r34:4907486f53b2 - - 2 files changed: 10 inserted, 0 deleted

@@ -27,51 +27,55
27 f.close
27 f.close
28 end
28 end
29
29
30 def clean_up(submission)
30 def clean_up(submission)
31 end
31 end
32 end
32 end
33
33
34 class SubmissionReporter
34 class SubmissionReporter
35 def initialize
35 def initialize
36 @config = Grader::Configuration.get_instance
36 @config = Grader::Configuration.get_instance
37 end
37 end
38
38
39 def report(sub,test_result_dir)
39 def report(sub,test_result_dir)
40 save_result(sub,read_result(test_result_dir))
40 save_result(sub,read_result(test_result_dir))
41 end
41 end
42
42
43 def report_error(sub,msg)
43 def report_error(sub,msg)
44 save_result(sub,{:points => 0,
44 save_result(sub,{:points => 0,
45 :comment => "Grading error: #{msg}" })
45 :comment => "Grading error: #{msg}" })
46 end
46 end
47
47
48 protected
48 protected
49 def read_result(test_result_dir)
49 def read_result(test_result_dir)
50 cmp_msg_fname = "#{test_result_dir}/compiler_message"
50 cmp_msg_fname = "#{test_result_dir}/compiler_message"
51 + if FileTest.exist?(cmp_msg_fname)
51 cmp_file = File.open(cmp_msg_fname)
52 cmp_file = File.open(cmp_msg_fname)
52 cmp_msg = cmp_file.read
53 cmp_msg = cmp_file.read
53 cmp_file.close
54 cmp_file.close
55 + else
56 + cmp_msg = ""
57 + end
54
58
55 result_fname = "#{test_result_dir}/result"
59 result_fname = "#{test_result_dir}/result"
56 comment_fname = "#{test_result_dir}/comment"
60 comment_fname = "#{test_result_dir}/comment"
57 if FileTest.exist?(result_fname)
61 if FileTest.exist?(result_fname)
58 comment = ""
62 comment = ""
59 begin
63 begin
60 result_file = File.open(result_fname)
64 result_file = File.open(result_fname)
61 result = result_file.readline.to_i
65 result = result_file.readline.to_i
62 result_file.close
66 result_file.close
63 rescue
67 rescue
64 result = 0
68 result = 0
65 comment = "error reading result file."
69 comment = "error reading result file."
66 end
70 end
67
71
68 begin
72 begin
69 comment_file = File.open(comment_fname)
73 comment_file = File.open(comment_fname)
70 comment += comment_file.readline.chomp
74 comment += comment_file.readline.chomp
71 comment_file.close
75 comment_file.close
72 rescue
76 rescue
73 comment += ""
77 comment += ""
74 end
78 end
75
79
76 return {:points => result,
80 return {:points => result,
77 :comment => comment,
81 :comment => comment,
@@ -35,51 +35,57
35 problem = Problem.get_instance
35 problem = Problem.get_instance
36
36
37 if problem.well_formed? == false
37 if problem.well_formed? == false
38 log "The problem specification is not well formed."
38 log "The problem specification is not well formed."
39 exit(127)
39 exit(127)
40 end
40 end
41
41
42 all_score = 0
42 all_score = 0
43 all_comment = ''
43 all_comment = ''
44 (1..(problem.runs.length-1)).each do |k|
44 (1..(problem.runs.length-1)).each do |k|
45 log "grade run #{k}"
45 log "grade run #{k}"
46 run = problem.runs[k]
46 run = problem.runs[k]
47 run_score = 0
47 run_score = 0
48 run_comment = ''
48 run_comment = ''
49 run_comment_short = ''
49 run_comment_short = ''
50 run.tests.each do |test_num|
50 run.tests.each do |test_num|
51 result_file_name = "#{test_num}/result"
51 result_file_name = "#{test_num}/result"
52 if not File.exists?(result_file_name)
52 if not File.exists?(result_file_name)
53 run_comment += "result file for test #{test_num} not found\n"
53 run_comment += "result file for test #{test_num} not found\n"
54 run_comment_short += RUN_ERROR_MARK
54 run_comment_short += RUN_ERROR_MARK
55 log "Cannot find the file #{test_num}/result!"
55 log "Cannot find the file #{test_num}/result!"
56 else
56 else
57 result_file = File.new(result_file_name, "r")
57 result_file = File.new(result_file_name, "r")
58 result_file_lines = result_file.readlines
58 result_file_lines = result_file.readlines
59 + if result_file_lines.length>=2
59 run_score = run_score + result_file_lines[1].to_i
60 run_score = run_score + result_file_lines[1].to_i
60 run_comment += result_file_lines[0]
61 run_comment += result_file_lines[0]
61 run_comment_short += char_comment(result_file_lines[0])
62 run_comment_short += char_comment(result_file_lines[0])
63 + else
64 + run_comment += "result file for test #{test_num} error\n"
65 + run_comment_short += RUN_ERROR_MARK
66 + log "Error in #{test_num}/result!"
67 + end
62 result_file.close
68 result_file.close
63 end
69 end
64 end
70 end
65
71
66 # find total score for this run
72 # find total score for this run
67 run_total_score = 0
73 run_total_score = 0
68 problem = Problem.get_instance
74 problem = Problem.get_instance
69 run.tests.each { |test_num| run_total_score += problem.get_score(test_num) }
75 run.tests.each { |test_num| run_total_score += problem.get_score(test_num) }
70
76
71 if run_total_score!=run_score # fail in some test cases, fail the run
77 if run_total_score!=run_score # fail in some test cases, fail the run
72 run_score = 0
78 run_score = 0
73 end
79 end
74
80
75 run_result_file = File.new("result-#{k}", "w")
81 run_result_file = File.new("result-#{k}", "w")
76 run_result_file.write run_score
82 run_result_file.write run_score
77 run_result_file.write "\n"
83 run_result_file.write "\n"
78 run_result_file.close
84 run_result_file.close
79
85
80 run_comment_file = File.new("comment-#{k}", "w")
86 run_comment_file = File.new("comment-#{k}", "w")
81 run_comment_file.write "#{run_comment}\n"
87 run_comment_file.write "#{run_comment}\n"
82 run_comment_file.close
88 run_comment_file.close
83
89
84 all_score = all_score + run_score
90 all_score = all_score + run_score
85
91
You need to be logged in to leave comments. Login now