chore: Update project files and configurations; enhance .gitignore, add Qodana and SonarScanner scripts, and improve test project references

This commit is contained in:
Miha Kralj
2025-12-03 09:27:29 -08:00
parent 1d145d0622
commit 4a0a8d6da2
28 changed files with 257 additions and 88 deletions
-4
View File
@@ -1,7 +1,3 @@
using System;
using Xunit;
using QuanTAlib;
namespace QuanTAlib.Tests;
public class EmaTests
+3 -5
View File
@@ -4,9 +4,7 @@ using System.Linq;
using Skender.Stock.Indicators;
using TALib;
using Tulip;
using Xunit;
using Xunit.Abstractions;
using QuanTAlib;
namespace QuanTAlib.Tests;
@@ -213,7 +211,7 @@ public class EmaValidationTests
// Calculate Tulip EMA
var emaIndicator = Tulip.Indicators.ema;
double[][] inputs = { tData };
double[] options = { (double)period };
double[] options = { period };
double[][] outputs = { new double[tData.Length] };
emaIndicator.Run(inputs, options, outputs);
@@ -246,7 +244,7 @@ public class EmaValidationTests
// Calculate Tulip EMA
var emaIndicator = Tulip.Indicators.ema;
double[][] inputs = { tData };
double[] options = { (double)period };
double[] options = { period };
double[][] outputs = { new double[tData.Length] };
emaIndicator.Run(inputs, options, outputs);
@@ -275,7 +273,7 @@ public class EmaValidationTests
// Calculate Tulip EMA
var emaIndicator = Tulip.Indicators.ema;
double[][] inputs = { sourceData };
double[] options = { (double)period };
double[] options = { period };
double[][] outputs = { new double[sourceData.Length] };
emaIndicator.Run(inputs, options, outputs);
+16 -3
View File
@@ -25,12 +25,25 @@ namespace QuanTAlib;
/// </remarks>
public class Ema
{
private struct State
private struct State : IEquatable<State>
{
public double Ema;
public double E;
public bool IsHot;
public static State New() => new() { Ema = 0, E = 1.0, IsHot = false };
public readonly bool Equals(State other) =>
Ema == other.Ema && E == other.E && IsHot == other.IsHot;
public override readonly bool Equals(object? obj) =>
obj is State other && Equals(other);
public override readonly int GetHashCode() =>
HashCode.Combine(Ema, E, IsHot);
public static bool operator ==(State left, State right) => left.Equals(right);
public static bool operator !=(State left, State right) => !left.Equals(right);
}
private readonly double _alpha;
@@ -60,7 +73,7 @@ public class Ema
/// <summary>
/// Creates EMA with specified alpha smoothing factor.
/// </summary>
/// <param name="alpha">Smoothing factor (0 < alpha <= 1)</param>
/// <param name="alpha">Smoothing factor (0 &lt; alpha &lt;= 1)</param>
public Ema(double alpha)
{
if (alpha <= 0 || alpha > 1)
@@ -217,7 +230,7 @@ public class Ema
/// </summary>
/// <param name="source">Input values</param>
/// <param name="output">Output span (must be same length as source)</param>
/// <param name="alpha">Smoothing factor (0 < alpha <= 1)</param>
/// <param name="alpha">Smoothing factor (0 &lt; alpha &lt;= 1)</param>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void Calculate(ReadOnlySpan<double> source, Span<double> output, double alpha)
{
-4
View File
@@ -1,7 +1,3 @@
using System;
using System.Linq;
using Xunit;
using QuanTAlib;
namespace QuanTAlib.Tests;
-4
View File
@@ -1,7 +1,3 @@
using System;
using Xunit;
using QuanTAlib;
namespace QuanTAlib.Tests;
public class SmaTests
+3 -5
View File
@@ -4,9 +4,7 @@ using System.Linq;
using Skender.Stock.Indicators;
using TALib;
using Tulip;
using Xunit;
using Xunit.Abstractions;
using QuanTAlib;
namespace QuanTAlib.Tests;
@@ -213,7 +211,7 @@ public class SmaValidationTests
// Calculate Tulip SMA
var smaIndicator = Tulip.Indicators.sma;
double[][] inputs = { tData };
double[] options = { (double)period };
double[] options = { period };
int lookback = period - 1;
double[][] outputs = { new double[tData.Length - lookback] };
@@ -247,7 +245,7 @@ public class SmaValidationTests
// Calculate Tulip SMA
var smaIndicator = Tulip.Indicators.sma;
double[][] inputs = { tData };
double[] options = { (double)period };
double[] options = { period };
int lookback = period - 1;
double[][] outputs = { new double[tData.Length - lookback] };
@@ -277,7 +275,7 @@ public class SmaValidationTests
// Calculate Tulip SMA
var smaIndicator = Tulip.Indicators.sma;
double[][] inputs = { sourceData };
double[] options = { (double)period };
double[] options = { period };
int lookback = period - 1;
double[][] outputs = { new double[sourceData.Length - lookback] };
-3
View File
@@ -1,6 +1,3 @@
using System.Linq;
using Xunit;
using QuanTAlib;
namespace QuanTAlib.Tests;
-4
View File
@@ -1,7 +1,3 @@
using System;
using Xunit;
using QuanTAlib;
namespace QuanTAlib.Tests;
public class WmaTests
+3 -5
View File
@@ -4,9 +4,7 @@ using System.Linq;
using Skender.Stock.Indicators;
using TALib;
using Tulip;
using Xunit;
using Xunit.Abstractions;
using QuanTAlib;
namespace QuanTAlib.Tests;
@@ -213,7 +211,7 @@ public class WmaValidationTests
// Calculate Tulip WMA
var wmaIndicator = Tulip.Indicators.wma;
double[][] inputs = { tData };
double[] options = { (double)period };
double[] options = { period };
int lookback = period - 1;
double[][] outputs = { new double[tData.Length - lookback] };
@@ -247,7 +245,7 @@ public class WmaValidationTests
// Calculate Tulip WMA
var wmaIndicator = Tulip.Indicators.wma;
double[][] inputs = { tData };
double[] options = { (double)period };
double[] options = { period };
int lookback = period - 1;
double[][] outputs = { new double[tData.Length - lookback] };
@@ -277,7 +275,7 @@ public class WmaValidationTests
// Calculate Tulip WMA
var wmaIndicator = Tulip.Indicators.wma;
double[][] inputs = { sourceData };
double[] options = { (double)period };
double[] options = { period };
int lookback = period - 1;
double[][] outputs = { new double[sourceData.Length - lookback] };
-3
View File
@@ -1,6 +1,3 @@
using System.Linq;
using Xunit;
using QuanTAlib;
namespace QuanTAlib.Tests;