diff --git a/15/LensLibrary.Tests/GlobalUsings.cs b/15/LensLibrary.Tests/GlobalUsings.cs
new file mode 100644
index 0000000..7fef4b0
--- /dev/null
+++ b/15/LensLibrary.Tests/GlobalUsings.cs
@@ -0,0 +1,2 @@
+global using Xunit;
+global using FluentAssertions;
\ No newline at end of file
diff --git a/15/LensLibrary.Tests/LensLibrary.Tests.csproj b/15/LensLibrary.Tests/LensLibrary.Tests.csproj
new file mode 100644
index 0000000..f7dbfc1
--- /dev/null
+++ b/15/LensLibrary.Tests/LensLibrary.Tests.csproj
@@ -0,0 +1,30 @@
+
+
+
+ net8.0
+ enable
+ enable
+
+ false
+ true
+
+
+
+
+
+
+
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+ all
+
+
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+ all
+
+
+
+
+
+
+
+
diff --git a/15/LensLibrary.Tests/UnitTest1.cs b/15/LensLibrary.Tests/UnitTest1.cs
new file mode 100644
index 0000000..41e3234
--- /dev/null
+++ b/15/LensLibrary.Tests/UnitTest1.cs
@@ -0,0 +1,10 @@
+namespace LensLibrary.Tests;
+
+public class UnitTest1
+{
+ [Fact]
+ public void Test1()
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/15/LensLibrary/LensLibrary.csproj b/15/LensLibrary/LensLibrary.csproj
new file mode 100644
index 0000000..2150e37
--- /dev/null
+++ b/15/LensLibrary/LensLibrary.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/15/LensLibrary/Program.cs b/15/LensLibrary/Program.cs
new file mode 100644
index 0000000..3751555
--- /dev/null
+++ b/15/LensLibrary/Program.cs
@@ -0,0 +1,2 @@
+// See https://aka.ms/new-console-template for more information
+Console.WriteLine("Hello, World!");
diff --git a/AdventOfCode2023.sln b/AdventOfCode2023.sln
index efe8d0b..0ce8141 100644
--- a/AdventOfCode2023.sln
+++ b/AdventOfCode2023.sln
@@ -87,6 +87,12 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ParabolicReflectorDish", "1
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ParabolicReflectorDish.Tests", "14\ParabolicReflectorDish.Tests\ParabolicReflectorDish.Tests.csproj", "{631931F8-01C5-428A-9ECE-DB54FA9032FE}"
EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "15", "15", "{C8BF9272-DE30-41F2-9194-A6E61516FA36}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LensLibrary", "15\LensLibrary\LensLibrary.csproj", "{2FBA6922-A014-4F88-BE47-FEC17BDAE5C6}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LensLibrary.Tests", "15\LensLibrary.Tests\LensLibrary.Tests.csproj", "{19C4B359-A7CF-4271-A2CE-E488E679D8F0}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -208,6 +214,14 @@ Global
{631931F8-01C5-428A-9ECE-DB54FA9032FE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{631931F8-01C5-428A-9ECE-DB54FA9032FE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{631931F8-01C5-428A-9ECE-DB54FA9032FE}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2FBA6922-A014-4F88-BE47-FEC17BDAE5C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2FBA6922-A014-4F88-BE47-FEC17BDAE5C6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2FBA6922-A014-4F88-BE47-FEC17BDAE5C6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2FBA6922-A014-4F88-BE47-FEC17BDAE5C6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {19C4B359-A7CF-4271-A2CE-E488E679D8F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {19C4B359-A7CF-4271-A2CE-E488E679D8F0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {19C4B359-A7CF-4271-A2CE-E488E679D8F0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {19C4B359-A7CF-4271-A2CE-E488E679D8F0}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{3F8EAC09-4BC7-43AA-B72B-48DDD2710F6D} = {8C29858C-623A-461A-BF0B-254E151CD9C2}
@@ -238,5 +252,7 @@ Global
{0E74E842-A876-4E8C-9D10-BA09F40039EC} = {DC4E691A-0061-4937-8732-E8D8073C868D}
{671E1E43-48A1-441F-A681-111F64445504} = {D00D5BF8-754D-4D1B-9AF0-D701DFFEC9B1}
{631931F8-01C5-428A-9ECE-DB54FA9032FE} = {D00D5BF8-754D-4D1B-9AF0-D701DFFEC9B1}
+ {2FBA6922-A014-4F88-BE47-FEC17BDAE5C6} = {C8BF9272-DE30-41F2-9194-A6E61516FA36}
+ {19C4B359-A7CF-4271-A2CE-E488E679D8F0} = {C8BF9272-DE30-41F2-9194-A6E61516FA36}
EndGlobalSection
EndGlobal