DiffText Compare the text 进行文本比较
(result *commonStructs.TestCaseResult)
| 197 | // DiffText Compare the text |
| 198 | // 进行文本比较 |
| 199 | func (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 | } |
no test coverage detected