Description:
fixed judge craching when some test case is not present git-svn-id: http://theory.cpe.ku.ac.th/grader/judge/trunk/scripts@367 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

r67:b65f81409564 - - 1 file changed: 2 inserted, 0 deleted

@@ -68,105 +68,107
68 getter "mem_limit", "mem_limits", "mem_limit_each"
68 getter "mem_limit", "mem_limits", "mem_limit_each"
69 getter "time_limit", "time_limits", "time_limit_each"
69 getter "time_limit", "time_limits", "time_limit_each"
70
70
71 def run(index, &block)
71 def run(index, &block)
72 new_run = Run.new
72 new_run = Run.new
73 new_run.instance_eval &block
73 new_run.instance_eval &block
74 @runs[index] = new_run
74 @runs[index] = new_run
75 end
75 end
76
76
77 def test(index, &block)
77 def test(index, &block)
78 new_test = Test.new
78 new_test = Test.new
79 new_test.instance_eval &block
79 new_test.instance_eval &block
80 @tests[index] = new_test
80 @tests[index] = new_test
81 end
81 end
82
82
83 def read_test(index)
83 def read_test(index)
84 filename = ENV['PROBLEM_HOME'] + "/test_cases/#{index}/test.cfg"
84 filename = ENV['PROBLEM_HOME'] + "/test_cases/#{index}/test.cfg"
85 if File.exists?(filename)
85 if File.exists?(filename)
86 @tests[index] ||= Test.new
86 @tests[index] ||= Test.new
87 content = File.read(filename)
87 content = File.read(filename)
88 @tests[index].instance_eval content
88 @tests[index].instance_eval content
89 end
89 end
90 end
90 end
91
91
92 def Problem.set_instance(prob)
92 def Problem.set_instance(prob)
93 @instance = prob
93 @instance = prob
94 end
94 end
95
95
96 def Problem.get_instance
96 def Problem.get_instance
97 return @instance
97 return @instance
98 end
98 end
99
99
100 def well_formed?
100 def well_formed?
101 # Check if run 1 to run @runs.length are present.
101 # Check if run 1 to run @runs.length are present.
102 (1..(@runs.length-1)).each do |i|
102 (1..(@runs.length-1)).each do |i|
103 if @runs[i] == nil
103 if @runs[i] == nil
104 puts "run #{i} is not present"
104 puts "run #{i} is not present"
105 return false
105 return false
106 end
106 end
107 end
107 end
108
108
109 # Check if all tests are in one and only one run.
109 # Check if all tests are in one and only one run.
110 test_present = []
110 test_present = []
111 (1..(@num_tests)).each do |i|
111 (1..(@num_tests)).each do |i|
112 test_present[i] = false
112 test_present[i] = false
113 end
113 end
114 (1..(@runs.length-1)).each do |j|
114 (1..(@runs.length-1)).each do |j|
115 run = @runs[j]
115 run = @runs[j]
116 + if run.tests!=nil
116 run.tests.each do |t|
117 run.tests.each do |t|
117 if test_present[t] == false
118 if test_present[t] == false
118 test_present[t] = true
119 test_present[t] = true
119 else
120 else
120 puts "test #{t} is present in more than one run"
121 puts "test #{t} is present in more than one run"
121 return false
122 return false
122 end
123 end
123 end
124 end
124 end
125 end
126 + end
125 (1..(@num_tests)).each do |i|
127 (1..(@num_tests)).each do |i|
126 if test_present[i] == false
128 if test_present[i] == false
127 puts "test #{i} is not present"
129 puts "test #{i} is not present"
128 return false
130 return false
129 end
131 end
130 end
132 end
131
133
132 # Check if we can find the score, mem limit, and time limit for all tests.
134 # Check if we can find the score, mem limit, and time limit for all tests.
133 (1..(@num_tests)).each do |i|
135 (1..(@num_tests)).each do |i|
134 begin
136 begin
135 get_score i
137 get_score i
136 rescue
138 rescue
137 puts "cannot get score for test #{i}"
139 puts "cannot get score for test #{i}"
138 return false
140 return false
139 end
141 end
140
142
141 begin
143 begin
142 get_mem_limit i
144 get_mem_limit i
143 rescue
145 rescue
144 puts "cannot get mem limit for test #{i}"
146 puts "cannot get mem limit for test #{i}"
145 return false
147 return false
146 end
148 end
147
149
148 begin
150 begin
149 get_time_limit i
151 get_time_limit i
150 rescue
152 rescue
151 puts "cannot get time limit for test #{i}"
153 puts "cannot get time limit for test #{i}"
152 return false
154 return false
153 end
155 end
154 end
156 end
155
157
156 return true
158 return true
157 end
159 end
158 end
160 end
159
161
160 class Run < DSLNode
162 class Run < DSLNode
161 scalar_attr :score_each, :time_limit_each, :mem_limit_each
163 scalar_attr :score_each, :time_limit_each, :mem_limit_each
162 array_attr :tests, :scores, :time_limits, :mem_limits
164 array_attr :tests, :scores, :time_limits, :mem_limits
163 end
165 end
164
166
165 class Test < DSLNode
167 class Test < DSLNode
166 scalar_attr :score, :time_limit, :mem_limit
168 scalar_attr :score, :time_limit, :mem_limit
167 end
169 end
168
170
169 def problem(&blk)
171 def problem(&blk)
170 prob = Problem.new
172 prob = Problem.new
171 prob.instance_eval &blk
173 prob.instance_eval &blk
172 Problem.set_instance prob
174 Problem.set_instance prob
You need to be logged in to leave comments. Login now