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

Method DiffText

executor/checker.go:199–281  ·  view source on GitHub ↗

DiffText Compare the text 进行文本比较

(result *commonStructs.TestCaseResult)

Source from the content-addressed store, hash-verified

197// DiffText Compare the text
198// 进行文本比较
199func (session *JudgeSession) DiffText(result *commonStructs.TestCaseResult) error {
200 answerInfo, err := os.Stat(path.Join(session.ConfigDir, result.Output))
201 if err != nil {
202 result.JudgeResult = constants.JudgeFlagSE
203 result.TextDiffLog = fmt.Sprintf("Get answer file info failed: %s", err.Error())
204 return err
205 }
206 useroutInfo, err := os.Stat(path.Join(session.SessionDir, result.ProgramOut))
207 if err != nil {
208 result.JudgeResult = constants.JudgeFlagSE
209 result.TextDiffLog = fmt.Sprintf("Get userout file info failed: %s", err.Error())
210 return err
211 }
212
213 useroutLen := useroutInfo.Size()
214 answerLen := answerInfo.Size()
215
216 sizeText := fmt.Sprintf("tcLen=%d, ansLen=%d", answerLen, useroutLen)
217
218 var useroutBuffer, answerBuffer []byte
219 errText := ""
220
221 answerBuffer, errText, err = readFileWithTry(path.Join(session.ConfigDir, result.Output), "answer", 3)
222 if err != nil {
223 result.JudgeResult = constants.JudgeFlagSE
224 result.TextDiffLog = errText
225 return err
226 }
227
228 useroutBuffer, errText, err = readFileWithTry(path.Join(session.SessionDir, result.ProgramOut), "userout", 3)
229 if err != nil {
230 result.JudgeResult = constants.JudgeFlagSE
231 result.TextDiffLog = errText
232 return err
233 }
234
235 if useroutLen == 0 && answerLen == 0 {
236 // Empty File AC
237 result.JudgeResult = constants.JudgeFlagAC
238 result.TextDiffLog = sizeText + "; Accepted with zero size."
239 return nil
240 } else if useroutLen > 0 && answerLen > 0 {
241 if (useroutLen > int64(session.JudgeConfig.FileSizeLimit)) || (useroutLen >= answerLen*2) {
242 // OLE
243 result.JudgeResult = constants.JudgeFlagOLE
244 if useroutLen > int64(session.JudgeConfig.FileSizeLimit) {
245 result.TextDiffLog = sizeText + "; WA: larger then limitation."
246 return nil
247 }
248 result.TextDiffLog = sizeText + "; WA: larger then 2 times."
249 return nil
250 }
251 } else {
252 // WTF?
253 result.JudgeResult = constants.JudgeFlagWA
254 result.TextDiffLog = sizeText + "; WA: less then zero size."
255 return nil
256 }

Callers 1

JudgeOnceMethod · 0.95

Calls 5

readFileWithTryFunction · 0.85
charDiffIoUtilFunction · 0.85
strictDiffFunction · 0.85
lineDiffFunction · 0.85
ErrorMethod · 0.45

Tested by

no test coverage detected