示例#1
0
 private void AddOffsets(List <Offset> offsets, ExamTable table)
 {
     foreach (var o in offsets)
     {
         table.Add(o.studentId, o.courseId);
     }
 }
示例#2
0
        public void TestExamResult()
        {
            int userId = 1;

            QuestionAnswer answer1  = new QuestionAnswer("Ostrava", true);
            QuestionAnswer answer2  = new QuestionAnswer("Praha", false);
            Question       question = QuestionTable.InsertQuestion(this.connection, userId, "test", "closed", new List <QuestionAnswer>()
            {
                answer1, answer2
            });

            Exam exam = ExamTable.InsertExam(this.connection, userId, "test exam", 10, 1, 1, DateTime.Now.AddDays(-1), DateTime.Now.AddDays(1));

            exam.AddQuestion(question.Id, 20);
            ExamTable.UpdateExam(this.connection, exam);

            int        examResultId = ExamResultTable.InsertExamResult(this.connection, exam.Id, userId);
            ExamResult examResult   = ExamResultTable.GetExamResultById(this.connection, examResultId);

            Assert.AreEqual(examResultId, examResult.Id);
            Assert.AreEqual(userId, examResult.OwnerId);
            Assert.AreEqual("created", examResult.State);

            ExamAnswer answer = new ExamAnswer(question.Id, "Ostrava");

            Assert.IsTrue(ExamResultTable.HandInExamResult(this.connection, examResult, new List <ExamAnswer>()
            {
                answer
            }));

            examResult = ExamResultTable.GetExamResultById(this.connection, examResult.Id);

            Assert.AreEqual("finished", examResult.State);
            Assert.AreEqual(exam.Questions[0].Points, examResult.Points);
        }
示例#3
0
        public void TestExamCreation()
        {
            Exam exam   = ExamTable.InsertExam(this.connection, 1, "test", 10, 10, 3, DateTime.Now, DateTime.Now.AddDays(1));
            Exam dbExam = ExamTable.GetExamById(this.connection, exam.Id);

            Assert.AreEqual(exam.Id, dbExam.Id);
            Assert.AreEqual(exam.OwnerId, dbExam.OwnerId);
            Assert.AreEqual(exam.Name, dbExam.Name);
            Assert.AreEqual(exam.Timelimit, dbExam.Timelimit);
            Assert.AreEqual(exam.MinimumPoints, dbExam.MinimumPoints);
            Assert.AreEqual(exam.MaximumAttempts, dbExam.MaximumAttempts);
            Assert.AreEqual(exam.StartDate, dbExam.StartDate);
            Assert.AreEqual(exam.EndDate, dbExam.EndDate);

            Assert.IsTrue(ExamTable.DeleteExam(this.connection, exam, 1));

            try
            {
                exam = ExamTable.GetExamById(this.connection, exam.Id);
                Assert.Fail("Test pořád existuje");
            }
            catch (DatabaseException)
            {
            }
        }
示例#4
0
        public void TestExamActiveList()
        {
            Exam exam = ExamTable.InsertExam(this.connection, 1, "test", 10, 10, 10, DateTime.Now.AddDays(-1), DateTime.Now.AddDays(1));

            Assert.IsTrue(ExamTable.GetActiveExams(this.connection).Contains(exam.Id));

            Assert.IsTrue(ExamTable.DeleteExam(this.connection, exam, exam.OwnerId));
        }
示例#5
0
        public ActionResult DeleteConfirmed(int id)
        {
            if (string.IsNullOrEmpty(Convert.ToString(Session["UserName"])))
            {
                return(RedirectToAction("Login", "Home"));
            }

            ExamTable examTable = db.ExamTables.Find(id);

            db.ExamTables.Remove(examTable);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
示例#6
0
        static void Main(string[] args)
        {
            var      table           = new ExamTable(1000);
            var      list            = new ExamList();
            int      numberOfMoves   = 5000;
            int      numberOfThreads = 100;
            TimeSpan time            = WorkingTime(table, numberOfMoves, numberOfThreads);

            Console.WriteLine("{0} moves on {1} threads with {2} took {3} time", numberOfMoves, numberOfThreads, table.ToString(), time);
            time = WorkingTime(list, numberOfMoves, numberOfThreads);
            Console.WriteLine("{0} moves on {1} threads with {2} took {3} time", numberOfMoves, numberOfThreads, list.ToString(), time);
            Console.ReadKey();
        }
示例#7
0
        public void TestExamActive()
        {
            Exam activeExam = ExamTable.InsertExam(this.connection, 1, "test", 10, 10, 10, DateTime.Now.AddDays(-1), DateTime.Now.AddDays(1));

            Assert.IsTrue(ExamTable.IsExamActive(this.connection, activeExam));

            Exam inactiveExam = ExamTable.InsertExam(this.connection, 1, "test", 10, 10, 10, DateTime.Now.AddDays(1), DateTime.Now.AddDays(2));

            Assert.IsFalse(ExamTable.IsExamActive(this.connection, inactiveExam));

            Assert.IsTrue(ExamTable.DeleteExam(this.connection, activeExam, activeExam.OwnerId));
            Assert.IsTrue(ExamTable.DeleteExam(this.connection, inactiveExam, inactiveExam.OwnerId));
        }
示例#8
0
        public void TestExamQuestions()
        {
            Exam exam = ExamTable.InsertExam(this.connection, 1, "test", 10, 10, 10, DateTime.Now, DateTime.Now.AddDays(1));

            exam.AddQuestion(new ExamQuestion(1, exam.Id, 0, 5.5m));

            ExamTable.UpdateExam(this.connection, exam);

            Exam dbExam = ExamTable.GetExamById(this.connection, exam.Id);

            Assert.AreEqual(exam.Questions.Count, dbExam.Questions.Count);
            Assert.AreEqual(exam.Questions[0].Points, dbExam.Questions[0].Points);

            Assert.IsTrue(ExamTable.DeleteExam(this.connection, exam, exam.OwnerId));
        }
示例#9
0
        // GET: ExamTables/Details/5
        public ActionResult Details(int?id)
        {
            if (string.IsNullOrEmpty(Convert.ToString(Session["UserName"])))
            {
                return(RedirectToAction("Login", "Home"));
            }

            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            ExamTable examTable = db.ExamTables.Find(id);

            if (examTable == null)
            {
                return(HttpNotFound());
            }
            return(View(examTable));
        }
示例#10
0
        // GET: ExamTables/Edit/5
        public ActionResult Edit(int?id)
        {
            if (string.IsNullOrEmpty(Convert.ToString(Session["UserName"])))
            {
                return(RedirectToAction("Login", "Home"));
            }

            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            ExamTable examTable = db.ExamTables.Find(id);

            if (examTable == null)
            {
                return(HttpNotFound());
            }
            ViewBag.UserID = new SelectList(db.UserTables, "UserID", "FullName", examTable.UserID);
            return(View(examTable));
        }
示例#11
0
        public ActionResult Create(ExamTable examTable)
        {
            if (string.IsNullOrEmpty(Convert.ToString(Session["UserName"])))
            {
                return(RedirectToAction("Login", "Home"));
            }

            int userid = Convert.ToInt32(Convert.ToString(Session["UserID"]));

            examTable.UserID = userid;
            if (ModelState.IsValid)
            {
                db.ExamTables.Add(examTable);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            ViewBag.UserID = new SelectList(db.UserTables, "UserID", "FullName", examTable.UserID);
            return(View(examTable));
        }
示例#12
0
        public void ExamTableTest()
        {
            ExamTable     table                  = new ExamTable(50);
            List <Thread> threads                = new List <Thread>();
            List <Offset> offsets                = new List <Offset>();
            int           numberOfThreads        = 10;
            int           numberOfAddThreads     = numberOfThreads / 2;
            int           numberOfRemoveThreads  = numberOfThreads - numberOfAddThreads;
            int           numberOfIdStudents     = 50;
            int           numberOfIdCourses      = 20;
            int           numberOfRemovedOffsets = 0;
            int           removeValue            = 5;

            for (int i = 0; i < numberOfIdStudents; ++i)
            {
                for (int j = 0; j < numberOfIdCourses; ++j)
                {
                    offsets.Add(new Offset(i, j));
                    if (i * j % removeValue == 0)
                    {
                        numberOfRemovedOffsets++;
                    }
                }
            }

            int addPartLenght = offsets.Count / numberOfAddThreads;

            for (int i = 0; i < numberOfAddThreads - 1; ++i)
            {
                var partOfAllOffsets = offsets.GetRange(i * addPartLenght, addPartLenght);
                threads.Add(new Thread(() => AddOffsets(partOfAllOffsets, table)));
                threads.Last().Start();
            }

            var lastPartOfAllOffsets = offsets.GetRange((numberOfAddThreads - 1) * addPartLenght, offsets.Count - (numberOfAddThreads - 1) * addPartLenght);

            threads.Add(new Thread(() => AddOffsets(lastPartOfAllOffsets, table)));
            threads.Last().Start();


            for (int i = 0; i < numberOfAddThreads; ++i)
            {
                threads[i].Join();
            }


            List <Offset> filteredList = offsets.FindAll(new Predicate <Offset>((o) => (o.studentId * o.courseId) % removeValue == 0));
            int           partLength   = filteredList.Count / numberOfRemoveThreads;

            for (int i = 0; i < numberOfRemoveThreads - 1; ++i)
            {
                var partOfFilteredList = filteredList.GetRange(i * partLength, partLength);
                threads.Add(new Thread(() => RemoveOffsets(partOfFilteredList, table)));
                threads.Last().Start();
            }
            var lastPartOfFilteredList = filteredList.GetRange((numberOfRemoveThreads - 1) * partLength, filteredList.Count - (numberOfRemoveThreads - 1) * partLength);

            threads.Add(new Thread(() => RemoveOffsets(filteredList, table)));
            threads.Last().Start();

            for (int i = numberOfAddThreads; i < threads.Count; ++i)
            {
                threads[i].Join();
            }

            for (int i = 0; i < numberOfIdStudents; ++i)
            {
                for (int j = 0; j < numberOfIdCourses; ++j)
                {
                    Assert.AreEqual(i * j % removeValue != 0, table.Contains(i, j));
                }
            }

            int numberOfOffsets = 0;

            foreach (var r in table.Content)
            {
                numberOfOffsets += r.Length;
            }

            Assert.AreEqual(numberOfIdStudents * numberOfIdCourses - numberOfRemovedOffsets, numberOfOffsets);
        }