private void BuildStandardData(DbTestData testData, out string inputData, out DbData outputData, out DbQueryData queryData) { inputData = testData.Input; outputData = null; queryData = null; string stdOperCmd = testData.Operation; string stdQueryCmd = testData.Query; BaseDbOperator stdOperator = CreateJudgeEnv(inputData); try { DbDataReader reader = stdOperator.ExecuteReader(stdOperCmd ?? stdQueryCmd); if (stdOperCmd != null) { outputData = stdOperator.ReadDbData(); } if (stdQueryCmd != null) { queryData = BaseDbOperator.ReadQueryData(reader); } } catch (Exception ex) { throw new JudgeException("Build Db test data failed!" + ex); } finally { ClearJudgeEnv(stdOperator); } }
/// <summary> /// 评测一组用例 /// </summary> /// <param name="stdInput">标准输入</param> /// <param name="stdOutput">标准输出</param> /// <param name="stdQuery">标准查询</param> /// <returns></returns> public SingleJudgeResult Judge(string stdInput, DbData stdOutput, DbQueryData stdQuery) { Stopwatch sw = new Stopwatch(); DbDataReader reader = null; DbQueryData usrQuery = null; DbData usrOutput = null; try { sw.Start(); reader = UserOperator.ExecuteReader(JudgeTask.SourceCode, JudgeTask.TimeLimit); usrQuery = BaseDbOperator.ReadQueryData(reader); usrOutput = UserOperator.ReadDbData(); } catch (Exception ex) { return(new SingleJudgeResult { ResultCode = JudgeResultCode.RuntimeError, JudgeDetail = ex.Message, TimeCost = 0 }); } finally { sw.Stop(); } CompareResult result = CompareAnswer(stdOutput, stdQuery, usrOutput, usrQuery); JudgeResultCode resultCode = (result == CompareResult.Accepted) ? JudgeResultCode.Accepted : JudgeResultCode.WrongAnswer; return(new SingleJudgeResult { ResultCode = resultCode, TimeCost = (int)sw.ElapsedMilliseconds }); }