Esempio n. 1
0
        public static void Demonstrate()
        {
            CheckTask ct = new CheckTask();

            ct.Run(15);
            DbCheckTask db = new DbCheckTask();

            db.Run(5);
        }
Esempio n. 2
0
        public void CheckBreakSingleAllowed()
        {
            var ct = new CheckTask(GetStorage());

            var usages = new[]
            {
                new UsageLog(new TimeSpan(9, 0, 0), TimeSpan.FromMinutes(100)),
            };

            var res = ct.CheckKind(new CheckParameter(200, 30, usages));

            Assert.AreEqual(UsageResultKind.NoRestriction, res);
        }
Esempio n. 3
0
        public void CheckBreakSingleViolation()
        {
            var ct = new CheckTask(GetStorage());

            var usages = new[]
            {
                new UsageLog(new TimeSpan(9, 0, 0), TimeSpan.FromMinutes(101)),
            };

            var res = ct.CheckKind(new CheckParameter(TimeSpan.FromMinutes(200), TimeSpan.FromMinutes(30), usages));

            Assert.AreEqual(UsageResultKind.BreakRequired, res);
        }
Esempio n. 4
0
        public void CheckCurfewNoData()
        {
            var user     = GetUser();
            var usageLog = GetUsageLog(user, TimeSpan.Zero);

            var curfews = GetCurfews(0, user, null);
            var st      = GetStorage(user, usageLog, curfews);

            var c   = new CheckTask(st);
            var res = c.Check(user.Login, usageLog.Date);

            Assert.AreEqual(UsageResultKind.NoRestriction, res.Kind);
        }
Esempio n. 5
0
        public void CheckBreakPassedViolated()
        {
            var ct = new CheckTask(GetStorage());

            var usages = new List <UsageLog>
            {
                new UsageLog(new TimeSpan(9, 0, 0), TimeSpan.FromMinutes(50)),
                new UsageLog(new TimeSpan(10, 0, 0), TimeSpan.FromMinutes(40)),

                new UsageLog(new TimeSpan(16, 0, 0), TimeSpan.FromMinutes(50)),
            };

            var res = ct.CheckKind(new CheckParameter(200, 30, usages));

            Assert.AreEqual(UsageResultKind.NoRestriction, res);
        }
Esempio n. 6
0
        public void CheckCurfewWeekDaySeveralMatchUsedMoreThanAllowed()
        {
            var user     = GetUser();
            var usageLog = GetUsageLog(user, TimeSpan.FromHours(2));

            var weekDay = (int)usageLog.Date.DayOfWeek;

            var curfews = GetCurfews(3, user, (count, u) => new Curfew {
                Id = count, User = u, Time = TimeSpan.FromHours(count > 0 ? count : 1), WeekDay = weekDay.ToString()
            });
            var st = GetStorage(user, usageLog, curfews);

            var c   = new CheckTask(st);
            var res = c.Check(user.Login, usageLog.Date);

            Assert.AreEqual(UsageResultKind.Blocked, res.Kind);
        }
Esempio n. 7
0
        public void CheckCurfewWeekDayMatchUsedLessThanAllowed()
        {
            var user     = GetUser();
            var usageLog = GetUsageLog(user, TimeSpan.FromMinutes(15));

            var weekDay = (int)usageLog.Date.DayOfWeek;

            var curfews = GetCurfews(1, user, (count, u) => new Curfew {
                Id = count, User = u, Time = TimeSpan.FromHours(1), WeekDay = weekDay.ToString()
            });
            var st = GetStorage(user, usageLog, curfews);

            var c   = new CheckTask(st);
            var res = c.Check(user.Login, usageLog.Date);

            Assert.AreEqual(UsageResultKind.NoRestriction, res.Kind);
        }
Esempio n. 8
0
        public void CheckBreakSeveral()
        {
            var ct = new CheckTask(GetStorage());

            var usages = new List <UsageLog>
            {
                new UsageLog(new TimeSpan(9, 0, 0), TimeSpan.FromMinutes(50)),
                new UsageLog(new TimeSpan(10, 0, 0), TimeSpan.FromMinutes(50)),
            };

            var res = ct.CheckKind(new CheckParameter(200, 30, usages));

            Assert.AreEqual(UsageResultKind.NoRestriction, res);

            usages.Add(new UsageLog(new TimeSpan(11, 0, 0), TimeSpan.FromMinutes(1)));

            res = ct.CheckKind(new CheckParameter(200, 30, usages));
            Assert.AreEqual(UsageResultKind.BreakRequired, res);
        }
        private IEnumerator generate(bool generateWithGeometry = true, bool asynchronous = true, float maxTime = 0.1f)
        {
            generationProgress = 0;

            generateStartPoint();
            generateFinishPoint();

            QVector2Int startGenerationPoint = new QVector2Int(QMath.getRandom(0, mazeWidth), QMath.getRandom(0, mazeHeight));

            while (QListUtil.has(startPointList, startGenerationPoint) ||
                   QListUtil.has(finishPointList, startGenerationPoint) ||
                   QListUtil.has(obstaclePointList, startGenerationPoint))
            {
                startGenerationPoint.x = QMath.getRandom(0, mazeWidth);
                startGenerationPoint.y = QMath.getRandom(0, mazeHeight);
            }

            path      = new List <QVector2Int>();
            mazeArray = new List <QMazeOutput> [mazeWidth][];
            for (int px = 0; px < mazeWidth; px++)
            {
                mazeArray[px] = new List <QMazeOutput> [mazeHeight];
            }

            lastDirection = QMazeOutputDirection.None;
            QVector2Int currentPosition = new QVector2Int(startGenerationPoint.x, startGenerationPoint.y);

            QMazeOutput output = new QMazeOutput();

            mazeArray[currentPosition.x][currentPosition.y] = new List <QMazeOutput>();
            mazeArray[currentPosition.x][currentPosition.y].Add(output);

            path.Add(new QVector2Int(currentPosition.x, currentPosition.y));

            checkTaskList.Clear();
            if (startPointList.Count > 0 || finishPointList.Count > 0)
            {
                checkTaskList.Add(checkStartFinishPoint);
            }
            checkTaskList.Add(checkStandard);
            if (piecePack.getPiece(QMazePieceType.Intersection).use)
            {
                checkTaskList.Add(checkUnder);
            }
            if (piecePack.getPiece(QMazePieceType.Crossing).use&& !onlyWay)
            {
                checkTaskList.Add(checkCrossing);
            }
            if (piecePack.getPiece(QMazePieceType.Triple).use&& !onlyWay)
            {
                checkTaskList.Add(checkTripple);
            }
            if (piecePack.getPiece(QMazePieceType.DoubleCorner).use)
            {
                checkTaskList.Add(checkDoubleCorner);
            }
            if (piecePack.getPiece(QMazePieceType.DeadlockCorner).use)
            {
                checkTaskList.Add(checkDeadlockCorner);
            }
            if (piecePack.getPiece(QMazePieceType.DeadlockLine).use)
            {
                checkTaskList.Add(checkDeadlockLine);
            }
            if (piecePack.getPiece(QMazePieceType.DeadlockTriple).use)
            {
                checkTaskList.Add(checkDeadlockTriple);
            }
            if (piecePack.getPiece(QMazePieceType.DeadlockCrossing).use)
            {
                checkTaskList.Add(checkDeadlockCrossing);
            }
            if (piecePack.getPiece(QMazePieceType.TripleDeadlock).use)
            {
                checkTaskList.Add(checkTripleDeadlock);
            }
            if (piecePack.getPiece(QMazePieceType.LineDeadlock).use)
            {
                checkTaskList.Add(checkLineDeadlock);
            }
            if (piecePack.getPiece(QMazePieceType.LineDeadlockLine).use)
            {
                checkTaskList.Add(checkLineDeadlockLine);
            }
            if (piecePack.getPiece(QMazePieceType.CornerDeadlock1).use)
            {
                checkTaskList.Add(checkCornerDeadlock1);
            }
            if (piecePack.getPiece(QMazePieceType.CornerDeadlock2).use)
            {
                checkTaskList.Add(checkCornerDeadlock2);
            }
            if (piecePack.getPiece(QMazePieceType.CornerDeadlockCorner).use)
            {
                checkTaskList.Add(checkCornerDeadlockCorner);
            }
            if (piecePack.getPiece(QMazePieceType.Empty).use)
            {
                checkTaskList.Add(checkEmpty);
            }

            float time = Time.realtimeSinceStartup;

            do
            {
                int lastPathIndex = path.Count - 1;
                currentPosition.set(path[lastPathIndex].x, path[lastPathIndex].y);

                lastDirection = QMazeOutputDirection.None;
                QMazeOutput outputArray = QMazeOutput.getShuffleOutput();

                foreach (QMazeOutputDirection dir in outputArray.outputDirList)
                {
                    QVector2Int newPosition = new QVector2Int(currentPosition.x + QMazeOutput.dx[dir], currentPosition.y + QMazeOutput.dy[dir]);
                    if (pointInMaze(newPosition))
                    {
                        if (mazeArray[currentPosition.x][currentPosition.y].Count == 1)
                        {
                            List <QMazeOutput> newPositionOutputs = mazeArray[newPosition.x][newPosition.y];

                            int checkResult = 0;
                            for (int i = 0; i < checkTaskList.Count; i++)
                            {
                                CheckTask checkTask = checkTaskList[i];
                                checkResult = checkTask(currentPosition, newPosition, newPositionOutputs, dir);
                                if (checkResult != CHECK_FAILED)
                                {
                                    break;
                                }
                            }

                            if (checkResult == CHECK_CONTINUE)
                            {
                                continue;
                            }
                            if (checkResult == CHECK_BREAK)
                            {
                                generationProgress++;
                                break;
                            }
                        }
                    }
                    else if (QListUtil.has(exitPointList, newPosition))
                    {
                        if (!mazeArray[currentPosition.x][currentPosition.y][0].outputDirList.Contains(dir))
                        {
                            mazeArray[currentPosition.x][currentPosition.y][0].outputDirList.Add(dir);
                        }
                    }
                }

                if (lastDirection == QMazeOutputDirection.None)
                {
                    path.RemoveAt(path.Count - 1);
                }

                if (asynchronous && Time.realtimeSinceStartup - time > maxTime)
                {
                    time = Time.realtimeSinceStartup;
                    yield return(null);
                }
            }while (path.Count > 0);

            if (generateWithGeometry && mazeGeometryGenerator != null)
            {
                if (asynchronous)
                {
                    yield return(StartCoroutine(mazeGeometryGenerator.generateGeometry(this, mazeArray, maxTime)));
                }
                else
                {
                    IEnumerator geometryCreatorEnumerator = mazeGeometryGenerator.generateGeometry(this, mazeArray, maxTime);
                    while (geometryCreatorEnumerator.MoveNext())
                    {
                        ;
                    }
                }
            }
        }