diff --git a/appveyor.yml b/appveyor.yml index 2fca97e5..cce5ba08 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -13,7 +13,7 @@ environment: configuration: - Debug - Release -version: 3.4.0.{build} +version: 3.5.1.{build} init: - cmd: echo Project - %APPVEYOR_PROJECT_NAME% diff --git a/src/PropertySheets/NativeProject.props b/src/PropertySheets/NativeProject.props index 8d747535..e981516c 100644 --- a/src/PropertySheets/NativeProject.props +++ b/src/PropertySheets/NativeProject.props @@ -2,9 +2,12 @@ <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ImportGroup Label="PropertySheets" /> <PropertyGroup Label="Configuration"> - <TargetPlatformVersion>8.1</TargetPlatformVersion> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> + <TargetPlatformVersion>8.1</TargetPlatformVersion> + <CharacterSet>Unicode</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup> + <TargetExt>.lib</TargetExt> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir> diff --git a/src/Spectre.libClassifier.Tests/Spectre.libClassifier.Tests.vcxproj b/src/Spectre.libClassifier.Tests/Spectre.libClassifier.Tests.vcxproj index 96c529cd..40c58465 100644 --- a/src/Spectre.libClassifier.Tests/Spectre.libClassifier.Tests.vcxproj +++ b/src/Spectre.libClassifier.Tests/Spectre.libClassifier.Tests.vcxproj @@ -93,7 +93,7 @@ </ClCompile> <Link> <AdditionalLibraryDirectories>$(OutputPath);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <AdditionalDependencies>Spectre.libDataset.lib;Spectre.libGenetic.lib;Spectre.libFunctional.lib;Spectre.libException.lib;Spectre.libClassifier.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> + <AdditionalDependencies>Spectre.libClassifier.lib;Spectre.libFunctional.lib;Spectre.libException.lib;Spectre.libDataset.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)'=='Debug|Win32'"> @@ -108,7 +108,7 @@ </ClCompile> <Link> <AdditionalLibraryDirectories>$(OutputPath);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <AdditionalDependencies>Spectre.libDataset.lib;Spectre.libGenetic.lib;Spectre.libFunctional.lib;Spectre.libException.lib;Spectre.libClassifier.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> + <AdditionalDependencies>Spectre.libClassifier.lib;Spectre.libFunctional.lib;Spectre.libException.lib;Spectre.libDataset.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|x64'"> @@ -127,7 +127,7 @@ <EnableCOMDATFolding>true</EnableCOMDATFolding> <OptimizeReferences>true</OptimizeReferences> <AdditionalLibraryDirectories>$(OutputPath);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <AdditionalDependencies>Spectre.libDataset.lib;Spectre.libGenetic.lib;Spectre.libFunctional.lib;Spectre.libException.lib;Spectre.libClassifier.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> + <AdditionalDependencies>Spectre.libClassifier.lib;Spectre.libFunctional.lib;Spectre.libException.lib;Spectre.libDataset.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'"> @@ -146,7 +146,7 @@ <EnableCOMDATFolding>true</EnableCOMDATFolding> <OptimizeReferences>true</OptimizeReferences> <AdditionalLibraryDirectories>$(OutputPath);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <AdditionalDependencies>Spectre.libDataset.lib;Spectre.libGenetic.lib;Spectre.libFunctional.lib;Spectre.libException.lib;Spectre.libClassifier.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> + <AdditionalDependencies>Spectre.libClassifier.lib;Spectre.libFunctional.lib;Spectre.libException.lib;Spectre.libDataset.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> <ItemGroup> @@ -177,4 +177,4 @@ <Error Condition="!Exists('..\packages\opencv3.3.0.0.1\build\native\opencv3.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\opencv3.3.0.0.1\build\native\opencv3.props'))" /> <Error Condition="!Exists('..\packages\opencv3.3.0.0.1\build\native\opencv3.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\opencv3.3.0.0.1\build\native\opencv3.targets'))" /> </Target> -</Project> +</Project> \ No newline at end of file diff --git a/src/Spectre.libClassifier.Tests/Spectre.libClassifier.Tests.vcxproj.filters b/src/Spectre.libClassifier.Tests/Spectre.libClassifier.Tests.vcxproj.filters index 329c0ecf..b7c938e4 100644 --- a/src/Spectre.libClassifier.Tests/Spectre.libClassifier.Tests.vcxproj.filters +++ b/src/Spectre.libClassifier.Tests/Spectre.libClassifier.Tests.vcxproj.filters @@ -39,8 +39,11 @@ <ClCompile Include="$(MSBuildThisFileDirectory)..\..\lib\native\src\gmock\gmock-all.cc"> <Filter>Source Files</Filter> </ClCompile> + <ClCompile Include="SplittedOpenCVDatasetTest.cpp"> + <Filter>Source Files</Filter> + </ClCompile> </ItemGroup> <ItemGroup> <None Include="packages.config" /> </ItemGroup> -</Project> +</Project> \ No newline at end of file diff --git a/src/Spectre.libGaussianMixtureModelling/Spectre.libGaussianMixtureModelling.vcxproj b/src/Spectre.libGaussianMixtureModelling/Spectre.libGaussianMixtureModelling.vcxproj index 2c40d0c3..053028f5 100644 --- a/src/Spectre.libGaussianMixtureModelling/Spectre.libGaussianMixtureModelling.vcxproj +++ b/src/Spectre.libGaussianMixtureModelling/Spectre.libGaussianMixtureModelling.vcxproj @@ -101,7 +101,8 @@ <PreprocessorDefinitions>_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> <TreatWarningAsError>true</TreatWarningAsError> <AdditionalOptions>/std:c++latest %(AdditionalOptions)</AdditionalOptions> - <AdditionalIncludeDirectories>$(SolutionDir)Common;</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories> + </AdditionalIncludeDirectories> </ClCompile> <Link> <SubSystem>Windows</SubSystem> @@ -134,7 +135,7 @@ <AdditionalOptions>/std:c++latest %(AdditionalOptions)</AdditionalOptions> <TreatWarningAsError>true</TreatWarningAsError> <OpenMPSupport>false</OpenMPSupport> - <AdditionalIncludeDirectories>$(SolutionDir)Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> </ClCompile> <Link> <SubSystem>Windows</SubSystem> diff --git a/src/Spectre.libGenetic.Tests/Spectre.libGenetic.Tests.vcxproj b/src/Spectre.libGenetic.Tests/Spectre.libGenetic.Tests.vcxproj index 8074b42c..fddf582c 100644 --- a/src/Spectre.libGenetic.Tests/Spectre.libGenetic.Tests.vcxproj +++ b/src/Spectre.libGenetic.Tests/Spectre.libGenetic.Tests.vcxproj @@ -88,7 +88,7 @@ </ClCompile> <Link> <AdditionalLibraryDirectories>$(TargetDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <AdditionalDependencies>Spectre.libStatistics.lib;Spectre.libGenetic.lib;Spectre.libException.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalDependencies>Spectre.libGenetic.lib;Spectre.libException.lib;%(AdditionalDependencies)</AdditionalDependencies> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> @@ -122,7 +122,7 @@ <EnableCOMDATFolding>true</EnableCOMDATFolding> <OptimizeReferences>true</OptimizeReferences> <AdditionalLibraryDirectories>$(TargetDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <AdditionalDependencies>Spectre.libStatistics.lib;Spectre.libGenetic.lib;Spectre.libException.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalDependencies>Spectre.libGenetic.lib;Spectre.libException.lib;%(AdditionalDependencies)</AdditionalDependencies> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> diff --git a/src/Spectre.libStatistics.Tests/Spectre.libStatistics.Tests.vcxproj b/src/Spectre.libStatistics.Tests/Spectre.libStatistics.Tests.vcxproj index 4fa32653..83a49d3d 100644 --- a/src/Spectre.libStatistics.Tests/Spectre.libStatistics.Tests.vcxproj +++ b/src/Spectre.libStatistics.Tests/Spectre.libStatistics.Tests.vcxproj @@ -82,7 +82,7 @@ <AdditionalOptions>/std:c++latest %(AdditionalOptions)</AdditionalOptions> </ClCompile> <Link> - <AdditionalDependencies>Spectre.libDataset.lib;Spectre.libStatistics.lib;Spectre.libException.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> + <AdditionalDependencies>Spectre.libStatistics.lib;Spectre.libException.lib;Spectre.libDataset.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)'=='Debug|Win32'"> @@ -108,7 +108,7 @@ <Link> <EnableCOMDATFolding>true</EnableCOMDATFolding> <OptimizeReferences>true</OptimizeReferences> - <AdditionalDependencies>Spectre.libDataset.lib;Spectre.libStatistics.lib;Spectre.libException.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> + <AdditionalDependencies>Spectre.libStatistics.lib;Spectre.libException.lib;Spectre.libDataset.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'"> diff --git a/src/Spectre.libWavelet.Tests/ConvolutionTest.cpp b/src/Spectre.libWavelet.Tests/ConvolutionTest.cpp new file mode 100644 index 00000000..51841ba4 --- /dev/null +++ b/src/Spectre.libWavelet.Tests/ConvolutionTest.cpp @@ -0,0 +1,46 @@ +/* +* ConvolutionTest.cpp +* Tests convolution of the signal with given filter. +* +Copyright 2018 Michal Gallus + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +#include <gtest/gtest.h> +#include "Spectre.libWavelet\Convolution.h" + +namespace +{ + using namespace spectre::algorithm::wavelet; + + TEST(ConvolutionInitialization, initializes) + { + EXPECT_NO_THROW(Convolution()); + } + + class ConvolutionTest : public ::testing::Test + { + protected: + Convolution convolution; + }; + + TEST_F(ConvolutionTest, properly_convolves_the_kernel_over_a_signal) + { + Signal signal = { 1.0, 2.0, 3.0, 4.0 }; + Signal kernel = { -0.5, 1.0 }; + Signal result = convolution.Convolve(kernel, signal); + Signal correctResult = { -0.5, 0.0, 0.5, 1.0 }; + ASSERT_EQ(correctResult, result); + } +} diff --git a/src/Spectre.libWavelet.Tests/MeanAbsoluteDeviationNoiseEstimatorTest.cpp b/src/Spectre.libWavelet.Tests/MeanAbsoluteDeviationNoiseEstimatorTest.cpp new file mode 100644 index 00000000..11e46be2 --- /dev/null +++ b/src/Spectre.libWavelet.Tests/MeanAbsoluteDeviationNoiseEstimatorTest.cpp @@ -0,0 +1,48 @@ +/* +* MeanAbsoluteDeviationNoiseEstimatorTest.cpp +* Tests Mean Absolute Deviation noise estimator. +* +Copyright 2018 Michal Gallus + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +#include <gtest/gtest.h> +#include "Spectre.libWavelet\MeanAbsoluteDeviationNoiseEstimator.h" + +namespace +{ + using namespace spectre::algorithm::wavelet; + + TEST(MeanAbsoluteDeviationNoiseEstimatorInitialization, initializes) + { + EXPECT_NO_THROW(MeanAbsoluteDeviationNoiseEstimator(5.0)); + EXPECT_NO_THROW(MeanAbsoluteDeviationNoiseEstimator()); + } + + class MeanAbsoluteDeviationNoiseEstimatorTest : public ::testing::Test + { + protected: + MeanAbsoluteDeviationNoiseEstimator estimator; + }; + + TEST_F(MeanAbsoluteDeviationNoiseEstimatorTest, estimates_noise_for_regular_input) + { + Signal signal = { 1.0f, 2.0f, 3.0f }; + DataType maxAbsoluteError = 0.0001; + constexpr DataType result = static_cast<DataType>(1.4650890114825907); + + DataType estimate = estimator.Estimate(signal); + ASSERT_NEAR(estimate, result, maxAbsoluteError); + } +} diff --git a/src/Spectre.libWavelet.Tests/SoftThresholderTest.cpp b/src/Spectre.libWavelet.Tests/SoftThresholderTest.cpp new file mode 100644 index 00000000..9e054fd2 --- /dev/null +++ b/src/Spectre.libWavelet.Tests/SoftThresholderTest.cpp @@ -0,0 +1,49 @@ +/* +* SoftThresholderTest.cpp +* Testing of the soft tresholding. +* +Copyright 2018 Michal Gallus + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +#include <gtest/gtest.h> +#include "Spectre.libWavelet\SoftThresholder.h" + +namespace +{ + using namespace spectre::algorithm::wavelet; + + TEST(SoftThresholderInitialization, initializes) + { + EXPECT_NO_THROW(SoftThresholder(0.0)); + EXPECT_NO_THROW(SoftThresholder(9.0)); + EXPECT_NO_THROW(SoftThresholder(-11.0)); + } + + class SoftThresholderTest : public ::testing::Test + { + public: + SoftThresholderTest() : tresholder(1.0) {} + protected: + SoftThresholder tresholder; + }; + + TEST_F(SoftThresholderTest, properly_tresholds_signal) + { + Signal input = { -1.0f, 2.0f, -3.0f, 4.0f }; + Signal output = tresholder(input); + Signal correctOutput = { -0.0f, 1.0f, -2.0f, 3.0f }; + ASSERT_EQ(correctOutput, output); + } +} diff --git a/src/Spectre.libWavelet.Tests/Spectre.libWavelet.Tests.vcxproj b/src/Spectre.libWavelet.Tests/Spectre.libWavelet.Tests.vcxproj new file mode 100644 index 00000000..5546e159 --- /dev/null +++ b/src/Spectre.libWavelet.Tests/Spectre.libWavelet.Tests.vcxproj @@ -0,0 +1,160 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="15.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="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <VCProjectVersion>15.0</VCProjectVersion> + <ProjectGuid>{5B426532-B8C6-43BD-807A-CF772C731DC1}</ProjectGuid> + <RootNamespace>SpectrelibWaveletTests</RootNamespace> + <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <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" /> + <Import Project="..\PropertySheets\NativeTestProject.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="..\PropertySheets\NativeTestProject.props" /> + </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" /> + <Import Project="..\PropertySheets\NativeTestProject.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="..\PropertySheets\NativeTestProject.props" /> + </ImportGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <WarningLevel>Level4</WarningLevel> + <Optimization>Disabled</Optimization> + <SDLCheck>true</SDLCheck> + <TreatWarningAsError>true</TreatWarningAsError> + <PreprocessorDefinitions>GTEST_LANG_CXX11=1;_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>$(SolutionDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalOptions>/std:c++latest %(AdditionalOptions)</AdditionalOptions> + </ClCompile> + <Link> + <AdditionalLibraryDirectories>$(OutputPath);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <AdditionalDependencies>Spectre.libWavelet.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)'=='Debug|Win32'"> + <ClCompile> + <WarningLevel>Level4</WarningLevel> + <Optimization>Disabled</Optimization> + <SDLCheck>true</SDLCheck> + <TreatWarningAsError>true</TreatWarningAsError> + <PreprocessorDefinitions>GTEST_LANG_CXX11=1;_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>$(SolutionDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalOptions>/std:c++latest %(AdditionalOptions)</AdditionalOptions> + </ClCompile> + <Link> + <AdditionalLibraryDirectories>$(OutputPath);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <AdditionalDependencies>Spectre.libWavelet.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|x64'"> + <ClCompile> + <WarningLevel>Level4</WarningLevel> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + <TreatWarningAsError>true</TreatWarningAsError> + <PreprocessorDefinitions>GTEST_LANG_CXX11=1;_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>$(SolutionDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalOptions>/std:c++latest %(AdditionalOptions)</AdditionalOptions> + </ClCompile> + <Link> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + <AdditionalLibraryDirectories>$(OutputPath);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <AdditionalDependencies>Spectre.libWavelet.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>Level4</WarningLevel> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + <TreatWarningAsError>true</TreatWarningAsError> + <PreprocessorDefinitions>GTEST_LANG_CXX11=1;_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>$(SolutionDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalOptions>/std:c++latest %(AdditionalOptions)</AdditionalOptions> + </ClCompile> + <Link> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + <AdditionalLibraryDirectories>$(OutputPath);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <AdditionalDependencies>Spectre.libWavelet.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> + <ItemGroup> + <ClCompile Include="..\Common\Main.cpp" /> + <ClCompile Include="MeanAbsoluteDeviationNoiseEstimatorTest.cpp" /> + <ClCompile Include="ConvolutionTest.cpp" /> + <ClCompile Include="SoftThresholderTest.cpp" /> + </ItemGroup> + <ItemGroup> + <None Include="packages.config" /> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + <Import Project="..\packages\gmock.1.7.0\build\native\gmock.targets" Condition="Exists('..\packages\gmock.1.7.0\build\native\gmock.targets')" /> + <Import Project="..\packages\Microsoft.Gsl.0.1.2.1\build\native\Microsoft.Gsl.targets" Condition="Exists('..\packages\Microsoft.Gsl.0.1.2.1\build\native\Microsoft.Gsl.targets')" /> + </ImportGroup> + <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> + <PropertyGroup> + <ErrorText>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}.</ErrorText> + </PropertyGroup> + <Error Condition="!Exists('..\packages\gmock.1.7.0\build\native\gmock.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\gmock.1.7.0\build\native\gmock.targets'))" /> + <Error Condition="!Exists('..\packages\Microsoft.Gsl.0.1.2.1\build\native\Microsoft.Gsl.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Gsl.0.1.2.1\build\native\Microsoft.Gsl.targets'))" /> + </Target> +</Project> \ No newline at end of file diff --git a/src/Spectre.libWavelet.Tests/Spectre.libWavelet.Tests.vcxproj.filters b/src/Spectre.libWavelet.Tests/Spectre.libWavelet.Tests.vcxproj.filters new file mode 100644 index 00000000..3c98b165 --- /dev/null +++ b/src/Spectre.libWavelet.Tests/Spectre.libWavelet.Tests.vcxproj.filters @@ -0,0 +1,40 @@ +<?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> + <Filter Include="Resource Files"> + <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> + <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> + </Filter> + </ItemGroup> + <ItemGroup> + <ClCompile Include="..\Common\Main.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="$(MSBuildThisFileDirectory)..\..\lib\native\src\gtest\gtest-all.cc"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="$(MSBuildThisFileDirectory)..\..\lib\native\src\gmock\gmock-all.cc"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="MeanAbsoluteDeviationNoiseEstimatorTest.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="SoftThresholderTest.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="ConvolutionTest.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + </ItemGroup> + <ItemGroup> + <None Include="packages.config" /> + </ItemGroup> +</Project> \ No newline at end of file diff --git a/src/Spectre.libWavelet.Tests/packages.config b/src/Spectre.libWavelet.Tests/packages.config new file mode 100644 index 00000000..38663efd --- /dev/null +++ b/src/Spectre.libWavelet.Tests/packages.config @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="gmock" version="1.7.0" targetFramework="native" /> + <package id="Microsoft.Gsl" version="0.1.2.1" targetFramework="native" /> +</packages> \ No newline at end of file diff --git a/src/Spectre.libWavelet/Convolution.cpp b/src/Spectre.libWavelet/Convolution.cpp new file mode 100644 index 00000000..52e863a3 --- /dev/null +++ b/src/Spectre.libWavelet/Convolution.cpp @@ -0,0 +1,42 @@ +/* + * Convolution.cpp + * Performs convolution over a 1D signal. + * + Copyright 2018 Michal Gallus + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +#include "Convolution.h" + +namespace spectre::algorithm::wavelet +{ +Convolution::Convolution() +{ +} + +Signal Convolution::Convolve(const Signal& kernel, const Signal &signal) +{ + std::vector<DataType> convolved(signal.size()); + for (unsigned n = 0u; n < signal.size(); ++n) + { + size_t limit = kernel.size() < (n + 1) ? kernel.size() : (n + 1); + DataType result = 0.0f; // @sand3r-: speeds the computations up on vc++ + for (unsigned i = 0u; i < limit; ++i) + { + result += kernel[i] * signal[n - i]; + } + convolved[n] = result; + } + return convolved; +} +} diff --git a/src/Spectre.libWavelet/Convolution.h b/src/Spectre.libWavelet/Convolution.h new file mode 100644 index 00000000..b31bb2a9 --- /dev/null +++ b/src/Spectre.libWavelet/Convolution.h @@ -0,0 +1,44 @@ +/* + * Convolution.h + * Performs convolution over a 1D signal. + * + Copyright 2018 Michal Gallus + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +#pragma once +#include <span.h> +#include "DataTypes.h" + +namespace spectre::algorithm::wavelet +{ +/// <summary> +/// Filters the signal using rational transfer function. +/// The denominator is set to 1. +/// </summary> +class Convolution +{ +public: + /// <summary> + /// Initializes a new instance of the <see cref="Convolution"/> class. + /// </summary> + explicit Convolution(); + /// <summary> + /// Convolves the signal using provided kernel. + /// </summary> + /// <param name="kernel">Kernel to be used.</param> + /// <param name="signal">Signal to be convolved.</param> + /// <returns>Filtered signal.</returns> + Signal Convolve(const Signal& kernel, const Signal& signal); +}; +} diff --git a/src/Spectre.libWavelet/DataTypes.h b/src/Spectre.libWavelet/DataTypes.h new file mode 100644 index 00000000..0d2fa913 --- /dev/null +++ b/src/Spectre.libWavelet/DataTypes.h @@ -0,0 +1,26 @@ +/* + * DataTypes.h + * Contains data types used among the project + * + Copyright 2018 Michal Gallus + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +#pragma once +#include <vector> + +namespace spectre::algorithm::wavelet +{ +using DataType = double; +using Signal = std::vector<DataType>; +} diff --git a/src/Spectre.libWavelet/MeanAbsoluteDeviationNoiseEstimator.cpp b/src/Spectre.libWavelet/MeanAbsoluteDeviationNoiseEstimator.cpp new file mode 100644 index 00000000..e5b87f60 --- /dev/null +++ b/src/Spectre.libWavelet/MeanAbsoluteDeviationNoiseEstimator.cpp @@ -0,0 +1,37 @@ +/* + * MeanAbsoluteDeviationNoiseEstimator.cpp + * Estimates mean absolute devation of noise in the signal. + * + Copyright 2018 Michal Gallus + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +#include "Spectre.libStatistics/Statistics.h" +#include "MeanAbsoluteDeviationNoiseEstimator.h" + +namespace spectre::algorithm::wavelet +{ +MeanAbsoluteDeviationNoiseEstimator::MeanAbsoluteDeviationNoiseEstimator(DataType multiplier) : + m_Multiplier(multiplier) +{ +} + +DataType MeanAbsoluteDeviationNoiseEstimator::Estimate(const Signal& intensities) const +{ + constexpr auto locationOfThirdQuartileInNormalDistribution = static_cast<DataType>(.6745); + return m_Multiplier + * sqrt(2 * log(intensities.size())) + * statistics::simple_statistics::MeanAbsoluteDeviation(gsl::as_span(intensities)) + / locationOfThirdQuartileInNormalDistribution; +} +} \ No newline at end of file diff --git a/src/Spectre.libWavelet/MeanAbsoluteDeviationNoiseEstimator.h b/src/Spectre.libWavelet/MeanAbsoluteDeviationNoiseEstimator.h new file mode 100644 index 00000000..745af1c1 --- /dev/null +++ b/src/Spectre.libWavelet/MeanAbsoluteDeviationNoiseEstimator.h @@ -0,0 +1,45 @@ +/* + * MeanAbsoluteDeviationNoiseEstimator.h + * Estimates mean absolute devation of noise in the signal. + * + Copyright 2018 Michal Gallus + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +#pragma once +#include "DataTypes.h" + +namespace spectre::algorithm::wavelet +{ +/// <summary> +/// Estimates the Mean-absolute devaition of the noise in the signal +/// </summary> +class MeanAbsoluteDeviationNoiseEstimator +{ +public: + /// <summary> + /// Initializes a new instance of the + /// <see cref="MeanAbsoluteDeviationNoiseEstimator"/> class. + /// </summary> + /// <param name="multiplier">The multiplier used for computations.</param> + explicit MeanAbsoluteDeviationNoiseEstimator(DataType multiplier=1.0); + /// <summary> + /// Estimates the MAD of the noise. + /// </summary> + /// <param name="intensities">Signal to be analyzed.</param> + /// <returns>Estiamte of the noise in the signal.</returns> + DataType Estimate(const Signal& intensities) const; +private: + const DataType m_Multiplier; +}; +} diff --git a/src/Spectre.libWavelet/PrecomputedDaubechiesCoefficients.h b/src/Spectre.libWavelet/PrecomputedDaubechiesCoefficients.h new file mode 100644 index 00000000..5d915154 --- /dev/null +++ b/src/Spectre.libWavelet/PrecomputedDaubechiesCoefficients.h @@ -0,0 +1,75 @@ +/* + * PrecomputedDaubechiesCoefficients.h + * Contains precomputed daubechie filters coefficients. + * + Copyright 2018 Michal Gallus + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +#pragma once +#include <array> +#include "DataTypes.h" + +namespace spectre::algorithm::wavelet::precomputed +{ +constexpr std::array<const DataType, 8> precomputedDaubechiesCoefficient{ + 0.23037781330889653408355854935508, + 0.71484657055291567218091586255468, + 0.63088076792985892105036782595562, + 0.027983769416859854278767372193215, + 0.18703481171909294711319660109439, + 0.030841381835560857660460953866277, + 0.032883011666885168799989713761533, + 0.010597401785069055987764663484541 +}; +constexpr std::array<const DataType, 8> ReconstructionVlNumerator{ + precomputedDaubechiesCoefficient[0], + precomputedDaubechiesCoefficient[1], + precomputedDaubechiesCoefficient[2], + -precomputedDaubechiesCoefficient[3], + -precomputedDaubechiesCoefficient[4], + precomputedDaubechiesCoefficient[5], + precomputedDaubechiesCoefficient[6], + -precomputedDaubechiesCoefficient[7] +}; +constexpr std::array<const DataType, 8> DecompositionYhNumerator{ + -precomputedDaubechiesCoefficient[0], + precomputedDaubechiesCoefficient[1], + -precomputedDaubechiesCoefficient[2], + -precomputedDaubechiesCoefficient[3], + precomputedDaubechiesCoefficient[4], + precomputedDaubechiesCoefficient[5], + -precomputedDaubechiesCoefficient[6], + -precomputedDaubechiesCoefficient[7] +}; +constexpr std::array<const DataType, 8> DecompositionYlNumerator{ + -precomputedDaubechiesCoefficient[7], + precomputedDaubechiesCoefficient[6], + precomputedDaubechiesCoefficient[5], + -precomputedDaubechiesCoefficient[4], + -precomputedDaubechiesCoefficient[3], + precomputedDaubechiesCoefficient[2], + precomputedDaubechiesCoefficient[1], + precomputedDaubechiesCoefficient[0] +}; +constexpr std::array<const DataType, 8> ReconstructionVhNumerator{ + -precomputedDaubechiesCoefficient[7], + -precomputedDaubechiesCoefficient[6], + precomputedDaubechiesCoefficient[5], + precomputedDaubechiesCoefficient[4], + -precomputedDaubechiesCoefficient[3], + -precomputedDaubechiesCoefficient[2], + precomputedDaubechiesCoefficient[1], + -precomputedDaubechiesCoefficient[0] +}; +} diff --git a/src/Spectre.libWavelet/SoftThresholder.cpp b/src/Spectre.libWavelet/SoftThresholder.cpp new file mode 100644 index 00000000..83d44832 --- /dev/null +++ b/src/Spectre.libWavelet/SoftThresholder.cpp @@ -0,0 +1,38 @@ +/* + * SoftThresholder.cpp + * Performs a soft tresholding on the provided signal. + * + Copyright 2018 Michal Gallus + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +#include "Spectre.libFunctional/Transform.h" +#include "SoftThresholder.h" + +namespace spectre::algorithm::wavelet +{ +SoftThresholder::SoftThresholder(DataType threshold) + : m_Threshold(threshold) +{ +} + +Signal SoftThresholder::operator()(const Signal &signal) const +{ + const auto& threshold = m_Threshold; + const auto thresholding = [threshold](DataType value) + { + return std::max(static_cast<DataType>(0), std::abs(value) - threshold) * (value < 0 ? -1 : 1); + }; + return core::functional::transform(gsl::as_span(signal), thresholding); +} +} diff --git a/src/Spectre.libWavelet/SoftThresholder.h b/src/Spectre.libWavelet/SoftThresholder.h new file mode 100644 index 00000000..d97e786e --- /dev/null +++ b/src/Spectre.libWavelet/SoftThresholder.h @@ -0,0 +1,44 @@ +/* + * SoftThresholder.h + * Performs a soft tresholding on the provided signal. + * + Copyright 2018 Michal Gallus + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +#pragma once +#include "DataTypes.h" + +namespace spectre::algorithm::wavelet +{ +/// <summary> +/// Applies soft tresholding on the signal provided. +/// </summary> +class SoftThresholder +{ +public: + /// <summary> + /// Initializes a new instance of the <see cref="SoftThresholder"/> class. + /// </summary> + /// <param name="threshold">Treshold to be used.</param> + explicit SoftThresholder(DataType threshold); + /// <summary> + /// Tresholds the signal + /// </summary> + /// <param name="signal">Signal to apply tresholding to.</param> + /// <returns>Tresholded signal.</returns> + Signal operator()(const Signal& signal) const; +private: + const DataType m_Threshold; +}; +} diff --git a/src/Spectre.libWavelet/Spectre.libWavelet.vcxproj b/src/Spectre.libWavelet/Spectre.libWavelet.vcxproj new file mode 100644 index 00000000..5253389e --- /dev/null +++ b/src/Spectre.libWavelet/Spectre.libWavelet.vcxproj @@ -0,0 +1,158 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="15.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="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <VCProjectVersion>15.0</VCProjectVersion> + <ProjectGuid>{3BD3D898-F14B-4129-BAE5-6E3E83E9D982}</ProjectGuid> + <RootNamespace>SpectreeWavelet</RootNamespace> + <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + <ProjectName>Spectre.libWavelet</ProjectName> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Label="Shared"> + </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" /> + <Import Project="..\PropertySheets\NativeProject.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="..\PropertySheets\NativeProject.props" /> + </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" /> + <Import Project="..\PropertySheets\NativeProject.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="..\PropertySheets\NativeProject.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <IntDir>$(Platform)$(Configuration)\</IntDir> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <WarningLevel>Level4</WarningLevel> + <Optimization>Disabled</Optimization> + <SDLCheck>true</SDLCheck> + <AdditionalOptions>/std:c++latest %(AdditionalOptions)</AdditionalOptions> + <TreatWarningAsError>true</TreatWarningAsError> + </ClCompile> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <WarningLevel>Level4</WarningLevel> + <Optimization>Disabled</Optimization> + <SDLCheck>true</SDLCheck> + <AdditionalOptions>/std:c++latest %(AdditionalOptions)</AdditionalOptions> + <TreatWarningAsError>true</TreatWarningAsError> + </ClCompile> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <WarningLevel>Level4</WarningLevel> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + <AdditionalOptions>/std:c++latest %(AdditionalOptions)</AdditionalOptions> + <TreatWarningAsError>true</TreatWarningAsError> + </ClCompile> + <Link> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <WarningLevel>Level4</WarningLevel> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + <AdditionalOptions>/std:c++latest %(AdditionalOptions)</AdditionalOptions> + <TreatWarningAsError>true</TreatWarningAsError> + </ClCompile> + <Link> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + </ItemDefinitionGroup> + <ItemGroup> + <ClInclude Include="Convolution.h" /> + <ClInclude Include="DataTypes.h" /> + <ClInclude Include="MeanAbsoluteDeviationNoiseEstimator.h" /> + <ClInclude Include="PrecomputedDaubechiesCoefficients.h" /> + <ClInclude Include="SoftThresholder.h" /> + </ItemGroup> + <ItemGroup> + <ClCompile Include="Convolution.cpp" /> + <ClCompile Include="MeanAbsoluteDeviationNoiseEstimator.cpp" /> + <ClCompile Include="SoftThresholder.cpp" /> + </ItemGroup> + <ItemGroup> + <None Include="packages.config" /> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + <Import Project="..\packages\Microsoft.Gsl.0.1.2.1\build\native\Microsoft.Gsl.targets" Condition="Exists('..\packages\Microsoft.Gsl.0.1.2.1\build\native\Microsoft.Gsl.targets')" /> + <Import Project="..\packages\opencv3.redist.3.0.0.1\build\native\opencv3.redist.targets" Condition="Exists('..\packages\opencv3.redist.3.0.0.1\build\native\opencv3.redist.targets')" /> + <Import Project="..\packages\opencv3.3.0.0.1\build\native\opencv3.targets" Condition="Exists('..\packages\opencv3.3.0.0.1\build\native\opencv3.targets')" /> + </ImportGroup> + <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> + <PropertyGroup> + <ErrorText>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}.</ErrorText> + </PropertyGroup> + <Error Condition="!Exists('..\packages\Microsoft.Gsl.0.1.2.1\build\native\Microsoft.Gsl.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Gsl.0.1.2.1\build\native\Microsoft.Gsl.targets'))" /> + <Error Condition="!Exists('..\packages\opencv3.redist.3.0.0.1\build\native\opencv3.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\opencv3.redist.3.0.0.1\build\native\opencv3.redist.targets'))" /> + <Error Condition="!Exists('..\packages\opencv3.3.0.0.1\build\native\opencv3.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\opencv3.3.0.0.1\build\native\opencv3.props'))" /> + <Error Condition="!Exists('..\packages\opencv3.3.0.0.1\build\native\opencv3.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\opencv3.3.0.0.1\build\native\opencv3.targets'))" /> + </Target> +</Project> \ No newline at end of file diff --git a/src/Spectre.libWavelet/Spectre.libWavelet.vcxproj.filters b/src/Spectre.libWavelet/Spectre.libWavelet.vcxproj.filters new file mode 100644 index 00000000..bec02df2 --- /dev/null +++ b/src/Spectre.libWavelet/Spectre.libWavelet.vcxproj.filters @@ -0,0 +1,48 @@ +<?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> + <Filter Include="Resource Files"> + <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> + <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> + </Filter> + </ItemGroup> + <ItemGroup> + <ClInclude Include="MeanAbsoluteDeviationNoiseEstimator.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="DataTypes.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="PrecomputedDaubechiesCoefficients.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="SoftThresholder.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="Convolution.h"> + <Filter>Header Files</Filter> + </ClInclude> + </ItemGroup> + <ItemGroup> + <ClCompile Include="MeanAbsoluteDeviationNoiseEstimator.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="SoftThresholder.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="Convolution.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + </ItemGroup> + <ItemGroup> + <None Include="packages.config" /> + </ItemGroup> +</Project> \ No newline at end of file diff --git a/src/Spectre.libWavelet/packages.config b/src/Spectre.libWavelet/packages.config new file mode 100644 index 00000000..c9bdee33 --- /dev/null +++ b/src/Spectre.libWavelet/packages.config @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="Microsoft.Gsl" version="0.1.2.1" targetFramework="native" /> + <package id="opencv3" version="3.0.0.1" targetFramework="native" /> + <package id="opencv3.redist" version="3.0.0.1" targetFramework="native" /> +</packages> \ No newline at end of file diff --git a/src/native-algorithms.sln b/src/native-algorithms.sln index f2351571..76b40d37 100644 --- a/src/native-algorithms.sln +++ b/src/native-algorithms.sln @@ -1,12 +1,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 -VisualStudioVersion = 15.0.27130.2010 +VisualStudioVersion = 15.0.26730.12 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Spectre.libClustering", "Spectre.libClustering\Spectre.libClustering.vcxproj", "{450F225C-4610-4B20-84AE-2ED5B4C8D7C4}" - ProjectSection(ProjectDependencies) = postProject - {7417BF00-028B-4797-B58A-6058CA338493} = {7417BF00-028B-4797-B58A-6058CA338493} - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Spectre.libClustering.Tests", "Spectre.libClustering.Tests\Spectre.libClustering.Tests.vcxproj", "{1C2E181F-EAB0-46AA-B096-8BC78D7D8DB3}" ProjectSection(ProjectDependencies) = postProject @@ -16,14 +13,8 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Spectre.libDivik", "Spectre.libDivik\Spectre.libDivik.vcxproj", "{369BDAFF-9E57-40D0-830D-B9232F35E4F4}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Spectre.libGenetic", "Spectre.libGenetic\Spectre.libGenetic.vcxproj", "{9786751A-6AE1-48D3-938D-4129D0399667}" - ProjectSection(ProjectDependencies) = postProject - {7417BF00-028B-4797-B58A-6058CA338493} = {7417BF00-028B-4797-B58A-6058CA338493} - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Spectre.libDataset", "Spectre.libDataset\Spectre.libDataset.vcxproj", "{B7DB309D-3ED6-4771-993D-A1CF3A6436D9}" - ProjectSection(ProjectDependencies) = postProject - {7417BF00-028B-4797-B58A-6058CA338493} = {7417BF00-028B-4797-B58A-6058CA338493} - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Spectre.libDataset.Tests", "Spectre.libDataset.Tests\Spectre.libDataset.Tests.vcxproj", "{E6B2EF6F-86BD-4E2C-B860-1B9F0D3B9556}" ProjectSection(ProjectDependencies) = postProject @@ -32,54 +23,43 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Spectre.libDataset.Tests", EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Spectre.libGaussianMixtureModelling.Tests", "Spectre.libGaussianMixtureModelling.Tests\Spectre.libGaussianMixtureModelling.Tests.vcxproj", "{2185C120-7B01-4E2E-B200-858A2D25C715}" ProjectSection(ProjectDependencies) = postProject - {104D9A93-F6D7-4BF4-961F-7C52FEAEA77B} = {104D9A93-F6D7-4BF4-961F-7C52FEAEA77B} + {7417BF00-028B-4797-B58A-6058CA338493} = {7417BF00-028B-4797-B58A-6058CA338493} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Spectre.libGaussianMixtureModelling", "Spectre.libGaussianMixtureModelling\Spectre.libGaussianMixtureModelling.vcxproj", "{104D9A93-F6D7-4BF4-961F-7C52FEAEA77B}" - ProjectSection(ProjectDependencies) = postProject - {7417BF00-028B-4797-B58A-6058CA338493} = {7417BF00-028B-4797-B58A-6058CA338493} - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Spectre.libException", "Spectre.libException\Spectre.libException.vcxproj", "{7417BF00-028B-4797-B58A-6058CA338493}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Spectre.libGenetic.Tests", "Spectre.libGenetic.Tests\Spectre.libGenetic.Tests.vcxproj", "{F5FFC2E5-66F4-493A-8D77-D47128A719D9}" ProjectSection(ProjectDependencies) = postProject + {7417BF00-028B-4797-B58A-6058CA338493} = {7417BF00-028B-4797-B58A-6058CA338493} {9786751A-6AE1-48D3-938D-4129D0399667} = {9786751A-6AE1-48D3-938D-4129D0399667} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Spectre.libClassifier", "Spectre.libClassifier\Spectre.libClassifier.vcxproj", "{5419AEEB-98B4-4D79-9FCA-A794200073FC}" - ProjectSection(ProjectDependencies) = postProject - {7417BF00-028B-4797-B58A-6058CA338493} = {7417BF00-028B-4797-B58A-6058CA338493} - {7EB0161F-4E8A-4C72-BA18-31B554F411F2} = {7EB0161F-4E8A-4C72-BA18-31B554F411F2} - {B7DB309D-3ED6-4771-993D-A1CF3A6436D9} = {B7DB309D-3ED6-4771-993D-A1CF3A6436D9} - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Spectre.libClassifier.Tests", "Spectre.libClassifier.Tests\Spectre.libClassifier.Tests.vcxproj", "{B6B8D608-32E7-4F09-B91D-EA5832D74C07}" ProjectSection(ProjectDependencies) = postProject {7417BF00-028B-4797-B58A-6058CA338493} = {7417BF00-028B-4797-B58A-6058CA338493} - {76542909-5FC8-405B-8E6D-D2E529162A7A} = {76542909-5FC8-405B-8E6D-D2E529162A7A} - {9786751A-6AE1-48D3-938D-4129D0399667} = {9786751A-6AE1-48D3-938D-4129D0399667} {7EB0161F-4E8A-4C72-BA18-31B554F411F2} = {7EB0161F-4E8A-4C72-BA18-31B554F411F2} + {B7DB309D-3ED6-4771-993D-A1CF3A6436D9} = {B7DB309D-3ED6-4771-993D-A1CF3A6436D9} {5419AEEB-98B4-4D79-9FCA-A794200073FC} = {5419AEEB-98B4-4D79-9FCA-A794200073FC} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Spectre.libStatistics", "Spectre.libStatistics\Spectre.libStatistics.vcxproj", "{76542909-5FC8-405B-8E6D-D2E529162A7A}" - ProjectSection(ProjectDependencies) = postProject - {B7DB309D-3ED6-4771-993D-A1CF3A6436D9} = {B7DB309D-3ED6-4771-993D-A1CF3A6436D9} - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Spectre.libStatistics.Tests", "Spectre.libStatistics.Tests\Spectre.libStatistics.Tests.vcxproj", "{81F10DE8-B9EF-400F-B3A7-57F2AFF35A14}" ProjectSection(ProjectDependencies) = postProject + {7417BF00-028B-4797-B58A-6058CA338493} = {7417BF00-028B-4797-B58A-6058CA338493} {76542909-5FC8-405B-8E6D-D2E529162A7A} = {76542909-5FC8-405B-8E6D-D2E529162A7A} + {B7DB309D-3ED6-4771-993D-A1CF3A6436D9} = {B7DB309D-3ED6-4771-993D-A1CF3A6436D9} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Spectre.libFunctional", "Spectre.libFunctional\Spectre.libFunctional.vcxproj", "{7EB0161F-4E8A-4C72-BA18-31B554F411F2}" - ProjectSection(ProjectDependencies) = postProject - {7417BF00-028B-4797-B58A-6058CA338493} = {7417BF00-028B-4797-B58A-6058CA338493} - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Spectre.libFunctional.Tests", "Spectre.libFunctional.Tests\Spectre.libFunctional.Tests.vcxproj", "{CF33269B-0876-4651-A8B9-2E32740C05C7}" ProjectSection(ProjectDependencies) = postProject + {7417BF00-028B-4797-B58A-6058CA338493} = {7417BF00-028B-4797-B58A-6058CA338493} {7EB0161F-4E8A-4C72-BA18-31B554F411F2} = {7EB0161F-4E8A-4C72-BA18-31B554F411F2} EndProjectSection EndProject @@ -93,6 +73,13 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "algorithm", "algorithm", "{ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "unsupervised", "unsupervised", "{1C5130A0-168B-41FA-911C-576D3034F160}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Spectre.libWavelet", "Spectre.libWavelet\Spectre.libWavelet.vcxproj", "{3BD3D898-F14B-4129-BAE5-6E3E83E9D982}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Spectre.libWavelet.Tests", "Spectre.libWavelet.Tests\Spectre.libWavelet.Tests.vcxproj", "{5B426532-B8C6-43BD-807A-CF772C731DC1}" + ProjectSection(ProjectDependencies) = postProject + {3BD3D898-F14B-4129-BAE5-6E3E83E9D982} = {3BD3D898-F14B-4129-BAE5-6E3E83E9D982} + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 @@ -295,6 +282,29 @@ Global {CF33269B-0876-4651-A8B9-2E32740C05C7}.Release|x64.Build.0 = Release|x64 {CF33269B-0876-4651-A8B9-2E32740C05C7}.Release|x86.ActiveCfg = Release|Win32 {CF33269B-0876-4651-A8B9-2E32740C05C7}.Release|x86.Build.0 = Release|Win32 + {3BD3D898-F14B-4129-BAE5-6E3E83E9D982}.Debug|Win32.ActiveCfg = Debug|Win32 + {3BD3D898-F14B-4129-BAE5-6E3E83E9D982}.Debug|Win32.Build.0 = Debug|Win32 + {3BD3D898-F14B-4129-BAE5-6E3E83E9D982}.Debug|x64.ActiveCfg = Debug|x64 + {3BD3D898-F14B-4129-BAE5-6E3E83E9D982}.Debug|x64.Build.0 = Debug|x64 + {3BD3D898-F14B-4129-BAE5-6E3E83E9D982}.Debug|x86.ActiveCfg = Debug|x64 + {3BD3D898-F14B-4129-BAE5-6E3E83E9D982}.Release|Win32.ActiveCfg = Release|Win32 + {3BD3D898-F14B-4129-BAE5-6E3E83E9D982}.Release|Win32.Build.0 = Release|Win32 + {3BD3D898-F14B-4129-BAE5-6E3E83E9D982}.Release|x64.ActiveCfg = Release|x64 + {3BD3D898-F14B-4129-BAE5-6E3E83E9D982}.Release|x64.Build.0 = Release|x64 + {3BD3D898-F14B-4129-BAE5-6E3E83E9D982}.Release|x86.ActiveCfg = Release|Win32 + {3BD3D898-F14B-4129-BAE5-6E3E83E9D982}.Release|x86.Build.0 = Release|Win32 + {5B426532-B8C6-43BD-807A-CF772C731DC1}.Debug|Win32.ActiveCfg = Debug|Win32 + {5B426532-B8C6-43BD-807A-CF772C731DC1}.Debug|Win32.Build.0 = Debug|Win32 + {5B426532-B8C6-43BD-807A-CF772C731DC1}.Debug|x64.ActiveCfg = Debug|x64 + {5B426532-B8C6-43BD-807A-CF772C731DC1}.Debug|x64.Build.0 = Debug|x64 + {5B426532-B8C6-43BD-807A-CF772C731DC1}.Debug|x86.ActiveCfg = Debug|Win32 + {5B426532-B8C6-43BD-807A-CF772C731DC1}.Debug|x86.Build.0 = Debug|Win32 + {5B426532-B8C6-43BD-807A-CF772C731DC1}.Release|Win32.ActiveCfg = Release|Win32 + {5B426532-B8C6-43BD-807A-CF772C731DC1}.Release|Win32.Build.0 = Release|Win32 + {5B426532-B8C6-43BD-807A-CF772C731DC1}.Release|x64.ActiveCfg = Release|x64 + {5B426532-B8C6-43BD-807A-CF772C731DC1}.Release|x64.Build.0 = Release|x64 + {5B426532-B8C6-43BD-807A-CF772C731DC1}.Release|x86.ActiveCfg = Release|Win32 + {5B426532-B8C6-43BD-807A-CF772C731DC1}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -316,6 +326,8 @@ Global {81F10DE8-B9EF-400F-B3A7-57F2AFF35A14} = {161BFBEB-A19E-4F5C-A7C1-1AAF0A6DA3EC} {7EB0161F-4E8A-4C72-BA18-31B554F411F2} = {A136EE60-7CFE-4FEF-8BF8-7CB9AFC94353} {CF33269B-0876-4651-A8B9-2E32740C05C7} = {A136EE60-7CFE-4FEF-8BF8-7CB9AFC94353} + {3BD3D898-F14B-4129-BAE5-6E3E83E9D982} = {1006E08E-0DB2-4645-961A-1B1C902198C4} + {5B426532-B8C6-43BD-807A-CF772C731DC1} = {1006E08E-0DB2-4645-961A-1B1C902198C4} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {ED57AF8B-7937-40C6-9764-D313AB08FEC9}