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: 8 inserted, 6 deleted

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