54 lines
1.1 KiB
Ruby
54 lines
1.1 KiB
Ruby
# encoding: utf-8
|
|
class StudentWorkTest < ActiveRecord::Base
|
|
attr_accessible :student_work_id, :results, :status, :src, :uwait_time
|
|
belongs_to :student_work
|
|
|
|
serialize :results, Array
|
|
|
|
def status_to_s
|
|
case self.status.to_i
|
|
when -1
|
|
'编译出错'
|
|
when -2
|
|
'答题错误'
|
|
when -3
|
|
'答案错误'
|
|
when 1
|
|
'运行出错'
|
|
when 2
|
|
'超时'
|
|
when 3
|
|
'内存超出'
|
|
when 4
|
|
'输出超出'
|
|
when 5
|
|
'禁用函数'
|
|
when 6
|
|
'其他错误'
|
|
when 0
|
|
'成功'
|
|
else
|
|
'未知错误'
|
|
end
|
|
end
|
|
|
|
#必须和测试集个数一样才能得100分
|
|
def test_score(testcount)
|
|
if self.status.to_i == 0 && testcount == self.results.count
|
|
100
|
|
elsif self.results.empty?
|
|
0
|
|
else
|
|
get_success_count * 100 / testcount
|
|
end
|
|
end
|
|
|
|
private
|
|
def get_success_count
|
|
self.results.inject(0) do |sum, result|
|
|
sum += (result["status"] && result["status"].class == ::Fixnum && result["status"].to_i == 0 ? 1 : 0)
|
|
end || 0
|
|
end
|
|
|
|
end
|