diff options
Diffstat (limited to 'Testing')
| -rw-r--r-- | Testing/Testing.vcxproj | 181 | ||||
| -rw-r--r-- | Testing/Testing.vcxproj.filters | 50 | ||||
| -rw-r--r-- | Testing/include/modeling/DatacenterTest.h | 35 | ||||
| -rw-r--r-- | Testing/include/modeling/EntityTest.h | 10 | ||||
| -rw-r--r-- | Testing/include/modeling/MachineTest.h | 39 | ||||
| -rw-r--r-- | Testing/include/modeling/RackTest.h | 21 | ||||
| -rw-r--r-- | Testing/include/modeling/RoomTest.h | 24 | ||||
| -rw-r--r-- | Testing/include/modeling/TypeIndexTest.h | 28 | ||||
| -rw-r--r-- | Testing/include/simulation/SimulationHistoryTest.h | 48 | ||||
| -rw-r--r-- | Testing/include/simulation/workloads/SimpleSchedulerTest.h | 106 | ||||
| -rw-r--r-- | Testing/include/simulation/workloads/WorkloadHistoryTest.h | 15 | ||||
| -rw-r--r-- | Testing/include/simulation/workloads/WorkloadTest.h | 34 | ||||
| -rw-r--r-- | Testing/src/main.cpp | 21 |
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; +} + |
