diff --git a/158.326 Software Architecture.sln b/158.326 Software Architecture.sln
index dae3535..d4a4a12 100644
--- a/158.326 Software Architecture.sln
+++ b/158.326 Software Architecture.sln
@@ -1,7 +1,7 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 16
-VisualStudioVersion = 16.0.31702.278
+# Visual Studio Version 17
+VisualStudioVersion = 17.0.31717.71
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "158326 Week 7 Singletons", "158326 Week 7 Singletons\158326 Week 7 Singletons.csproj", "{DDB32161-79F3-4CCF-9CCC-44CCD562B15E}"
EndProject
@@ -31,6 +31,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Week 10 - TDD Tests", "Week
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Week 10 - Account Library", "Week 10 - Account Library\Week 10 - Account Library.csproj", "{82A3780B-823C-448F-AB58-262970DB77ED}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Week 11 - TTTLib", "Week 11 - TTTLib\Week 11 - TTTLib.csproj", "{48350610-2686-4B59-8EC5-0C0773FBF7EF}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Week 11 - TTTTests", "Week 11 - TTTTests\Week 11 - TTTTests.csproj", "{FA247296-57A1-492B-9EFD-2CA90A392C1A}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -93,6 +97,14 @@ Global
{82A3780B-823C-448F-AB58-262970DB77ED}.Debug|Any CPU.Build.0 = Debug|Any CPU
{82A3780B-823C-448F-AB58-262970DB77ED}.Release|Any CPU.ActiveCfg = Release|Any CPU
{82A3780B-823C-448F-AB58-262970DB77ED}.Release|Any CPU.Build.0 = Release|Any CPU
+ {48350610-2686-4B59-8EC5-0C0773FBF7EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {48350610-2686-4B59-8EC5-0C0773FBF7EF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {48350610-2686-4B59-8EC5-0C0773FBF7EF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {48350610-2686-4B59-8EC5-0C0773FBF7EF}.Release|Any CPU.Build.0 = Release|Any CPU
+ {FA247296-57A1-492B-9EFD-2CA90A392C1A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {FA247296-57A1-492B-9EFD-2CA90A392C1A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {FA247296-57A1-492B-9EFD-2CA90A392C1A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {FA247296-57A1-492B-9EFD-2CA90A392C1A}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/Week 11 - TTTLib/GameWinnerService.cs b/Week 11 - TTTLib/GameWinnerService.cs
new file mode 100644
index 0000000..9152003
--- /dev/null
+++ b/Week 11 - TTTLib/GameWinnerService.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Week_11___TTTLib
+{
+ public class GameWinnerService : IGameWinnerService
+ {
+ public char Validate(char[,] board)
+ {
+ var rowOne = board[0,0];
+ var rowTwo = board[0,1];
+ var rowThree = board[0,2];
+ if (rowOne == rowTwo && rowTwo == rowThree)
+ return rowOne;
+
+ return ' ';
+ }
+ }
+
+ public interface IGameWinnerService
+ {
+ char Validate(char[,] board);
+
+ }
+}
diff --git a/Week 11 - TTTLib/Properties/AssemblyInfo.cs b/Week 11 - TTTLib/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..a569ef0
--- /dev/null
+++ b/Week 11 - TTTLib/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("Week 11 - TTTLib")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Week 11 - TTTLib")]
+[assembly: AssemblyCopyright("Copyright © 2021")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("48350610-2686-4b59-8ec5-0c0773fbf7ef")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Week 11 - TTTLib/Week 11 - TTTLib.csproj b/Week 11 - TTTLib/Week 11 - TTTLib.csproj
new file mode 100644
index 0000000..8668b0a
--- /dev/null
+++ b/Week 11 - TTTLib/Week 11 - TTTLib.csproj
@@ -0,0 +1,48 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {48350610-2686-4B59-8EC5-0C0773FBF7EF}
+ Library
+ Properties
+ Week_11___TTTLib
+ Week 11 - TTTLib
+ v4.7.2
+ 512
+ true
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Week 11 - TTTTests/Properties/AssemblyInfo.cs b/Week 11 - TTTTests/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..c1504ee
--- /dev/null
+++ b/Week 11 - TTTTests/Properties/AssemblyInfo.cs
@@ -0,0 +1,20 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+[assembly: AssemblyTitle("Week 11 - TTTTests")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Week 11 - TTTTests")]
+[assembly: AssemblyCopyright("Copyright © 2021")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+[assembly: ComVisible(false)]
+
+[assembly: Guid("fa247296-57a1-492b-9efd-2ca90a392c1a")]
+
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Week 11 - TTTTests/UnitTest1.cs b/Week 11 - TTTTests/UnitTest1.cs
new file mode 100644
index 0000000..0e0c356
--- /dev/null
+++ b/Week 11 - TTTTests/UnitTest1.cs
@@ -0,0 +1,65 @@
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+using System;
+using Week_11___TTTLib;
+
+namespace Week_11___TTTTests
+{
+ [TestClass]
+ public class UnitTest1
+ {
+ [TestMethod]
+ public void TestMethod1()
+ {
+
+ }
+
+ [TestMethod]
+ public void TestEmptyArray()
+ {
+ IGameWinnerService gameWinnerService;
+ gameWinnerService = new GameWinnerService();
+ const char expected = ' ';
+ var gameboard = new char[,]
+ {
+ {' ', ' ', ' ' },
+ {' ', ' ', ' ' },
+ {' ', ' ', ' ' }
+ };
+
+ var actual = gameWinnerService.Validate(gameboard);
+ Assert.AreEqual(expected, actual);
+ }
+
+ [TestMethod]
+ public void TestPlayerWithAllCrossesInTopRowIsWinner()
+ {
+ IGameWinnerService gameWinnerService;
+ gameWinnerService = new GameWinnerService();
+ const char expected = 'X';
+ var gameboard = new char[,]
+ {
+ {'X', 'X', 'X' },
+ {' ', ' ', ' ' },
+ {' ', ' ', ' ' }
+ };
+ var actual = gameWinnerService.Validate(gameboard);
+ Assert.AreEqual(expected, actual);
+ }
+
+ [TestMethod]
+ public void TestPlayerWithAllNaughtsInTopRowIsWinner()
+ {
+ IGameWinnerService gameWinnerService;
+ gameWinnerService = new GameWinnerService();
+ const char expected = 'O';
+ var gameboard = new char[,]
+ {
+ {'O', 'O', 'O' },
+ {' ', ' ', ' ' },
+ {' ', ' ', ' ' }
+ };
+ var actual = gameWinnerService.Validate(gameboard);
+ Assert.AreEqual(expected, actual);
+ }
+ }
+}
diff --git a/Week 11 - TTTTests/Week 11 - TTTTests.csproj b/Week 11 - TTTTests/Week 11 - TTTTests.csproj
new file mode 100644
index 0000000..06c2e46
--- /dev/null
+++ b/Week 11 - TTTTests/Week 11 - TTTTests.csproj
@@ -0,0 +1,74 @@
+
+
+
+
+
+ Debug
+ AnyCPU
+ {FA247296-57A1-492B-9EFD-2CA90A392C1A}
+ Library
+ Properties
+ Week_11___TTTTests
+ Week 11 - TTTTests
+ v4.7.2
+ 512
+ {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ 15.0
+ $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
+ $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages
+ False
+ UnitTest
+
+
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+ ..\packages\MSTest.TestFramework.2.1.2\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll
+
+
+ ..\packages\MSTest.TestFramework.2.1.2\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {48350610-2686-4b59-8ec5-0c0773fbf7ef}
+ Week 11 - TTTLib
+
+
+
+
+
+
+ This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Week 11 - TTTTests/packages.config b/Week 11 - TTTTests/packages.config
new file mode 100644
index 0000000..f84cb10
--- /dev/null
+++ b/Week 11 - TTTTests/packages.config
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file