diff --git a/sha256sum.vcxproj b/sha256sum.vcxproj
index b661f91..b35acaa 100644
--- a/sha256sum.vcxproj
+++ b/sha256sum.vcxproj
@@ -31,7 +31,7 @@
     <Keyword>Win32Proj</Keyword>
     <ProjectGuid>{0d52e9d4-df97-4975-854e-3bc74d9a0731}</ProjectGuid>
     <RootNamespace>sha256sum</RootNamespace>
-    <WindowsTargetPlatformVersion>10.0.22000.0</WindowsTargetPlatformVersion>
+    <WindowsTargetPlatformVersion>10.0.22621.0</WindowsTargetPlatformVersion>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
@@ -68,7 +68,7 @@
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <UseDebugLibraries>false</UseDebugLibraries>
-    <PlatformToolset>v140</PlatformToolset>
+    <PlatformToolset>v143</PlatformToolset>
     <WholeProgramOptimization>true</WholeProgramOptimization>
     <CharacterSet>Unicode</CharacterSet>
     <PreferredToolArchitecture>x64</PreferredToolArchitecture>
@@ -148,6 +148,7 @@
     <Link>
       <SubSystem>Console</SubSystem>
       <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalDependencies>Shlwapi.lib;Pathcch.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Tests|x64'">
diff --git a/tests/sha256.cpp b/tests/sha256.cpp
index a3dcbcd..fc51c49 100644
--- a/tests/sha256.cpp
+++ b/tests/sha256.cpp
@@ -1,6 +1,12 @@
 #include "pch.h"
 #include "CppUnitTest.h"
 #include <sha256sum.h>
+#include <direct.h>
+#define GetCurrentDir _getcwd
+#include <stdio.h>
+#include <string>
+#include <iostream>
+#include <fstream>
 
 using namespace Microsoft::VisualStudio::CppUnitTestFramework;
 
@@ -9,7 +15,7 @@ TEST_CLASS(fCalcHash)
 {
 public:
 
-    TEST_METHOD(TestValidHash)
+    TEST_METHOD(TestValidHashCurrentPath)
     {
         Args args = { 0 };
         LPWSTR file = L"CalcHashTestFile.txt";
@@ -18,7 +24,77 @@ TEST_CLASS(fCalcHash)
         ErrorCode act = CalcHash(&args, &hash, file);
         ErrorCode exp = SUCCESS;
 
-        Assert::AreEqual((int)act, (int)exp);
+        Assert::AreEqual((int)exp, (int)act);
+        Assert::AreEqual(L"5825c4a88eddd074eb3c12b23dedc0eb4d7d5f2356a61a4078a0bd3ccf69c7a1", hash);
+    }
+
+    TEST_METHOD(TestValidHashMissingFile)
+    {
+        Args args = { 0 };
+        LPWSTR file = L"Missing.txt";
+
+        LPWSTR hash = NULL;
+        ErrorCode act = CalcHash(&args, &hash, file);
+        ErrorCode exp = CALC_HASH_FAILED_TO_OPEN_FILE;
+
+        Assert::AreEqual((int)exp, (int)act);
+    }
+
+    TEST_METHOD(TestValidHashAbsolutePath)
+    {
+        char cwd[FILENAME_MAX];
+        if (!GetCurrentDir(cwd, sizeof(cwd)))
+        {
+            Assert::Fail(L"Can't get current path");
+            return;
+        }
+
+        std::string fullPath = std::string(cwd) + "\\CalcHashTestFile.txt";
+        std::wstring wideFullPath(fullPath.begin(), fullPath.end());
+
+        Args args = { 0 };
+        LPWSTR file = &wideFullPath[0];
+
+        LPWSTR hash = NULL;
+        ErrorCode act = CalcHash(&args, &hash, file);
+        ErrorCode exp = SUCCESS;
+
+        Assert::AreEqual((int)exp, (int)act);
+        Assert::AreEqual(L"5825c4a88eddd074eb3c12b23dedc0eb4d7d5f2356a61a4078a0bd3ccf69c7a1", hash);
+    }
+
+    TEST_METHOD(TestValidHashRelativePath)
+    {
+        char tempCwd[FILENAME_MAX];
+        if (!GetCurrentDir(tempCwd, sizeof(tempCwd)))
+        {
+            Assert::Fail(L"Can't get current path");
+            return;
+        }
+
+        std::string cwd(tempCwd);
+
+        size_t lastSeparator = cwd.find_last_of('\\');
+
+        std::string lastPart;
+        if (lastSeparator != std::string::npos) {
+            lastPart = cwd.substr(lastSeparator + 1);
+        }
+        else {
+            lastPart = cwd;
+        }
+
+        std::string fullPath = std::string(cwd) + "\\..\\" + lastPart + "\\CalcHashTestFile.txt";
+        std::wstring wideFullPath(fullPath.begin(), fullPath.end());
+
+        Args args = { 0 };
+        LPWSTR file = &wideFullPath[0];
+
+        LPWSTR hash = NULL;
+        ErrorCode act = CalcHash(&args, &hash, file);
+        ErrorCode exp = SUCCESS;
+
+        Assert::AreEqual((int)exp, (int)act);
         Assert::AreEqual(L"5825c4a88eddd074eb3c12b23dedc0eb4d7d5f2356a61a4078a0bd3ccf69c7a1", hash);
     }
 };
@@ -27,7 +103,7 @@ TEST_CLASS(fVerifyChecksums)
 {
 public:
 
-    TEST_METHOD(TestSuccess)
+    TEST_METHOD(TestSuccessCurrentPath)
     {
         Args args = { 0 };
         args.sumFile = L"ShasumSuccess.txt";
@@ -36,7 +112,87 @@ TEST_CLASS(fVerifyChecksums)
         ErrorCode act = VerifyChecksums(&args);
         ErrorCode exp = SUCCESS;
 
-        Assert::AreEqual((int)act, (int)exp);
+        Assert::AreEqual((int)exp, (int)act);
+    }
+
+    TEST_METHOD(TestSuccessAbsolutePath)
+    {
+        char cwd[FILENAME_MAX];
+        if (!GetCurrentDir(cwd, sizeof(cwd)))
+        {
+            Assert::Fail(L"Can't get current path");
+            return;
+        }
+
+        std::string expectedChecksum = "5825c4a88eddd074eb3c12b23dedc0eb4d7d5f2356a61a4078a0bd3ccf69c7a1";
+        std::string checksumFilename = "ShasumSuccessAbsolute.txt";
+        std::ofstream checksumFile(checksumFilename);
+
+        if (!checksumFile) {
+            Assert::Fail(L"Count not create checksum file");
+            return;
+        }
+
+        checksumFile << expectedChecksum << " *" << cwd << "\\CalcHashTestFile.txt" << std::endl;
+        checksumFile.close();
+
+        std::string fullPath = std::string(cwd) + "\\" + checksumFilename;
+
+        std::wstring wideFullPath(fullPath.begin(), fullPath.end());
+        Args args = { 0 };
+        args.sumFile = &wideFullPath[0];
+
+        LPWSTR hash = NULL;
+        ErrorCode act = VerifyChecksums(&args);
+        ErrorCode exp = SUCCESS;
+
+        Assert::AreEqual((int)exp, (int)act);
+    }
+
+    TEST_METHOD(TestSuccessRelativePath)
+    {
+        char tempCwd[FILENAME_MAX];
+        if (!GetCurrentDir(tempCwd, sizeof(tempCwd)))
+        {
+            Assert::Fail(L"Can't get current path");
+            return;
+        }
+
+        std::string cwd(tempCwd);
+
+        size_t lastSeparator = cwd.find_last_of('\\');
+
+        std::string lastPart;
+        if (lastSeparator != std::string::npos) {
+            lastPart = cwd.substr(lastSeparator + 1);
+        }
+        else {
+            lastPart = cwd;
+        }
+
+        std::string expectedChecksum = "5825c4a88eddd074eb3c12b23dedc0eb4d7d5f2356a61a4078a0bd3ccf69c7a1";
+        std::string checksumFilename = "ShasumSuccessRelative.txt";
+        std::ofstream checksumFile(checksumFilename);
+
+        if (!checksumFile) {
+            Assert::Fail(L"Count not create checksum file");
+            return;
+        }
+
+        checksumFile << expectedChecksum << " *" << "..\\" << lastPart << "\\CalcHashTestFile.txt" << std::endl;
+        checksumFile.close();
+
+        std::string fullPath = std::string(cwd) + "\\" + checksumFilename;
+
+        std::wstring wideFullPath(fullPath.begin(), fullPath.end());
+        Args args = { 0 };
+        args.sumFile = &wideFullPath[0];
+
+        LPWSTR hash = NULL;
+        ErrorCode act = VerifyChecksums(&args);
+        ErrorCode exp = SUCCESS;
+
+        Assert::AreEqual((int)exp, (int)act);
     }
 
     TEST_METHOD(TestFailure)
@@ -48,7 +204,7 @@ TEST_CLASS(fVerifyChecksums)
         ErrorCode act = VerifyChecksums(&args);
         ErrorCode exp = CHECK_SUM_CHECKSUM_FAILED;
 
-        Assert::AreEqual((int)act, (int)exp);
+        Assert::AreEqual((int)exp, (int)act);
     }
 };
 }
diff --git a/tests/tests.vcxproj b/tests/tests.vcxproj
index 972645d..bf48699 100644
--- a/tests/tests.vcxproj
+++ b/tests/tests.vcxproj
@@ -23,7 +23,7 @@
     <ProjectGuid>{8C494A81-1735-4AEF-804C-242C1AAE19A7}</ProjectGuid>
     <Keyword>Win32Proj</Keyword>
     <RootNamespace>tests</RootNamespace>
-    <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
+    <WindowsTargetPlatformVersion>10.0.22621.0</WindowsTargetPlatformVersion>
     <ProjectSubType>NativeUnitTestProject</ProjectSubType>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
@@ -101,13 +101,14 @@
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <UseFullPaths>true</UseFullPaths>
       <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
+      <LanguageStandard>Default</LanguageStandard>
     </ClCompile>
     <Link>
       <SubSystem>Windows</SubSystem>
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <OptimizeReferences>true</OptimizeReferences>
-      <AdditionalLibraryDirectories>$(VCInstallDir)UnitTest\lib;$(TargetDir);C:\src\sha256sum.exe\x64\Release\;sha256.obj;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <AdditionalDependencies>args.obj;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(VCInstallDir)UnitTest\lib;$(TargetDir);$(ProjectDir)..\sha256sum\x64\Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>args.obj;sha256.obj;Shlwapi.lib;Pathcch.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
@@ -137,8 +138,8 @@
     </ClCompile>
     <Link>
       <SubSystem>Windows</SubSystem>
-      <AdditionalLibraryDirectories>$(TargetDir);$(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <AdditionalDependencies>args.obj;sha256.obj;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(TargetDir);$(VCInstallDir)UnitTest\lib;$(ProjectDir)..\sha256sum\x64\Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>args.obj;sha256.obj;Shlwapi.lib;Pathcch.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -179,15 +180,15 @@
     </ProjectReference>
   </ItemGroup>
   <ItemGroup>
-    <Text Include="CalcHashTestFile.txt">
+    <CopyFileToFolders Include="CalcHashTestFile.txt">
       <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
-    </Text>
-    <Text Include="ShasumFailure.txt">
+    </CopyFileToFolders>
+    <CopyFileToFolders Include="ShasumFailure.txt">
       <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
-    </Text>
-    <Text Include="ShasumSuccess.txt">
+    </CopyFileToFolders>
+    <CopyFileToFolders Include="ShasumSuccess.txt">
       <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
-    </Text>
+    </CopyFileToFolders>
   </ItemGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">
diff --git a/tests/tests.vcxproj.filters b/tests/tests.vcxproj.filters
index 49bf4e1..224212f 100644
--- a/tests/tests.vcxproj.filters
+++ b/tests/tests.vcxproj.filters
@@ -31,14 +31,14 @@
     </ClInclude>
   </ItemGroup>
   <ItemGroup>
-    <Text Include="ShasumFailure.txt">
+    <CopyFileToFolders Include="CalcHashTestFile.txt">
       <Filter>Resource Files</Filter>
-    </Text>
-    <Text Include="ShasumSuccess.txt">
+    </CopyFileToFolders>
+    <CopyFileToFolders Include="ShasumFailure.txt">
       <Filter>Resource Files</Filter>
-    </Text>
-    <Text Include="CalcHashTestFile.txt">
+    </CopyFileToFolders>
+    <CopyFileToFolders Include="ShasumSuccess.txt">
       <Filter>Resource Files</Filter>
-    </Text>
+    </CopyFileToFolders>
   </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/tests/tests.vcxproj.user b/tests/tests.vcxproj.user
index 88a5509..4c7ac91 100644
--- a/tests/tests.vcxproj.user
+++ b/tests/tests.vcxproj.user
@@ -1,4 +1,14 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LocalDebuggerEnvironment>OUTPUT_PATH=$(OutputPath)
+$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment>
+    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LocalDebuggerEnvironment>$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment>
+    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
+    <LocalDebuggerCommandArguments>
+    </LocalDebuggerCommandArguments>
+  </PropertyGroup>
 </Project>
\ No newline at end of file