diff --git a/L4/L4.sln b/L4/L4.sln
index 46eaa1a..4e27aad 100644
--- a/L4/L4.sln
+++ b/L4/L4.sln
@@ -5,6 +5,8 @@ VisualStudioVersion = 17.1.32328.378
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LD_24", "LD_24\LD_24.csproj", "{4B4C2BFE-C41E-4EA1-BC86-979E2CA1D27B}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LD_24Tests", "LD_24Tests\LD_24Tests.csproj", "{D1567F9E-F2A5-48D9-B581-1B76DEC9F21E}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -15,6 +17,10 @@ Global
{4B4C2BFE-C41E-4EA1-BC86-979E2CA1D27B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4B4C2BFE-C41E-4EA1-BC86-979E2CA1D27B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4B4C2BFE-C41E-4EA1-BC86-979E2CA1D27B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D1567F9E-F2A5-48D9-B581-1B76DEC9F21E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D1567F9E-F2A5-48D9-B581-1B76DEC9F21E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D1567F9E-F2A5-48D9-B581-1B76DEC9F21E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D1567F9E-F2A5-48D9-B581-1B76DEC9F21E}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/L4/LD_24Tests/LD_24Tests.csproj b/L4/LD_24Tests/LD_24Tests.csproj
new file mode 100644
index 0000000..40a7ddd
--- /dev/null
+++ b/L4/LD_24Tests/LD_24Tests.csproj
@@ -0,0 +1,27 @@
+
+
+
+ netcoreapp3.1
+
+ false
+
+
+
+
+
+
+
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+ all
+
+
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+ all
+
+
+
+
+
+
+
+
diff --git a/L4/LD_24Tests/TaskUtilsTests.cs b/L4/LD_24Tests/TaskUtilsTests.cs
new file mode 100644
index 0000000..25c7728
--- /dev/null
+++ b/L4/LD_24Tests/TaskUtilsTests.cs
@@ -0,0 +1,42 @@
+using System;
+using Xunit;
+using LD_24.Code;
+using System.Collections.Generic;
+using FluentAssertions;
+
+namespace LD_24Tests
+{
+ public class TaskUtilsTests
+ {
+ [Fact]
+ public void TestFindAllClasses()
+ {
+ List actors = new List();
+ actors.Add(new NPC("foo", "bar", "baz", "ClassAAA", 10, 10, 10, 10, "biz"));
+ actors.Add(new Hero("foo", "bar", "baz", "ClassBBB", 10, 10, 10, 10, 10, 10, 10, 10));
+ actors.Add(new NPC("foo", "bar", "baz", "ClassBBB", 10, 10, 10, 10, "baz"));
+ actors.Add(new Hero("foo", "bar", "baz", "ClassCCC", 10, 10, 10, 10, 10, 10, 10, 10));
+ List classes = TaskUtils.FindAllClasses(actors);
+ classes.Should().BeEquivalentTo("ClassAAA", "ClassBBB", "ClassCCC");
+ }
+
+ [Fact]
+ public void TestFilterNPCsByAttack()
+ {
+ List actors = new List();
+ var actor1 = new NPC("foo", "bar", "baz", "ClassAAA", 10, 10, 9, 10, "biz");
+ var actor2 = new Hero("foo", "bar", "baz", "ClassBBB", 10, 10, 10, 10, 10, 10, 10, 10);
+ var actor3 = new NPC("foo", "bar", "baz", "ClassBBB", 10, 10, 10, 10, "baz");
+ var actor4 = new Hero("foo", "bar", "baz", "ClassCCC", 10, 10, 10, 10, 10, 10, 10, 10);
+ var actor5 = new NPC("foo", "bar", "baz", "ClassBBB", 10, 10, 5, 10, "baz");
+
+ actors.Add(actor1);
+ actors.Add(actor2);
+ actors.Add(actor3);
+ actors.Add(actor4);
+ actors.Add(actor5);
+ var NPCs = TaskUtils.FilterNPCsByAttack(actors, 10);
+ NPCs.Should().BeEquivalentTo(new List { actor1, actor5 });
+ }
+ }
+}