1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
#pragma once
#include "simulation\workloads\SimpleScheduler.h"
#include "simulation\workloads\Workload.h"
#include "modeling\Machine.h"
#include <vector>
#include <gtest\gtest.h>
TEST(SimpleSchedulerTest, ScheduleSingleMachine)
{
// Initialization
Simulation::SimpleScheduler scheduler;
Simulation::Workload workload1(100, 0, 1, 1, 0);
Simulation::Workload workload2(150, 0, 1, 1, 0);
Modeling::Machine machine(10);
std::vector<std::reference_wrapper<Modeling::Machine>> machines;
machines.push_back(std::reference_wrapper<Modeling::Machine>(machine));
scheduler.addWorkload(workload1);
scheduler.addWorkload(workload2);
// Distribute tasks across machines
scheduler.schedule(machines);
// Do work
for (auto machine : machines)
machine.get().tick();
// Assert work done
auto workloads = scheduler.getWorkloads();
auto workload1Remaining = workloads.at(0).lock()->getRemainingOperations();
auto workload2Remaining = workloads.at(1).lock()->getRemainingOperations();
ASSERT_EQ(workload1Remaining, 90);
ASSERT_EQ(workload2Remaining, 150);
}
TEST(SimpleSchedulerTest, ScheduleMultipleMachine)
{
// Initialization
Simulation::SimpleScheduler scheduler;
Simulation::Workload workload1(100, 0, 1, 1, 0);
Simulation::Workload workload2(150, 0, 1, 1, 0);
Modeling::Machine machine1(10);
Modeling::Machine machine2(30);
std::vector<std::reference_wrapper<Modeling::Machine>> machines;
machines.push_back(std::reference_wrapper<Modeling::Machine>(machine1));
machines.push_back(std::reference_wrapper<Modeling::Machine>(machine2));
scheduler.addWorkload(workload1);
scheduler.addWorkload(workload2);
// Distribute tasks across machines
scheduler.schedule(machines);
// Do work
for (auto machine : machines)
machine.get().tick();
// Assert work done
auto workloads = scheduler.getWorkloads();
auto workload1Remaining = workloads.at(0).lock()->getRemainingOperations();
auto workload2Remaining = workloads.at(1).lock()->getRemainingOperations();
ASSERT_EQ(workload1Remaining, 60);
ASSERT_EQ(workload2Remaining, 150);
}
TEST(SimpleSchedulerTest, ScheduleFinishTask)
{
// Initialization
Simulation::SimpleScheduler scheduler;
Simulation::Workload workload1(100, 0, 1, 1, 0);
Modeling::Machine machine1(100);
std::vector<std::reference_wrapper<Modeling::Machine>> machines;
machines.push_back(std::reference_wrapper<Modeling::Machine>(machine1));
scheduler.addWorkload(workload1);
ASSERT_TRUE(scheduler.hasWorkloads());
// Distribute tasks across machines
scheduler.schedule(machines);
// Do work
for (auto machine : machines)
machine.get().tick();
// Distribute tasks across machines again, this is when finished workloads get cleared
scheduler.schedule(machines);
// Assert work done
auto workloads = scheduler.getWorkloads();
ASSERT_EQ(workloads.size(), 0);
ASSERT_FALSE(scheduler.hasWorkloads());
}
TEST(SimpleSchedulerTest, AddMultipleWorkloads)
{
Simulation::SimpleScheduler ss;
std::vector<Simulation::Workload> workloads{
Simulation::Workload(100, 0, 1, 1, 0),
Simulation::Workload(100, 0, 1, 1, 0)
};
ss.addWorkloads(workloads);
ASSERT_TRUE(ss.hasWorkloads());
ASSERT_EQ(ss.getWorkloads().size(), 2);
}
|