public void TestGetSkillForGroupId()
        {
            ProblemDataManager dataManager = new ProblemDataManager();

            dataManager.AddProblem("Skill1", "Group1", "Problem1", 0, 0, 0);
            Assert.AreEqual("Skill1", dataManager.GetSkillForGroupId("Group1"));
        }
Example #2
0
        public void TestRandomize(int problemSetSize, int totalProblems, bool isCorrect)
        {
            string s1  = "s1";
            string g1  = "g1";
            string sgp = s1 + g1 + "-";

            SkillsDataManager sdm = new SkillsDataManager();

            sdm.AddSkill(s1, false);

            ProblemDataManager pdm = new ProblemDataManager();

            for (int i = 0; i < totalProblems; i++)
            {
                pdm.AddProblem(s1, g1, sgp + i.ToString(), 0, 0, 0);
            }

            //Hold the completed problems for later comparison
            IList <string> completedList = new List <string>();

            for (int i = 0; i < totalProblems / problemSetSize; i++)
            {
                DefaultAssessmentBuilder dab = new DefaultAssessmentBuilder(pdm, sdm);
                dab.AddProblem(problemSetSize, g1, "randgrp321");
                Assessment     assess = dab.Build();
                IList <string> probs  = assess.GetProblemSequence();
                foreach (string prob in probs)
                {
                    pdm.MarkCompleted(prob, isCorrect);
                    Assert.IsFalse(completedList.Contains(prob), prob + ": Already in List");
                    completedList.Add(prob);
                }
            }
        }
Example #3
0
        /// <summary>
        /// 获取题目数据
        /// </summary>
        /// <param name="pid">题目ID</param>
        /// <param name="dataPath">题目数据路径</param>
        /// <param name="error">错误信息</param>
        /// <returns>获取是否成功</returns>
        public static Boolean TryGetProblemDataPath(String pid, out String dataPath, out String error)
        {
            dataPath = String.Empty;

            try
            {
                error = JudgeStatusManager.GetJudgeServerLoginStatus();

                if (!String.IsNullOrEmpty(error))
                {
                    return(false);
                }

                Int32  problemID = pid.ToInt32(0);
                String path      = ProblemDataManager.GetProblemDataRealPath(problemID);

                if (String.IsNullOrEmpty(path))
                {
                    error = "Problem data does not exist!";
                    return(false);
                }

                dataPath = path;
                return(true);
            }
            catch (System.Exception ex)
            {
                error = ex.Message;
                return(false);
            }
        }
        public void TestAddProblem()
        {
            ProblemDataManager dataManager = new ProblemDataManager();

            dataManager.AddProblem("Skill1", "Group1", "Problem1", 0, 0, 0);
            Assert.AreEqual(1, dataManager.GetProblemCount());
        }
Example #5
0
        public void NullGroupId()
        {
            AssetsDataManager   alm = new AssetsDataManager();
            ProblemDataManager  plm = new ProblemDataManager();
            GroupLinkageManager glm = new GroupLinkageManager(alm, plm);

            Assert.IsNull(glm.getAssets("groupId"));
        }
Example #6
0
        public void BasicCtorTest()
        {
            AssetsDataManager   alm = new AssetsDataManager();
            ProblemDataManager  plm = new ProblemDataManager();
            GroupLinkageManager glm = new GroupLinkageManager(alm, plm);

            Assert.IsNotNull(glm);
        }
Example #7
0
        public void TestCase()
        {
            ProblemDataManager pdm = new ProblemDataManager();
            SkillsDataManager  sdm = new SkillsDataManager();

            DefaultAssessmentBuilder dab = new DefaultAssessmentBuilder(pdm, sdm);

            Assert.IsNotNull(dab);
        }
        /// <summary>
        /// 更新评测状态
        /// </summary>
        /// <param name="sid">提交ID</param>
        /// <param name="pid">题目ID</param>
        /// <param name="username">用户名</param>
        /// <param name="result">评测结果</param>
        /// <param name="detail">出错信息</param>
        /// <param name="tcost">花费时间</param>
        /// <param name="mcost">花费内存</param>
        /// <param name="error">错误信息</param>
        /// <returns>是否更新成功</returns>
        public static Boolean TryUpdateSolutionStatus(String sid, String pid, String username, String result, String detail, String tcost, String mcost, out String error)
        {
            try
            {
                error = JudgeStatusManager.GetJudgeServerLoginStatus();

                if (!String.IsNullOrEmpty(error))
                {
                    return(false);
                }

                SolutionEntity entity = new SolutionEntity()
                {
                    SolutionID = Int32.Parse(sid),
                    ProblemID  = pid.ToInt32(0),
                    UserName   = username,
                    Result     = (ResultType)result.ToByte(0),
                    TimeCost   = tcost.ToInt32(0),
                    MemoryCost = mcost.ToInt32(0)
                };

                if (entity.Result > ResultType.Accepted)//评测失败
                {
                    Boolean hasProblemData = !String.IsNullOrEmpty(ProblemDataManager.GetProblemDataRealPath(entity.ProblemID));

                    //没有题目的不重新评测
                    Boolean canAutoRejudge = hasProblemData;

                    Int32 triedTimes = 0;
                    if (!_rejudgeTimesMap.TryGetValue(entity.SolutionID, out triedTimes))
                    {
                        triedTimes = 0;
                    }

                    if (triedTimes > AUTO_REJUDGE_MAX_TIMES)
                    {
                        _rejudgeTimesMap.Remove(entity.SolutionID);
                        canAutoRejudge = false;
                    }
                    else
                    {
                        _rejudgeTimesMap[entity.SolutionID] = triedTimes + 1;
                    }

                    entity.Result = canAutoRejudge ? ResultType.RejudgePending : ResultType.JudgeFailed;
                }

                SolutionManager.JudgeUpdateSolutionAllResult(entity, detail);

                return(true);
            }
            catch (System.Exception ex)
            {
                error = ex.Message;
                return(false);
            }
        }
Example #9
0
        public void  AddAssetTest()
        {
            string              groupId = "groupId";
            AssetsDataManager   alm     = new AssetsDataManager();
            ProblemDataManager  plm     = new ProblemDataManager();
            GroupLinkageManager glm     = new GroupLinkageManager(alm, plm);

            glm.addAssets(groupId, new string[] { "asset1" });
            Assert.AreEqual(1, glm.getAssets(groupId).Count);
        }
Example #10
0
        public void BasicTest()
        {
            AssetsDataManager                adm  = new AssetsDataManager();
            ProblemDataManager               pdm  = new ProblemDataManager();
            SkillsDataManager                sdm  = new SkillsDataManager();
            GroupLinkageManager              glm  = new GroupLinkageManager(adm, pdm);
            ProblemLinkageManager            plm  = new ProblemLinkageManager(adm);
            DefaultAssetRecommendationEngine dare = new DefaultAssetRecommendationEngine(adm, sdm, glm, plm);

            Assert.IsNotNull(dare);
        }
Example #11
0
        public void AddAssetsToExistingEmptyList()
        {
            string              groupId = "groupId";
            AssetsDataManager   alm     = new AssetsDataManager();
            ProblemDataManager  plm     = new ProblemDataManager();
            GroupLinkageManager glm     = new GroupLinkageManager(alm, plm);

            glm.addGroupId(groupId);
            glm.addAssets(groupId, new string [] { "assets" });
            Assert.AreEqual("assets", glm.getAssets(groupId)[0]);
        }
        public void TestMarkComplete()
        {
            ProblemDataManager dataManager = new ProblemDataManager();

            dataManager.AddProblem("Skill1", "Group1", "Problem1", 0, 0, 0);
            dataManager.MarkCompleted("Problem1", true);
            dataManager.MarkCompleted("Problem1", false);
            ProblemsMockDataStorageDelegate storage = new ProblemsMockDataStorageDelegate();

            dataManager.StoreData(storage);

            Assert.AreEqual(1, storage.callCount);
            Assert.AreEqual(2, storage.timesAttempt);
            Assert.AreEqual(1, storage.correct);
        }
Example #13
0
        public void AddDuplicateAssetToExistingList()
        {
            string groupId = "groupId";

            string []           asset = new string [] { "asset1" };
            AssetsDataManager   alm   = new AssetsDataManager();
            ProblemDataManager  plm   = new ProblemDataManager();
            GroupLinkageManager glm   = new GroupLinkageManager(alm, plm);

            glm.addAssets(groupId, asset);
            Assert.AreEqual(1, glm.getAssets(groupId).Count);

            glm.addAssets(groupId, asset);
            Assert.AreEqual(1, glm.getAssets(groupId).Count);
        }
Example #14
0
        private void createAssetsSkills(int skillCount, int assetTypesCount, int assetCount, out AssetsDataManager adm, out SkillsDataManager sdm)
        {
            adm = new AssetsDataManager();
            pdm = new ProblemDataManager();
            sdm = new SkillsDataManager();
            glm = new GroupLinkageManager(adm, pdm);
            plm = new ProblemLinkageManager(adm);

            for (int skillId = 0; skillId < skillCount; skillId++)
            {
                sdm.AddSkill(skillIdPrefix + skillId.ToString(), false);
                for (int assetTypeId = 0; assetTypeId < assetTypesCount; assetTypeId++)
                {
                    for (int assetId = 0; assetId < assetCount; assetId++)
                    {
                        adm.AddAsset(skillIdPrefix + skillId, assetTypePrefix + assetTypeId, assetIdPrefix + assetId, 0, 0, 0);
                    }
                }
            }
        }
Example #15
0
        public void AddMultipleAssetsToExistingList()
        {
            string groupId = "groupId";

            string []           assets = new string [] { "asset1" };
            AssetsDataManager   alm    = new AssetsDataManager();
            ProblemDataManager  plm    = new ProblemDataManager();
            GroupLinkageManager glm    = new GroupLinkageManager(alm, plm);

            glm.addAssets(groupId, assets);
            Assert.AreEqual(1, glm.getAssets(groupId).Count);

            assets = new string[] { "asset2", "asset3", "asset4" };
            glm.addAssets(groupId, assets);

            foreach (string asset in assets)
            {
                Assert.IsTrue(glm.getAssets(groupId).Contains(asset));
            }
            Assert.IsTrue(glm.getAssets(groupId).Contains("asset1"));
        }
        public void TestGetProblemsFromGroup()
        {
            ProblemDataManager dataManager = new ProblemDataManager();

            dataManager.AddProblem("Skill1", "Group1", "Problem1", 1, 0, 1);
            dataManager.AddProblem("Skill1", "Group2", "Problem2", 0, 0, 0);
            dataManager.AddProblem("Skill1", "Group1", "Problem3", 1, 0, 2);
            Assert.AreEqual(3, dataManager.GetProblemCount());

            Assert.AreEqual(1, dataManager.GetProblemsFromGroup(1, "Group1").Count);
            Assert.AreEqual(2, dataManager.GetProblemsFromGroup(2, "Group1").Count);

            Assert.AreEqual("Problem1", dataManager.GetProblemsFromGroup(2, "Group1")[0]);
            Assert.AreEqual("Problem3", dataManager.GetProblemsFromGroup(2, "Group1")[1]);

            dataManager.MarkCompleted("Problem1", true);

            Assert.AreEqual(2, dataManager.GetProblemsFromGroup(2, "Group1").Count);
            Assert.AreEqual("Problem3", dataManager.GetProblemsFromGroup(2, "Group1")[0]);
            Assert.AreEqual("Problem1", dataManager.GetProblemsFromGroup(2, "Group1")[1]);
        }
Example #17
0
        public void TestBasicAssessment()
        {
            SkillsDataManager sdm = new SkillsDataManager();

            sdm.AddSkill("s1", false);

            ProblemDataManager pdm = new ProblemDataManager();

            pdm.AddProblem("s1", "grp1", "s1g1-1", 0, 0, 0);

            DefaultAssessmentBuilder dab = new DefaultAssessmentBuilder(pdm, sdm);

            dab.AddProblem(1, "grp1", "randomGrp");

            Assessment assess = dab.Build();

            Assert.IsNotNull(assess);

            IList <string> probIds = assess.GetProblemSequence();

            Assert.AreEqual(probIds.Count, 1);
            Assert.AreEqual(probIds[0], "s1g1-1");
        }
        /// <summary>
        /// 获取评测列表的Json信息
        /// </summary>
        /// <param name="lanaugeSupport">评测机支持语言</param>
        /// <param name="count">评测机请求个数</param>
        /// <returns>评测列表Json信息</returns>
        public static Boolean TryGetPendingListJson(String lanaugeSupport, String count, out String result, out String error)
        {
            result = String.Empty;

            try
            {
                error = JudgeStatusManager.GetJudgeServerLoginStatus();

                if (!String.IsNullOrEmpty(error))
                {
                    return(false);
                }

                StringBuilder         ret          = new StringBuilder();
                Int32                 requestCount = Math.Max(1, count.ToInt32(1));
                List <SolutionEntity> pendingList  = SolutionManager.JudgeGetPendingSolution(requestCount, GetJudgeSupportLanguages(lanaugeSupport));

                Dictionary <Int32, ProblemEntity> problemCache        = new Dictionary <Int32, ProblemEntity>();
                Dictionary <Int32, String>        problemVersionCache = new Dictionary <Int32, String>();

                ProblemEntity  problem            = null;
                String         problemDataVersion = String.Empty;
                SolutionEntity solution           = null;
                Int32          listCount          = (pendingList == null ? 0 : pendingList.Count);

                ret.Append("[");

                for (Int32 i = 0; i < listCount; i++)
                {
                    if (i > 0)
                    {
                        ret.Append(",");
                    }

                    solution = pendingList[i];

                    if (!problemCache.TryGetValue(solution.ProblemID, out problem))
                    {
                        problem = ProblemManager.GetJudgeProblem(solution.ProblemID);
                        problemCache[solution.ProblemID] = problem;
                    }

                    if (!problemVersionCache.TryGetValue(solution.ProblemID, out problemDataVersion))
                    {
                        problemDataVersion = ProblemDataManager.GetProblemDataVersion(solution.ProblemID);
                        problemVersionCache[solution.ProblemID] = problemDataVersion;
                    }

                    if (problem != null)
                    {
                        Double scale       = solution.LanguageType.Scale;
                        Int32  timeLimit   = (Int32)(problem.TimeLimit * scale);
                        Int32  memoryLimit = (Int32)(problem.MemoryLimit * scale);

                        ret.Append("{");
                        ret.Append("\"sid\":\"").Append(solution.SolutionID.ToString()).Append("\",");
                        ret.Append("\"pid\":\"").Append(solution.ProblemID.ToString()).Append("\",");
                        ret.Append("\"username\":\"").Append(solution.UserName).Append("\",");
                        ret.Append("\"dataversion\":\"").Append(problemDataVersion).Append("\",");
                        ret.Append("\"timelimit\":\"").Append(timeLimit.ToString()).Append("\",");
                        ret.Append("\"memorylimit\":\"").Append(memoryLimit.ToString()).Append("\",");
                        ret.Append("\"language\":\"").Append(solution.LanguageType.Type).Append("[]\",");
                        ret.Append("\"sourcecode\":\"").Append(JsonEncoder.JsonEncode(solution.SourceCode)).Append("\"");
                        ret.Append("}");
                    }
                }

                ret.Append("]");

                result = ret.ToString();
                return(true);
            }
            catch (System.Exception ex)
            {
                error = ex.Message;
                return(false);
            }
        }