summaryrefslogtreecommitdiff
path: root/Testing
diff options
context:
space:
mode:
Diffstat (limited to 'Testing')
-rw-r--r--Testing/Testing.vcxproj181
-rw-r--r--Testing/Testing.vcxproj.filters50
-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
-rw-r--r--Testing/src/main.cpp21
13 files changed, 612 insertions, 0 deletions
diff --git a/Testing/Testing.vcxproj b/Testing/Testing.vcxproj
new file mode 100644
index 00000000..0133f125
--- /dev/null
+++ b/Testing/Testing.vcxproj
@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Testing|Win32">
+ <Configuration>Testing</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Testing|x64">
+ <Configuration>Testing</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{C0AA3574-A672-43EB-8C9D-A22C80230859}</ProjectGuid>
+ <RootNamespace>Testing</RootNamespace>
+ <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Testing|x64'">
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Testing|Win32'">
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="Shared">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup />
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <SDLCheck>true</SDLCheck>
+ <AdditionalIncludeDirectories>$(SolutionDir)external;$(SolutionDir)Simulator\include;$(ProjectDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>Simulator.lib;gtest.lib;gtest_main.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalLibraryDirectories>$(SolutionDir)external\gtest;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <SDLCheck>true</SDLCheck>
+ <AdditionalIncludeDirectories>$(SolutionDir)external;$(SolutionDir)Simulator\include;$(ProjectDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ </ClCompile>
+ <Link>
+ <AdditionalLibraryDirectories>$(SolutionDir)external\gtest;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalDependencies>Simulator.lib;gtest.lib;gtest_main.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <SDLCheck>true</SDLCheck>
+ <AdditionalIncludeDirectories>$(SolutionDir)external;$(SolutionDir)Simulator\include;$(ProjectDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ <AdditionalDependencies>Simulator.lib;gtest.lib;gtest_main.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalLibraryDirectories>$(SolutionDir)external\gtest;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <SDLCheck>true</SDLCheck>
+ <AdditionalIncludeDirectories>$(SolutionDir)external;$(SolutionDir)Simulator\include;$(ProjectDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ </ClCompile>
+ <Link>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ <AdditionalLibraryDirectories>$(SolutionDir)external\gtest;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalDependencies>Simulator.lib;gtest.lib;gtest_main.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Testing|x64'">
+ <Link>
+ <AdditionalDependencies>Simulator.lib;gtest.lib;gtest_main.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\Testing;$(SolutionDir)external\gtest;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ </Link>
+ <ClCompile>
+ <AdditionalIncludeDirectories>$(SolutionDir)external;$(SolutionDir)Simulator\include;$(ProjectDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Testing|Win32'">
+ <Link>
+ <AdditionalDependencies>Simulator.lib;gtest.lib;gtest_main.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\Testing;$(SolutionDir)external\gtest;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ </Link>
+ <ClCompile>
+ <AdditionalIncludeDirectories>$(SolutionDir)external;$(SolutionDir)Simulator\include;$(ProjectDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="src\main.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="include\modeling\DatacenterTest.h" />
+ <ClInclude Include="include\modeling\EntityTest.h" />
+ <ClInclude Include="include\modeling\MachineTest.h" />
+ <ClInclude Include="include\modeling\RackTest.h" />
+ <ClInclude Include="include\modeling\RoomTest.h" />
+ <ClInclude Include="include\modeling\TypeIndexTest.h" />
+ <ClInclude Include="include\simulation\SimulationHistoryTest.h" />
+ <ClInclude Include="include\simulation\workloads\SimpleSchedulerTest.h" />
+ <ClInclude Include="include\simulation\workloads\WorkloadHistoryTest.h" />
+ <ClInclude Include="include\simulation\workloads\WorkloadTest.h" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets" />
+</Project> \ No newline at end of file
diff --git a/Testing/Testing.vcxproj.filters b/Testing/Testing.vcxproj.filters
new file mode 100644
index 00000000..c8e42539
--- /dev/null
+++ b/Testing/Testing.vcxproj.filters
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="src\main.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="include\simulation\workloads\WorkloadHistoryTest.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="include\simulation\workloads\WorkloadTest.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="include\simulation\workloads\SimpleSchedulerTest.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="include\modeling\TypeIndexTest.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="include\simulation\SimulationHistoryTest.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="include\modeling\MachineTest.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="include\modeling\EntityTest.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="include\modeling\DatacenterTest.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="include\modeling\RackTest.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="include\modeling\RoomTest.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+</Project> \ No newline at end of file
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());
+}
diff --git a/Testing/src/main.cpp b/Testing/src/main.cpp
new file mode 100644
index 00000000..6c31e43a
--- /dev/null
+++ b/Testing/src/main.cpp
@@ -0,0 +1,21 @@
+#include "simulation\workloads\WorkloadTest.h"
+#include "simulation\workloads\WorkloadHistoryTest.h"
+#include "simulation\workloads\SimpleSchedulerTest.h"
+#include "simulation\SimulationHistoryTest.h"
+#include "modeling\TypeIndexTest.h"
+#include "modeling\MachineTest.h"
+#include "modeling\EntityTest.h"
+#include "modeling\DatacenterTest.h"
+#include "modeling\RackTest.h"
+#include "modeling\RoomTest.h"
+
+#include <gtest/gtest.h>
+
+int main(int ac, char* av[])
+{
+ testing::InitGoogleTest(&ac, av);
+ int rc = RUN_ALL_TESTS();
+ std::cin.get();
+ return rc;
+}
+