diff --git a/.github/workflows/benchmark.yaml b/.github/workflows/benchmark.yaml
new file mode 100644
index 0000000..2517d9f
--- /dev/null
+++ b/.github/workflows/benchmark.yaml
@@ -0,0 +1,24 @@
+name: Benchmark
+
+on:
+ workflow_dispatch:
+ push:
+ branches:
+ - main
+
+jobs:
+ benchmark:
+ name: Run Benchmarks
+ runs-on: windows-latest
+ strategy:
+ matrix:
+ dotnet-version: [8.x, 9.x]
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/setup-dotnet@v4
+ with:
+ dotnet-version: ${{matrix.dotnet-version}}
+ dotnet-quality: "preview"
+ - name: Run benchmark
+ working-directory: src/FftSharp.Benchmark
+ run: dotnet run --exporters json --filter '*'
\ No newline at end of file
diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index 47e2b01..f8d417f 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -14,14 +14,12 @@ jobs:
runs-on: windows-latest
steps:
- name: 🛒 Checkout
- uses: actions/checkout@v3
- - name: ✨ Setup .NET 6
- uses: actions/setup-dotnet@v3
- with:
- dotnet-version: "6.0.x"
+ uses: actions/checkout@v4
+ - name: ✨ Setup .NET
+ uses: actions/setup-dotnet@v4
- name: 🚚 Restore
run: dotnet restore src
- name: 🛠️ Build
- run: dotnet build src --configuration Release --no-restore
+ run: dotnet build src
- name: 🧪 Test
- run: dotnet test src --configuration Release --no-build
+ run: dotnet test src
\ No newline at end of file
diff --git a/.github/workflows/package.yaml b/.github/workflows/package.yaml
index d1388a7..bd2d1b4 100644
--- a/.github/workflows/package.yaml
+++ b/.github/workflows/package.yaml
@@ -9,30 +9,20 @@ jobs:
runs-on: windows-latest
steps:
- name: 🛒 Checkout
- uses: actions/checkout@v3
- - name: ✨ Setup .NET 6
- uses: actions/setup-dotnet@v3
- with:
- dotnet-version: "6.0.x"
+ uses: actions/checkout@v4
+ - name: ✨ Setup .NET
+ uses: actions/setup-dotnet@v4
- name: 🚚 Restore
run: dotnet restore src
- name: 🛠️ Build
- run: dotnet build src --configuration Release --no-restore
+ run: dotnet build src
- name: 🧪 Test
- run: dotnet test src --configuration Release --no-build
+ run: dotnet test src
- name: 📦 Pack
- run: dotnet pack src --configuration Release --no-build
- - name: 💾 Store
- uses: actions/upload-artifact@v2
- with:
- name: Packages
- retention-days: 1
- path: |
- src/FftSharp/bin/Release/*.nupkg
- src/FftSharp/bin/Release/*.snupkg
+ run: dotnet pack src
- name: 🔑 Secret
uses: nuget/setup-nuget@v1
with:
nuget-api-key: ${{ secrets.NUGET_API_KEY }}
- name: 🚀 Deploy
- run: nuget push "src\FftSharp\bin\Release\*.nupkg" -SkipDuplicate -Source https://api.nuget.org/v3/index.json
+ run: nuget push "src\FftSharp\bin\Release\*.nupkg" -SkipDuplicate -Source https://api.nuget.org/v3/index.json
\ No newline at end of file
diff --git a/src/FftSharp.Benchmark/BenchmarkLoadData.cs b/src/FftSharp.Benchmark/BenchmarkLoadData.cs
new file mode 100644
index 0000000..febcc04
--- /dev/null
+++ b/src/FftSharp.Benchmark/BenchmarkLoadData.cs
@@ -0,0 +1,17 @@
+namespace FftSharp.Benchmark;
+
+public static class BenchmarkLoadData
+{
+ public static double[] Double(string fileName) =>
+ File.ReadLines(fileName)
+ .Where(x => !x.StartsWith('#') && x.Length > 1)
+ .Select(x => double.Parse(x))
+ .ToArray();
+
+ public static System.Numerics.Complex[] Complex(string fileName) =>
+ File.ReadLines(fileName)
+ .Select(x => x.Trim('(').Trim(')').Trim('j'))
+ .Select(x => x.Replace("-", " -").Replace("+", " +").Trim())
+ .Select(x => new System.Numerics.Complex(double.Parse(x.Split(' ')[0]), double.Parse(x.Split(' ')[1])))
+ .ToArray();
+}
diff --git a/src/FftSharp.Benchmark/Benchmarking.md b/src/FftSharp.Benchmark/Benchmarking.md
new file mode 100644
index 0000000..0d5fe4f
--- /dev/null
+++ b/src/FftSharp.Benchmark/Benchmarking.md
@@ -0,0 +1,49 @@
+# Benchmarking
+
+## Benchmarking FFTSharp
+
+To run the benchmarks navigate to the `src/FftSharp.Benchmark` directory and run the following command:
+
+```bash
+dotnet run -c Release
+```
+
+## Results 12/20/2023
+
+### BluesteinSizeBenchmark
+```
+BenchmarkDotNet v0.13.11, Windows 11 (10.0.22631.2861/23H2/2023Update/SunValley3)
+Intel Core i7-1065G7 CPU 1.30GHz, 1 CPU, 8 logical and 4 physical cores
+.NET SDK 8.0.100
+ [Host] : .NET 6.0.25 (6.0.2523.51912), X64 RyuJIT AVX2
+ .NET 6.0 : .NET 6.0.25 (6.0.2523.51912), X64 RyuJIT AVX2
+ .NET 8.0 : .NET 8.0.0 (8.0.23.53103), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI
+```
+| Method | Job | Runtime | DataLength | Mean | Error | StdDev | Gen0 | Gen1 | Gen2 | Allocated |
+|---------- |--------- |--------- |----------- |-------------:|-------------:|-------------:|---------:|---------:|---------:|------------:|
+| **Bluestein** | **.NET 6.0** | **.NET 6.0** | **100** | **26.40 μs** | **0.401 μs** | **0.375 μs** | **7.1716** | **0.0305** | **-** | **29.36 KB** |
+| Bluestein | .NET 8.0 | .NET 8.0 | 100 | 24.97 μs | 0.321 μs | 0.284 μs | 7.1716 | - | - | 29.36 KB |
+| **Bluestein** | **.NET 6.0** | **.NET 6.0** | **1000** | **247.14 μs** | **3.809 μs** | **3.181 μs** | **58.1055** | **16.1133** | **-** | **239.49 KB** |
+| Bluestein | .NET 8.0 | .NET 8.0 | 1000 | 239.35 μs | 4.046 μs | 3.379 μs | 58.1055 | 16.3574 | - | 239.49 KB |
+| **Bluestein** | **.NET 6.0** | **.NET 6.0** | **10000** | **5,426.03 μs** | **88.896 μs** | **102.372 μs** | **984.3750** | **984.3750** | **984.3750** | **3641.08 KB** |
+| Bluestein | .NET 8.0 | .NET 8.0 | 10000 | 5,348.21 μs | 103.018 μs | 86.025 μs | 984.3750 | 984.3750 | 984.3750 | 3641.04 KB |
+| **Bluestein** | **.NET 6.0** | **.NET 6.0** | **100000** | **84,122.15 μs** | **1,655.385 μs** | **2,374.104 μs** | **833.3333** | **833.3333** | **833.3333** | **29749.57 KB** |
+| Bluestein | .NET 8.0 | .NET 8.0 | 100000 | 83,047.50 μs | 1,654.760 μs | 2,718.818 μs | 666.6667 | 666.6667 | 666.6667 | 29751.45 KB |
+
+### FftBenchmark
+```
+BenchmarkDotNet v0.13.11, Windows 11 (10.0.22631.2861/23H2/2023Update/SunValley3)
+Intel Core i7-1065G7 CPU 1.30GHz, 1 CPU, 8 logical and 4 physical cores
+.NET SDK 8.0.100
+ [Host] : .NET 6.0.25 (6.0.2523.51912), X64 RyuJIT AVX2
+ .NET 6.0 : .NET 6.0.25 (6.0.2523.51912), X64 RyuJIT AVX2
+ .NET 8.0 : .NET 8.0.0 (8.0.23.53103), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI
+```
+| Method | Job | Runtime | Mean | Error | StdDev | Gen0 | Gen1 | Allocated |
+|------------------------ |--------- |--------- |----------:|---------:|---------:|--------:|--------:|----------:|
+| FFT_Forward | .NET 6.0 | .NET 6.0 | 41.47 μs | 0.722 μs | 0.676 μs | 1.9531 | - | 8.02 KB |
+| FFT_ForwardReal | .NET 6.0 | .NET 6.0 | 42.72 μs | 0.715 μs | 0.669 μs | 2.9297 | - | 12.06 KB |
+| FFT_BluesteinComparason | .NET 6.0 | .NET 6.0 | 233.21 μs | 3.444 μs | 3.053 μs | 54.4434 | 15.3809 | 224.24 KB |
+| FFT_Forward | .NET 8.0 | .NET 8.0 | 41.08 μs | 0.749 μs | 0.585 μs | 1.9531 | - | 8.02 KB |
+| FFT_ForwardReal | .NET 8.0 | .NET 8.0 | 41.79 μs | 0.788 μs | 0.698 μs | 2.9297 | - | 12.06 KB |
+| FFT_BluesteinComparason | .NET 8.0 | .NET 8.0 | 223.61 μs | 4.330 μs | 4.633 μs | 54.4434 | 15.3809 | 224.23 KB |
\ No newline at end of file
diff --git a/src/FftSharp.Benchmark/BluesteinSizeBenchmark.cs b/src/FftSharp.Benchmark/BluesteinSizeBenchmark.cs
new file mode 100644
index 0000000..23ea71c
--- /dev/null
+++ b/src/FftSharp.Benchmark/BluesteinSizeBenchmark.cs
@@ -0,0 +1,34 @@
+using BenchmarkDotNet.Attributes;
+using BenchmarkDotNet.Jobs;
+using MathNet.Numerics;
+namespace FftSharp.Benchmark;
+
+[MemoryDiagnoser]
+[SimpleJob(RuntimeMoniker.Net60)]
+[SimpleJob(RuntimeMoniker.Net80)]
+public class BluesteinSizeBenchmark
+{
+ private double[] Sample;
+ [Params(100, 1000, 10_000, 100_000)]
+ public int DataLength { get ; set; }
+ public double Frequency = 60;
+ public double SampleRate = 1000;
+
+ [GlobalSetup]
+ public void BluesteinSizeBenchmarkSetup()
+ {
+ this.Sample = Generate.Sinusoidal(this.DataLength, this.SampleRate, this.Frequency, 1);
+ if(this.Sample.Length != this.DataLength)
+ {
+ throw new Exception("Sample length does not match DataLength");
+ }
+ }
+
+ [Benchmark]
+ public void Bluestein()
+ {
+ var something = Experimental.Bluestein(this.Sample);
+ }
+
+}
+
diff --git a/src/FftSharp.Benchmark/FftBenchmark.cs b/src/FftSharp.Benchmark/FftBenchmark.cs
new file mode 100644
index 0000000..36a1cec
--- /dev/null
+++ b/src/FftSharp.Benchmark/FftBenchmark.cs
@@ -0,0 +1,36 @@
+using BenchmarkDotNet.Attributes;
+using BenchmarkDotNet.Jobs;
+
+namespace FftSharp.Benchmark;
+[SimpleJob(RuntimeMoniker.Net60)]
+[SimpleJob(RuntimeMoniker.Net80)]
+[MemoryDiagnoser]
+public class FftBenchmark
+{
+ private double[] Sample;
+
+ [GlobalSetup]
+ public void FftBenchmarkSetup()
+ {
+ this.Sample = BenchmarkLoadData.Double("sample.txt");
+ }
+
+ [Benchmark]
+ public void FFT_Forward()
+ {
+ var something = FFT.Forward(this.Sample);
+ }
+
+ [Benchmark]
+ public void FFT_ForwardReal()
+ {
+ var something = FFT.ForwardReal(this.Sample);
+ }
+
+ [Benchmark]
+ public void FFT_BluesteinComparason()
+ {
+ var something = Experimental.Bluestein(this.Sample);
+ }
+}
+
diff --git a/src/FftSharp.Benchmark/FftSharp.Benchmark.csproj b/src/FftSharp.Benchmark/FftSharp.Benchmark.csproj
new file mode 100644
index 0000000..1b1fd9f
--- /dev/null
+++ b/src/FftSharp.Benchmark/FftSharp.Benchmark.csproj
@@ -0,0 +1,29 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ $(NoWarn);CA1018;CA5351;CA1825;CA8618
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Always
+
+
+
+
diff --git a/src/FftSharp.Benchmark/Program.cs b/src/FftSharp.Benchmark/Program.cs
new file mode 100644
index 0000000..2b12659
--- /dev/null
+++ b/src/FftSharp.Benchmark/Program.cs
@@ -0,0 +1,16 @@
+using BenchmarkDotNet.Configs;
+using BenchmarkDotNet.Environments;
+using BenchmarkDotNet.Jobs;
+using BenchmarkDotNet.Running;
+
+namespace FftSharp.Benchmark;
+
+public class Program
+{
+ static void Main(string[] args)
+ {
+ Console.WriteLine("FftSharp Benchmarks!");
+ BenchmarkRunner.Run();
+ BenchmarkRunner.Run();
+ }
+}
diff --git a/src/FftSharp.Benchmark/sample.txt b/src/FftSharp.Benchmark/sample.txt
new file mode 100644
index 0000000..1399ed0
--- /dev/null
+++ b/src/FftSharp.Benchmark/sample.txt
@@ -0,0 +1,523 @@
+# These data simulate a sample of audio with the following parameters:
+# sample rate: 48 kHz
+# points: 512 (2^9)
+# offset: 0.1 (above zero)
+# tone: 2 kHz (amplitude 2)
+# tone: 10 kHz (amplitude 10)
+# tone: 20 kHz (amplitude .5)
+#
+# Quick and dirty checksum
+# the sum of these values is 71.52
+# the sum of the sins of these values is 10.417026634786811
++0.33
++2.15
++1.44
++1.37
++0.24
++2.60
++3.51
++1.98
++1.88
++0.08
++1.82
++1.30
++0.23
+-1.16
+-1.35
+-0.58
+-0.84
+-1.35
+-2.72
+-2.53
+-0.02
+-0.76
+-0.48
+-2.10
++0.30
++1.86
++1.60
++1.49
++0.58
++2.12
++2.79
++1.99
++1.20
++0.80
++2.18
++1.60
+-0.37
+-1.25
+-1.99
++0.35
+-1.19
+-1.62
+-3.28
+-2.57
++0.07
+-0.81
+-1.13
+-1.68
+-0.25
++1.55
++1.08
++1.53
++0.65
++2.53
++2.79
++2.42
++1.72
++0.54
++2.39
++1.51
++0.22
+-1.42
+-1.44
++0.29
+-1.61
+-1.50
+-3.23
+-2.20
+-0.01
+-1.39
+-0.47
+-1.65
++0.25
++2.05
++1.48
++0.91
++0.76
++2.76
++2.73
++2.45
++1.09
++0.28
++2.07
++1.16
++0.27
+-1.17
+-1.50
++0.20
+-0.91
+-1.58
+-2.46
+-2.55
+-0.31
+-0.94
+-1.13
+-1.85
++0.42
++1.56
++0.85
++0.88
++0.66
++2.73
++3.23
++2.47
++1.12
++0.74
++1.60
++1.73
++0.28
+-1.54
+-2.18
+-0.50
+-1.09
+-1.39
+-2.91
+-2.69
+-0.16
+-1.04
+-1.24
+-1.52
+-0.39
++1.69
++1.52
++0.87
++0.31
++2.75
++3.56
++2.53
++1.29
++0.33
++1.81
++1.34
++0.13
+-1.58
+-2.05
+-0.11
+-0.85
+-1.73
+-3.30
+-2.10
+-0.43
+-0.67
+-1.34
+-1.43
++0.22
++2.16
++1.35
++1.38
++0.21
++2.23
++3.21
++1.79
++1.90
++0.38
++1.60
++1.10
++0.44
+-1.07
+-1.69
+-0.09
+-0.73
+-2.26
+-2.89
+-2.68
+-0.02
+-0.96
+-0.89
+-1.58
++0.27
++2.33
++0.97
++0.87
++0.50
++2.52
++2.82
++1.61
++1.13
+-0.04
++1.98
++1.28
+-0.38
+-1.24
+-1.52
+-0.40
+-0.79
+-2.31
+-2.89
+-1.88
++0.16
+-1.59
+-0.81
+-1.86
++0.57
++1.92
++1.44
++1.13
++0.45
++3.02
++3.49
++2.51
++1.15
+-0.06
++2.43
++1.01
++0.48
+-1.09
+-1.55
+-0.09
+-1.35
+-1.35
+-3.37
+-2.15
+-0.71
+-1.41
+-0.97
+-1.55
+-0.14
++1.64
++0.91
++1.59
++0.17
++2.65
++3.16
++2.20
++1.24
+-0.17
++1.63
++1.71
++0.31
+-0.74
+-1.68
+-0.35
+-1.43
+-1.87
+-3.20
+-1.95
+-0.34
+-0.97
+-1.15
+-1.76
+-0.16
++2.33
++1.28
++0.81
++1.02
++3.00
++2.76
++2.31
++0.99
+-0.00
++1.60
++0.94
++0.33
+-1.53
+-1.49
++0.04
+-1.13
+-2.10
+-2.56
+-1.98
+-0.39
+-0.70
+-0.66
+-1.67
+-0.06
++2.11
++1.09
++1.45
++1.03
++2.65
++2.69
++2.16
++1.89
++0.68
++2.07
++0.97
+-0.40
+-1.08
+-1.66
+-0.23
+-0.83
+-2.02
+-2.61
+-2.32
+-0.00
+-1.07
+-0.94
+-1.97
++0.23
++1.89
++0.98
++1.06
++0.83
++2.50
++3.52
++1.88
++1.09
+-0.04
++2.19
++1.04
++0.13
+-1.12
+-1.56
+-0.12
+-1.60
+-1.90
+-3.28
+-1.98
+-0.27
+-0.90
+-0.83
+-2.12
++0.17
++1.79
++1.66
++0.93
++0.15
++2.32
++3.23
++2.34
++1.15
++0.07
++1.55
++1.28
+-0.11
+-0.79
+-1.51
+-0.08
+-0.75
+-2.14
+-2.45
+-1.99
++0.06
+-1.14
+-0.62
+-1.78
++0.15
++1.64
++1.09
++1.20
++0.45
++2.70
++3.20
++2.47
++1.81
++0.11
++2.21
++1.18
++0.07
+-0.83
+-2.12
++0.30
+-1.18
+-1.48
+-2.45
+-2.57
+-0.34
+-1.28
+-1.28
+-1.87
++0.22
++1.92
++1.58
++1.17
++0.79
++2.83
++2.72
++1.64
++1.51
++0.44
++2.10
++1.65
++0.46
+-1.39
+-1.96
+-0.01
+-1.04
+-2.26
+-2.87
+-1.85
+-0.67
+-1.13
+-1.40
+-1.98
++0.59
++1.37
++1.00
++0.84
++0.55
++2.61
++3.46
++1.76
++1.02
+-0.04
++2.31
++1.67
++0.35
+-1.39
+-2.16
+-0.48
+-1.52
+-1.76
+-2.67
+-2.01
+-0.60
+-1.21
+-1.42
+-1.85
++0.08
++1.69
++1.27
++1.22
++0.83
++2.23
++2.70
++1.68
++1.42
++0.56
++1.91
++1.55
++0.06
+-1.55
+-1.75
+-0.57
+-0.92
+-1.99
+-2.70
+-2.13
+-0.37
+-1.06
+-0.63
+-1.71
++0.51
++1.74
++1.48
++1.39
++0.78
++2.27
++3.52
++2.13
++1.89
+-0.14
++2.08
++0.99
++0.57
+-1.19
+-1.90
++0.32
+-1.64
+-1.70
+-3.09
+-1.84
++0.03
+-1.15
+-0.80
+-2.04
++0.59
++2.02
++0.72
++1.69
++0.73
++2.38
++3.42
++2.48
++1.42
+-0.01
++2.04
++1.22
+-0.02
+-1.11
+-1.95
+-0.32
+-0.87
+-1.55
+-2.67
+-2.44
+-0.30
+-1.18
+-1.39
+-1.80
++0.52
++2.11
++1.32
++1.63
++0.27
++2.88
++3.16
++1.99
++1.64
++0.53
++2.12
++0.90
+-0.22
+-1.59
+-1.45
++0.05
+-1.46
+-1.73
+-2.76
+-2.06
++0.10
+-1.56
+-0.92
+-1.60
+-0.14
++1.35
++0.83
++0.88
++0.76
++2.30
++3.16
++2.11
\ No newline at end of file
diff --git a/src/FftSharp.Demo/FftSharp.Demo.csproj b/src/FftSharp.Demo/FftSharp.Demo.csproj
index 9be88bf..97b1177 100644
--- a/src/FftSharp.Demo/FftSharp.Demo.csproj
+++ b/src/FftSharp.Demo/FftSharp.Demo.csproj
@@ -1,6 +1,6 @@
- net6.0-windows
+ net8.0-windows
WinExe
false
true
diff --git a/src/FftSharp.Tests/FftSharp.Tests.csproj b/src/FftSharp.Tests/FftSharp.Tests.csproj
index 6da4e56..f3da40f 100644
--- a/src/FftSharp.Tests/FftSharp.Tests.csproj
+++ b/src/FftSharp.Tests/FftSharp.Tests.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
false
10
diff --git a/src/FftSharp.sln b/src/FftSharp.sln
index 2dd38a1..b2b5005 100644
--- a/src/FftSharp.sln
+++ b/src/FftSharp.sln
@@ -1,37 +1,43 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 17
-VisualStudioVersion = 17.0.31815.197
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FftSharp", "FftSharp\FftSharp.csproj", "{43680BFA-9D82-41F2-A56A-6B93433AE4E1}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FftSharp.Demo", "FftSharp.Demo\FftSharp.Demo.csproj", "{9EA24240-F1BF-4C5F-B08C-6D5C8AFBFDE7}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FftSharp.Tests", "FftSharp.Tests\FftSharp.Tests.csproj", "{A82CD7FC-ECA6-4BF7-BC73-22675DEC1CD0}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Release|Any CPU = Release|Any CPU
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {43680BFA-9D82-41F2-A56A-6B93433AE4E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {43680BFA-9D82-41F2-A56A-6B93433AE4E1}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {43680BFA-9D82-41F2-A56A-6B93433AE4E1}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {43680BFA-9D82-41F2-A56A-6B93433AE4E1}.Release|Any CPU.Build.0 = Release|Any CPU
- {9EA24240-F1BF-4C5F-B08C-6D5C8AFBFDE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {9EA24240-F1BF-4C5F-B08C-6D5C8AFBFDE7}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {9EA24240-F1BF-4C5F-B08C-6D5C8AFBFDE7}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {9EA24240-F1BF-4C5F-B08C-6D5C8AFBFDE7}.Release|Any CPU.Build.0 = Release|Any CPU
- {A82CD7FC-ECA6-4BF7-BC73-22675DEC1CD0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A82CD7FC-ECA6-4BF7-BC73-22675DEC1CD0}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A82CD7FC-ECA6-4BF7-BC73-22675DEC1CD0}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A82CD7FC-ECA6-4BF7-BC73-22675DEC1CD0}.Release|Any CPU.Build.0 = Release|Any CPU
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {1721ADCD-AF40-45E0-A3AA-DE007761C72A}
- EndGlobalSection
-EndGlobal
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.0.31815.197
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FftSharp", "FftSharp\FftSharp.csproj", "{43680BFA-9D82-41F2-A56A-6B93433AE4E1}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FftSharp.Demo", "FftSharp.Demo\FftSharp.Demo.csproj", "{9EA24240-F1BF-4C5F-B08C-6D5C8AFBFDE7}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FftSharp.Tests", "FftSharp.Tests\FftSharp.Tests.csproj", "{A82CD7FC-ECA6-4BF7-BC73-22675DEC1CD0}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FftSharp.Benchmark", "FftSharp.Benchmark\FftSharp.Benchmark.csproj", "{A3DE12AF-60E1-4CF2-86BF-73C2B345091B}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {43680BFA-9D82-41F2-A56A-6B93433AE4E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {43680BFA-9D82-41F2-A56A-6B93433AE4E1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {43680BFA-9D82-41F2-A56A-6B93433AE4E1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {43680BFA-9D82-41F2-A56A-6B93433AE4E1}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9EA24240-F1BF-4C5F-B08C-6D5C8AFBFDE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9EA24240-F1BF-4C5F-B08C-6D5C8AFBFDE7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9EA24240-F1BF-4C5F-B08C-6D5C8AFBFDE7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9EA24240-F1BF-4C5F-B08C-6D5C8AFBFDE7}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A82CD7FC-ECA6-4BF7-BC73-22675DEC1CD0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A82CD7FC-ECA6-4BF7-BC73-22675DEC1CD0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A82CD7FC-ECA6-4BF7-BC73-22675DEC1CD0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A82CD7FC-ECA6-4BF7-BC73-22675DEC1CD0}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A3DE12AF-60E1-4CF2-86BF-73C2B345091B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A3DE12AF-60E1-4CF2-86BF-73C2B345091B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A3DE12AF-60E1-4CF2-86BF-73C2B345091B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A3DE12AF-60E1-4CF2-86BF-73C2B345091B}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {1721ADCD-AF40-45E0-A3AA-DE007761C72A}
+ EndGlobalSection
+EndGlobal
diff --git a/src/FftSharp/FftSharp.csproj b/src/FftSharp/FftSharp.csproj
index d5842da..0ec6c36 100644
--- a/src/FftSharp/FftSharp.csproj
+++ b/src/FftSharp/FftSharp.csproj
@@ -1,7 +1,7 @@
- netstandard2.0;net6.0
+ netstandard2.0;net8.0
false
Library
https://github.com/swharden/FftSharp
@@ -35,7 +35,7 @@
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all