public void TestGetSkillForGroupId() { ProblemDataManager dataManager = new ProblemDataManager(); dataManager.AddProblem("Skill1", "Group1", "Problem1", 0, 0, 0); Assert.AreEqual("Skill1", dataManager.GetSkillForGroupId("Group1")); }
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); } } }
/// <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()); }
public void NullGroupId() { AssetsDataManager alm = new AssetsDataManager(); ProblemDataManager plm = new ProblemDataManager(); GroupLinkageManager glm = new GroupLinkageManager(alm, plm); Assert.IsNull(glm.getAssets("groupId")); }
public void BasicCtorTest() { AssetsDataManager alm = new AssetsDataManager(); ProblemDataManager plm = new ProblemDataManager(); GroupLinkageManager glm = new GroupLinkageManager(alm, plm); Assert.IsNotNull(glm); }
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); } }
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); }
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); }
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); }
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); }
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); } } } }
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]); }
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); } }