예제 #1
0
        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);
            }
        }
예제 #2
0
        /// <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
            });
        }