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

Method JudgeOnce

executor/dispatch.go:16–73  ·  view source on GitHub ↗

JudgeOnce 基于JudgeOptions进行评测调度

(judgeResult *commonStructs.TestCaseResult)

Source from the content-addressed store, hash-verified

14
15// JudgeOnce 基于JudgeOptions进行评测调度
16func (session *JudgeSession) JudgeOnce(judgeResult *commonStructs.TestCaseResult) {
17 switch session.JudgeConfig.SpecialJudge.Mode {
18 case constants.SpecialJudgeModeDisabled:
19 pinfo, err := session.runNormalJudge(judgeResult)
20 if err != nil {
21 judgeResult.JudgeResult = constants.JudgeFlagSE
22 judgeResult.SeInfo = err.Error()
23 session.Logger.Error(err.Error())
24 return
25 }
26 session.saveExitRusage(judgeResult, pinfo, false)
27 // 分析目标程序的状态
28 session.analysisExitStatus(judgeResult, pinfo, false)
29 // 只有AC的时候才进行文本比较!
30 if judgeResult.JudgeResult == constants.JudgeFlagAC {
31 session.Logger.Infof("Run text checker.")
32 // 进行文本比较
33 err = session.DiffText(judgeResult)
34 if err != nil {
35 judgeResult.JudgeResult = constants.JudgeFlagSE
36 judgeResult.SeInfo = err.Error()
37 session.Logger.Error(err.Error())
38 return
39 }
40 }
41
42 case constants.SpecialJudgeModeChecker, constants.SpecialJudgeModeInteractive:
43 tinfo, jinfo, err := session.runSpecialJudge(judgeResult)
44 if err != nil {
45 judgeResult.JudgeResult = constants.JudgeFlagSE
46 judgeResult.SeInfo = err.Error()
47 return
48 }
49 session.saveExitRusage(judgeResult, tinfo, false)
50 session.saveExitRusage(judgeResult, jinfo, true)
51 // 分析判题程序的状态
52 session.analysisExitStatus(judgeResult, jinfo, true)
53 // 如果判题程序正常退出,则再去分析目标程序
54 if judgeResult.JudgeResult == 0 {
55 session.analysisExitStatus(judgeResult, tinfo, false)
56 }
57 // 普通checker的时候支持按判题机的意愿进行文本比较
58 if session.JudgeConfig.SpecialJudge.Mode == constants.SpecialJudgeModeChecker {
59 if judgeResult.JudgeResult == constants.JudgeFlagSpecialJudgeRequireChecker {
60 session.Logger.Infof("Run text checker.")
61 // 进行文本比较
62 err = session.DiffText(judgeResult)
63 if err != nil {
64 judgeResult.JudgeResult = constants.JudgeFlagSE
65 judgeResult.SeInfo = err.Error()
66 session.Logger.Error(err.Error())
67 return
68 }
69 }
70 }
71 }
72 return
73}

Callers 1

runOneCaseMethod · 0.95

Calls 7

runNormalJudgeMethod · 0.95
saveExitRusageMethod · 0.95
analysisExitStatusMethod · 0.95
DiffTextMethod · 0.95
runSpecialJudgeMethod · 0.95
InfofMethod · 0.80
ErrorMethod · 0.45

Tested by

no test coverage detected