public void executeAll()
        {
            Owner ow = new Owner("Nicolai");
            Scheduler sh = new Scheduler();

            for(int i = 0; i < 30; i++)
            {
                sh.addJob(new Job(1, 200+i, ow, s => "Hello world"));
            }

            for(int i = 0; i < 30; i++)
            {
                sh.addJob(new Job(1, 600+i, ow, s => "Hello world"));
            }

            for (int i = 0; i < 30; i++)
            {
                sh.addJob(new Job(1, 2001 + i, ow, s => "Hello world"));
            }

            sh.executeAll();

            // Sleeps for a second to make sure that all Jobs gets done
            System.Threading.Thread.Sleep(3000);

            Assert.AreEqual(0, sh.JobQueue.Count);

            Assert.AreEqual(0, sh.shortRunningJobs);
            Assert.AreEqual(0, sh.longRunningJobs);
            Assert.AreEqual(0, sh.veryLongRunningJobs);
        }
        public void addVeryLongJob()
        {
            Job job = new Job(1, 3000, new Owner("nicolai"), s => "Hello " + s);
            Scheduler sch = new Scheduler();

            sch.incrementRunningJobs(job);

            Assert.AreEqual(1, sch.veryLongRunningJobs);
        }
        public void removeShortJob()
        {
            Job job = new Job(1, 300, new Owner("nicolai"), s => "Hello " + s);
            Scheduler sch = new Scheduler();

            sch.incrementRunningJobs(job);
            sch.decrementRunningJobs(job);

            Assert.AreEqual(0, sch.shortRunningJobs);
        }
        public void addJob()
        {
            Owner ow = new Owner("Nicolai");
            Job job = new Job(1, 30000, ow, s => "Hello world");
            Scheduler sh = new Scheduler();

            sh.addJob(job);

            Assert.AreEqual(1, sh.JobQueue.Count);
        }
        public void removeJob_removeFromRunningList()
        {
            Owner ow = new Owner("Nicolai");
            Job job = new Job(1, 30000, ow, s => "Hello world");
            Scheduler sh = new Scheduler();

            sh.RunningJobs.Add(job);
            sh.removeJob(job);

            //Assert.AreEqual(0, sh.RunningJobs.Count);
        }
        public void findJob_findFirst()
        {
            Scheduler sch = new Scheduler();
            Job j1 = new Job(1, 300, new Owner("nicolai"), s => "Hello " + s);
            Job j2 = new Job(1, 700, new Owner("nicolai"), s => "Hello " + s);
            Job j3 = new Job(1, 3000, new Owner("nicolai"), s => "Hello " + s);

            sch.addJob(j1);
            sch.addJob(j2);
            sch.addJob(j3);

            Job nextJob = sch.findNextJobToRun();
            Assert.AreEqual(j1, nextJob);
        }
        public void popJob_popVeryLongJob()
        {
            Owner ow = new Owner("Nicolai");
            Job j1 = new Job(1, 30000, ow, s => "Hello world");
            Job j2 = new Job(1, 30002, ow, s => "Hello world");
            Job j3 = new Job(1, 3000000, ow, s => "Hello world");

            Scheduler sh = new Scheduler();

            sh.addJob(j3);
            sh.addJob(j1);
            sh.addJob(j2);

            Assert.AreEqual(j3, sh.PopJob());
        }
        public void findJob_notEnoughCPU_delayFirstOnce()
        {
            Scheduler sch = new Scheduler();
            BenchmarkSystem.BenchmarkSystem.AvailableCPU = 2;
            Job j1 = new Job(3, 300, new Owner("nicolai"), s => "Hello " + s);
            Job j2 = new Job(1, 700, new Owner("nicolai"), s => "Hello " + s);
            Job j3 = new Job(1, 3000, new Owner("nicolai"), s => "Hello " + s);

            sch.addJob(j1);
            sch.addJob(j2);
            sch.addJob(j3);

            Job nextJob = sch.findNextJobToRun();

            Assert.AreEqual(j2, nextJob);
        }
        public void findJob_toManyShortAndLongJobs()
        {
            Scheduler sch = new Scheduler();
            Job j1 = new Job(1, 300, new Owner("nicolai"), s => "Hello " + s);
            Job j2 = new Job(1, 700, new Owner("nicolai"), s => "Hello " + s);
            Job j3 = new Job(1, 3000, new Owner("nicolai"), s => "Hello " + s);

            sch.addJob(j1);
            sch.addJob(j2);
            sch.addJob(j3);

            sch.shortRunningJobs = sch.longRunningJobs = 40;
            Job nextJob = sch.findNextJobToRun();

            Assert.AreEqual(j3, nextJob);
        }