MCPcopy Create free account
hub / github.com/LanceLRQ/deer-executor / RunJudge

Method RunJudge

executor/dispatch.go:121–207  ·  view source on GitHub ↗

RunJudge 执行评测

()

Source from the content-addressed store, hash-verified

119
120// RunJudge 执行评测
121func (session *JudgeSession) RunJudge() commonStructs.JudgeResult {
122 session.Logger.Info("Start Judgement")
123
124 // make judge result
125 judgeResult := commonStructs.JudgeResult{}
126 judgeResult.SessionID = session.SessionID
127
128 // compile code
129 err := session.compileTargetProgram(&judgeResult)
130 if err != nil {
131 judgeResult.JudgeLogs = session.Logger.GetLogs()
132 return judgeResult
133 }
134
135 if session.JudgeConfig.SpecialJudge.Mode > 0 {
136 // 如果需要特殊评测,则编译相关代码
137 err := session.compileJudgerProgram(&judgeResult)
138 if err != nil {
139 judgeResult.JudgeResult = constants.JudgeFlagSE
140 judgeResult.SeInfo = err.Error()
141 judgeResult.JudgeLogs = session.Logger.GetLogs()
142 return judgeResult
143 }
144 }
145
146 // 资源限制信息更新
147 updateLimitation(session)
148
149 session.Logger.Info("Ready for judgement")
150 // Init exit code
151 exitCodes := make([]int, 0, 1)
152 for i := 0; i < len(session.JudgeConfig.TestCases); i++ {
153 if session.JudgeConfig.TestCases[i].Handle == "" {
154 session.JudgeConfig.TestCases[i].Handle = strconv.Itoa(i)
155 }
156 id := session.JudgeConfig.TestCases[i].Handle
157
158 tcResult := session.runOneCase(&session.JudgeConfig, session.JudgeConfig.TestCases[i], id)
159
160 flagName, ok := constants.FlagMeansMap[tcResult.JudgeResult]
161 if !ok {
162 flagName = "Unknown"
163 }
164 session.Logger.Infof("This case's result is " + flagName)
165
166 isFault := session.isDisastrousFault(&judgeResult, tcResult)
167 judgeResult.TestCases = append(judgeResult.TestCases, *tcResult)
168 judgeResult.MemoryUsed = Max32(tcResult.MemoryUsed, judgeResult.MemoryUsed)
169 judgeResult.TimeUsed = Max32(tcResult.TimeUsed, judgeResult.TimeUsed)
170 // 这里使用动态增加的方式是为了保证len(exitCodes)<=len(testCases)
171 // 方便计算最终结果的时候判定测试数据是否全部跑完
172 exitCodes = append(exitCodes, tcResult.JudgeResult)
173
174 // 如果发生灾难性错误,直接退出
175 if isFault {
176 break
177 }
178

Callers 2

runOnceJudgeFunction · 0.80
runJudgeFunction · 0.80

Calls 12

compileTargetProgramMethod · 0.95
compileJudgerProgramMethod · 0.95
runOneCaseMethod · 0.95
isDisastrousFaultMethod · 0.95
generateFinallyResultMethod · 0.95
updateLimitationFunction · 0.85
Max32Function · 0.85
InfoMethod · 0.80
GetLogsMethod · 0.80
InfofMethod · 0.80
WarnfMethod · 0.80
ErrorMethod · 0.45

Tested by

no test coverage detected