summaryrefslogtreecommitdiff
path: root/Testing/include
diff options
context:
space:
mode:
authorMDBijman <matthijs@bijman.org>2017-01-24 12:15:26 +0100
committerMDBijman <matthijs@bijman.org>2017-01-24 12:15:26 +0100
commit070ce923574dcc57435cb3fb2dfe86b6a38cd249 (patch)
treeffd69a842ac4ad22aaf7161f923b9f0b47c7147a /Testing/include
Initial code commit with organized dependencies
Diffstat (limited to 'Testing/include')
-rw-r--r--Testing/include/modeling/DatacenterTest.h35
-rw-r--r--Testing/include/modeling/EntityTest.h10
-rw-r--r--Testing/include/modeling/MachineTest.h39
-rw-r--r--Testing/include/modeling/RackTest.h21
-rw-r--r--Testing/include/modeling/RoomTest.h24
-rw-r--r--Testing/include/modeling/TypeIndexTest.h28
-rw-r--r--Testing/include/simulation/SimulationHistoryTest.h48
-rw-r--r--Testing/include/simulation/workloads/SimpleSchedulerTest.h106
-rw-r--r--Testing/include/simulation/workloads/WorkloadHistoryTest.h15
-rw-r--r--Testing/include/simulation/workloads/WorkloadTest.h34
10 files changed, 360 insertions, 0 deletions
diff --git a/Testing/include/modeling/DatacenterTest.h b/Testing/include/modeling/DatacenterTest.h
new file mode 100644
index 00000000..0b64c88a
--- /dev/null
+++ b/Testing/include/modeling/DatacenterTest.h
@@ -0,0 +1,35 @@
+#pragma once
+#include "modeling\Datacenter.h"
+#include "simulation\workloads\SimpleScheduler.h"
+
+#include <gtest\gtest.h>
+
+TEST(DatacenterTest, GetAddRoomOfType)
+{
+ Simulation::Scheduler* scheduler = new Simulation::SimpleScheduler();
+ Modeling::Datacenter<int, float, double> datacenter(scheduler);
+
+ int first = 4, second = 1;
+ datacenter.addRoomOfType<int>(first);
+ datacenter.addRoomOfType<int>(second);
+ double third = 3.0;
+ datacenter.addRoomOfType<double>(third);
+
+ ASSERT_EQ(datacenter.getRoomsOfType<int>().at(0), 4);
+ ASSERT_EQ(datacenter.getRoomsOfType<int>().at(1), 1);
+ ASSERT_EQ(datacenter.getRoomsOfType<double>().at(0), 3.0);
+}
+
+TEST(DatacenterTest, GetSetScheduler)
+{
+ Simulation::Scheduler* scheduler = new Simulation::SimpleScheduler();
+ Simulation::Scheduler* secondScheduler = new Simulation::SimpleScheduler();
+
+ Modeling::Datacenter<int, float, double> datacenter(scheduler);
+
+ ASSERT_EQ(datacenter.getScheduler().get(), scheduler);
+
+ datacenter.setScheduler(secondScheduler);
+
+ ASSERT_EQ(datacenter.getScheduler().get(), secondScheduler);
+} \ No newline at end of file
diff --git a/Testing/include/modeling/EntityTest.h b/Testing/include/modeling/EntityTest.h
new file mode 100644
index 00000000..ff7293ff
--- /dev/null
+++ b/Testing/include/modeling/EntityTest.h
@@ -0,0 +1,10 @@
+#pragma once
+#include "modeling\Entity.h"
+
+#include <gtest\gtest.h>
+
+TEST(EntityTest, Constructor)
+{
+ Modeling::Entity e(10);
+ ASSERT_EQ(e.id, 10);
+} \ No newline at end of file
diff --git a/Testing/include/modeling/MachineTest.h b/Testing/include/modeling/MachineTest.h
new file mode 100644
index 00000000..6bba9d0d
--- /dev/null
+++ b/Testing/include/modeling/MachineTest.h
@@ -0,0 +1,39 @@
+#pragma once
+#include "modeling\Machine.h"
+
+#include <gtest\gtest.h>
+
+TEST(MachineTest, GetSpeed)
+{
+ Modeling::Machine m(100);
+
+ ASSERT_EQ(m.getSpeed(), 100);
+}
+
+TEST(MachineTest, IsBusy)
+{
+ Modeling::Machine m(100);
+ std::shared_ptr<Simulation::Workload> shrdWorkload = std::make_shared<Simulation::Workload>(150, 1, 1, 1);
+ ASSERT_FALSE(m.isBusy());
+
+ m.giveTask(std::weak_ptr<Simulation::Workload>(shrdWorkload));
+
+ ASSERT_TRUE(m.isBusy());
+}
+
+TEST(MachineTest, Tick)
+{
+ Modeling::Machine m(100);
+ std::shared_ptr<Simulation::Workload> shrdWorkload = std::make_shared<Simulation::Workload>(150, 1, 1, 1);
+ m.giveTask(std::weak_ptr<Simulation::Workload>(shrdWorkload));
+
+ ASSERT_TRUE(m.isBusy());
+
+ m.tick();
+
+ ASSERT_TRUE(m.isBusy());
+
+ m.tick();
+
+ ASSERT_FALSE(m.isBusy());
+} \ No newline at end of file
diff --git a/Testing/include/modeling/RackTest.h b/Testing/include/modeling/RackTest.h
new file mode 100644
index 00000000..cd568e14
--- /dev/null
+++ b/Testing/include/modeling/RackTest.h
@@ -0,0 +1,21 @@
+#pragma once
+#include "modeling\Rack.h"
+
+#include <gtest\gtest.h>
+
+TEST(RackTest, ConstructorTest)
+{
+ Modeling::Rack rack(10, 100);
+ ASSERT_EQ(rack.id, 10);
+}
+
+TEST(RackTest, GetSetMachines)
+{
+ Modeling::Rack rack(10, 100);
+
+ Modeling::Machine machine(100);
+ rack.setMachine(machine, 10);
+
+ ASSERT_EQ(rack.getMachines().size(), 1);
+ ASSERT_EQ(rack.getMachines().at(0).get().getSpeed(), 100);
+}
diff --git a/Testing/include/modeling/RoomTest.h b/Testing/include/modeling/RoomTest.h
new file mode 100644
index 00000000..6d482e73
--- /dev/null
+++ b/Testing/include/modeling/RoomTest.h
@@ -0,0 +1,24 @@
+#pragma once
+#include "modeling\Room.h"
+
+#include <gtest\gtest.h>
+
+TEST(RoomTest, ConstructorTest)
+{
+ Modeling::Room<int, float, double> room(10);
+ ASSERT_EQ(room.id, 10);
+}
+
+TEST(RoomTest, GetSetEntities)
+{
+ Modeling::Room<int, float, double> room(10);
+
+ int first = 3;
+ room.addEntity(first);
+
+ double second = 4.0;
+ room.addEntity(second);
+
+ ASSERT_EQ(room.getEntitiesOfType<int>().at(0), 3);
+ ASSERT_EQ(room.getEntitiesOfType<double>().at(0), 4.0);
+}
diff --git a/Testing/include/modeling/TypeIndexTest.h b/Testing/include/modeling/TypeIndexTest.h
new file mode 100644
index 00000000..0a0d6d54
--- /dev/null
+++ b/Testing/include/modeling/TypeIndexTest.h
@@ -0,0 +1,28 @@
+#pragma once
+#include "modeling\TypeIndex.h"
+
+#include <gtest\gtest.h>
+
+TEST(TypeIndexTest, SingleType)
+{
+ size_t index = indexOfType<int, int>();
+ ASSERT_EQ(index, 0);
+}
+
+TEST(TypeIndexTest, MultipleTypesFirst)
+{
+ size_t index = indexOfType<int, int, std::string, bool>();
+ ASSERT_EQ(index, 0);
+}
+
+TEST(TypeIndexTest, MultipleTypesMiddle)
+{
+ size_t index = indexOfType<std::string, int, std::string, bool>();
+ ASSERT_EQ(index, 1);
+}
+
+TEST(TypeIndexTest, MultipleTypesLast)
+{
+ size_t index = indexOfType<bool, int, std::string, bool>();
+ ASSERT_EQ(index, 2);
+} \ No newline at end of file
diff --git a/Testing/include/simulation/SimulationHistoryTest.h b/Testing/include/simulation/SimulationHistoryTest.h
new file mode 100644
index 00000000..d519de89
--- /dev/null
+++ b/Testing/include/simulation/SimulationHistoryTest.h
@@ -0,0 +1,48 @@
+#pragma once
+#include "simulation\SimulationHistory.h"
+#include "simulation\workloads\WorkloadHistory.h"
+
+#include <gtest\gtest.h>
+
+TEST(SimulationHistoryTest, SetGetHistoryAtTick)
+{
+ Simulation::SimulationHistory simulationHistory;
+ Simulation::WorkloadHistory workloadHistory;
+ workloadHistory.setFlopsDone(1, 100);
+
+ simulationHistory.setHistoryAtTick(1, workloadHistory);
+
+ auto resultHistory = simulationHistory.getHistoryAtTick(1);
+ ASSERT_EQ(resultHistory.history.at(0).first, 1);
+ ASSERT_EQ(resultHistory.history.at(0).second, 100);
+}
+
+TEST(SimulationHistoryTest, ClearHistory)
+{
+ Simulation::SimulationHistory simulationHistory;
+ Simulation::WorkloadHistory workloadHistory;
+ simulationHistory.setHistoryAtTick(1, workloadHistory);
+
+ ASSERT_EQ(simulationHistory.workloadHistories.size(), 1);
+
+ simulationHistory.clearHistory();
+
+ ASSERT_EQ(simulationHistory.workloadHistories.size(), 0);
+}
+
+TEST(SimulationHistoryTest, GetHistorySize)
+{
+ Simulation::SimulationHistory simulationHistory;
+ Simulation::WorkloadHistory workloadHistory;
+ simulationHistory.setHistoryAtTick(1, workloadHistory);
+
+ ASSERT_EQ(simulationHistory.getHistorySize(), 1);
+
+ simulationHistory.setHistoryAtTick(2, workloadHistory);
+
+ ASSERT_EQ(simulationHistory.getHistorySize(), 2);
+
+ simulationHistory.clearHistory();
+
+ ASSERT_EQ(simulationHistory.getHistorySize(), 0);
+} \ No newline at end of file
diff --git a/Testing/include/simulation/workloads/SimpleSchedulerTest.h b/Testing/include/simulation/workloads/SimpleSchedulerTest.h
new file mode 100644
index 00000000..07b4416f
--- /dev/null
+++ b/Testing/include/simulation/workloads/SimpleSchedulerTest.h
@@ -0,0 +1,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);
+} \ No newline at end of file
diff --git a/Testing/include/simulation/workloads/WorkloadHistoryTest.h b/Testing/include/simulation/workloads/WorkloadHistoryTest.h
new file mode 100644
index 00000000..4cf7f4e3
--- /dev/null
+++ b/Testing/include/simulation/workloads/WorkloadHistoryTest.h
@@ -0,0 +1,15 @@
+#pragma once
+#include "simulation\workloads\WorkloadHistory.h"
+
+#include <gtest\gtest.h>
+
+TEST(WorkloadHistoryTest, SetFlopsDone)
+{
+ Simulation::WorkloadHistory history;
+ history.setFlopsDone(1, 5);
+
+ auto a = history.history.at(0);
+
+ ASSERT_EQ(a.first, 1);
+ ASSERT_EQ(a.second, 5);
+} \ No newline at end of file
diff --git a/Testing/include/simulation/workloads/WorkloadTest.h b/Testing/include/simulation/workloads/WorkloadTest.h
new file mode 100644
index 00000000..e0da2138
--- /dev/null
+++ b/Testing/include/simulation/workloads/WorkloadTest.h
@@ -0,0 +1,34 @@
+#pragma once
+#include "simulation\workloads\Workload.h"
+
+#include <gtest\gtest.h>
+
+TEST(WorkloadTest, Constructor)
+{
+ Simulation::Workload w(100, 0, 5, 3, 0);
+ ASSERT_EQ(false, w.isFinished());
+ ASSERT_EQ(5, w.getId());
+ ASSERT_EQ(100, w.getRemainingOperations());
+ ASSERT_EQ(100, w.getTotalOperations());
+}
+
+TEST(WorkloadTest, DoOperations)
+{
+ Simulation::Workload w(100, 0, 5, 3, 0);
+ w.doOperations(10);
+ ASSERT_EQ(90, w.getRemainingOperations());
+}
+
+TEST(WorkloadTest, GetTotalOperations)
+{
+ Simulation::Workload w(100, 0, 5, 3, 0);
+ w.doOperations(10);
+ ASSERT_EQ(100, w.getTotalOperations());
+}
+
+TEST(WorkloadTest, IsFinished)
+{
+ Simulation::Workload w(10, 0, 5, 3, 0);
+ w.doOperations(10);
+ ASSERT_EQ(true, w.isFinished());
+}